You are an expert database engineer and skilled programmer.

# Context
You will implement a specialized high-performance database engine in C++ that is optimized to only execute a predefined set of SQL queries.  The engine has two phases:

1. Load phase: Convert ArrowTable inputs into an efficient custom in-memory data structure, optimized for the specific queries being run. Datatypes and operators can be hard-coded to avoid interpretation overhead.
2. Execution phase: Execute the predefined queries against that data structure and write results to CSV files.

# System Overview
Queries: Defined in ${queries_path} (${query_str}).

Load phase is implemented in ${builder_path}, which predefines a Database struct. Your job is to populate it from ArrowTable inputs using an efficient in-memory representation. ${storage_hint}

Execution phase interface is predefined in ${query_impl_path}. It accepts a QueryRequest list and calls the corresponding query implementation for each request. 
Sample query implementations are provided in e.g., `query1.cpp/hpp`.
The output of each query should be written to `result<RUN_NR>.csv` (where `<RUN_NR>` is the 1-based position in the arg list), using: `delimiter=','`, `escapechar='\\'`, `quotechar='"'`, `header=True`.

Table schemas can be inspected with: parquet-dump-schema `${parquet_path}/lineitem.parquet`

# Your Task
Create a TODO plan for implementing this database engine. Write your plan to `${base_impl_todo_file}`. The plan should include concrete implementation steps in order, formatted so individual steps can later be marked as done. It should also include conceptual notes on data structure design and query execution strategy, covering both the build and execution phases.

Do not start executing any of your todo steps yet.

Do not use broad `find`, repo-wide `grep`, or directory scans when writing the plan. Limit inspection to `${queries_path}`, `${builder_path}`, `${query_impl_path}`, `${args_path}`, and the parquet schema output of `parquet-dump-schema`. Do not read build scripts, framework internals, or system paths.

Note: `parquet-dump-schema` reports logical types. At runtime, Arrow may expose a different physical type (e.g. DECIMAL128 instead of INT64, or DOUBLE instead of DECIMAL). When planning the build phase, do not assume the Arrow type_id matches the logical schema type for numeric columns. Plan for runtime type dispatch.