diff --git a/hqew/015-sql-front-end-and-logical-planning.md b/hqew/015-sql-front-end-and-logical-planning.md index 432acfc..6b4795c 100644 --- a/hqew/015-sql-front-end-and-logical-planning.md +++ b/hqew/015-sql-front-end-and-logical-planning.md @@ -47,15 +47,15 @@ A clean front end gives the engine: ## The pipeline in the companion repo -Relevant modules: +Relevant implementation areas: -- `tmp/how-query-engines-work/sql/src/main/kotlin/SqlTokenizer.kt` -- `tmp/how-query-engines-work/sql/src/main/kotlin/Tokens.kt` -- `tmp/how-query-engines-work/sql/src/main/kotlin/SqlParser.kt` -- `tmp/how-query-engines-work/sql/src/main/kotlin/Expressions.kt` -- `tmp/how-query-engines-work/sql/src/main/kotlin/SqlPlanner.kt` -- `tmp/how-query-engines-work/logical-plan/src/main/kotlin/LogicalPlan.kt` -- `tmp/how-query-engines-work/logical-plan/src/main/kotlin/Expressions.kt` +- SQL tokenization +- SQL tokens and keywords +- SQL parsing +- SQL AST expressions +- SQL-to-logical planning +- logical plan interfaces +- logical expressions Conceptually: @@ -368,4 +368,5 @@ It is what allows: ## Changelog +* **Apr 7, 2026** -- Removed references to ignored local `tmp/` paths. * **Apr 7, 2026** -- Added a dedicated note on SQL tokenization, parsing, AST structure, and logical planning. diff --git a/hqew/016-physical-plans-and-operators.md b/hqew/016-physical-plans-and-operators.md index b61c55e..bae7ea2 100644 --- a/hqew/016-physical-plans-and-operators.md +++ b/hqew/016-physical-plans-and-operators.md @@ -31,16 +31,16 @@ That makes the logical-to-physical boundary easy to study. ## The physical planning pipeline -Relevant modules: +Relevant implementation areas: -- `tmp/how-query-engines-work/query-planner/src/main/kotlin/QueryPlanner.kt` -- `tmp/how-query-engines-work/physical-plan/src/main/kotlin/PhysicalPlan.kt` -- `tmp/how-query-engines-work/physical-plan/src/main/kotlin/ScanExec.kt` -- `tmp/how-query-engines-work/physical-plan/src/main/kotlin/SelectionExec.kt` -- `tmp/how-query-engines-work/physical-plan/src/main/kotlin/ProjectionExec.kt` -- `tmp/how-query-engines-work/physical-plan/src/main/kotlin/HashAggregateExec.kt` -- `tmp/how-query-engines-work/physical-plan/src/main/kotlin/HashJoinExec.kt` -- `tmp/how-query-engines-work/physical-plan/src/main/kotlin/LimitExec.kt` +- query planning from logical to physical operators +- the physical-plan interface +- scan execution +- selection execution +- projection execution +- hash aggregation +- hash join +- limit execution Conceptually: @@ -375,4 +375,5 @@ So this note should be read as a physical-plan primer, not as the full space of ## Changelog +* **Apr 7, 2026** -- Removed references to ignored local `tmp/` paths. * **Apr 7, 2026** -- Added a dedicated note on physical planning, executable operators, and batch-oriented runtime behavior. diff --git a/hqew/017-expressions-types-and-nullability.md b/hqew/017-expressions-types-and-nullability.md index ff00ae9..8482a8c 100644 --- a/hqew/017-expressions-types-and-nullability.md +++ b/hqew/017-expressions-types-and-nullability.md @@ -49,18 +49,17 @@ So expressions are not side details. They are a large part of the engine's real ## The two-layer model -Relevant modules: +Relevant implementation areas: -- `tmp/how-query-engines-work/logical-plan/src/main/kotlin/LogicalExpr.kt` -- `tmp/how-query-engines-work/logical-plan/src/main/kotlin/Expressions.kt` -- `tmp/how-query-engines-work/physical-plan/src/main/kotlin/expressions/Expressions.kt` -- `tmp/how-query-engines-work/physical-plan/src/main/kotlin/expressions/BinaryExpression.kt` -- `tmp/how-query-engines-work/physical-plan/src/main/kotlin/expressions/CastExpression.kt` -- `tmp/how-query-engines-work/physical-plan/src/main/kotlin/expressions/AggregateExpression.kt` -- `tmp/how-query-engines-work/datatypes/src/main/kotlin/Schema.kt` -- `tmp/how-query-engines-work/datatypes/src/main/kotlin/ColumnVector.kt` -- `tmp/how-query-engines-work/datatypes/src/main/kotlin/RecordBatch.kt` -- `tmp/how-query-engines-work/datatypes/src/main/kotlin/ArrowTypes.kt` +- logical-expression interfaces and helpers +- physical-expression interfaces +- binary-expression evaluation +- cast evaluation +- aggregate-expression interfaces +- schema and field definitions +- column-vector abstractions +- record batches +- Arrow-based type definitions The key distinction is: @@ -381,4 +380,5 @@ That is why "choosing a type system" appears so early in the book. It affects mu ## Changelog +* **Apr 7, 2026** -- Removed references to ignored local `tmp/` paths. * **Apr 7, 2026** -- Added a dedicated note on expressions, Arrow-based types, coercion, aggregates, and null handling.