Skip to main content

Class: SQLLogicalPlanBuilder

Defined in: lang-sql/src/visitors/builder.ts:88

Translates a SQL AST into a logical plan tree by implementing SQLVisitor and LogicalPlanBuilder.

Implements​

Constructors​

Constructor​

new SQLLogicalPlanBuilder(db): SQLLogicalPlanBuilder

Defined in: lang-sql/src/visitors/builder.ts:112

Parameters​

ParameterTypeDescription
dbDortDBAsFriendReference to the database instance used to resolve functions, operators, aggregates, and casts.

Returns​

SQLLogicalPlanBuilder

Properties​

calcBuilders​

protected calcBuilders: Record<string, PlanVisitor<CalculationParams>>

Defined in: lang-sql/src/visitors/builder.ts:96

Per-language calculation builders used to convert plan fragments into plan.Calculation nodes.


dataAdapter​

protected dataAdapter: SQLDataAdapter<unknown>

Defined in: lang-sql/src/visitors/builder.ts:110

SQL data adapter used to construct row values.


db​

protected db: DortDBAsFriend

Defined in: lang-sql/src/visitors/builder.ts:114

Reference to the database instance used to resolve functions, operators, aggregates, and casts.


eqCheckers​

protected eqCheckers: Record<string, EqualityChecker>

Defined in: lang-sql/src/visitors/builder.ts:98

Per-language equality checkers for plan-node structural comparison.


inferrerMap​

protected inferrerMap: Record<string, SchemaInferrer> = {}

Defined in: lang-sql/src/visitors/builder.ts:94

Per-language SchemaInferrer instances keyed by language name.


langCtx​

protected langCtx: Record<string, unknown> & object

Defined in: lang-sql/src/visitors/builder.ts:103

Shared language context passed in via buildPlan; the sql entry holds the outer SQLLangCtx.

Type Declaration​

sql​

sql: SQLLangCtx

The SQL-specific language context for the current query scope.


localLangCtx​

protected localLangCtx: SQLLangCtx

Defined in: lang-sql/src/visitors/builder.ts:108

copied to keep outer lang ctx clean


renamers​

protected renamers: Record<string, AttributeRenamer>

Defined in: lang-sql/src/visitors/builder.ts:100

Per-language attribute renamers applied to non-local cross-boundary references.


stringifier​

protected stringifier: ASTDeterministicStringifier

Defined in: lang-sql/src/visitors/builder.ts:92

Produces deterministic string keys for subexpressions used as plan identifiers.

Methods​

buildLimit()​

protected buildLimit(node, op): Limit

Defined in: lang-sql/src/visitors/builder.ts:437

Builds a plan.Limit operator from LIMIT/OFFSET clauses.

Parameters​

ParameterType
nodeSelectStatement
opPlanTupleOperator

Returns​

Limit

Throws​

If either value is not a numeric constant.


buildPlan()​

buildPlan(node, ctx, langCtx): BuildPlanResult

Defined in: lang-sql/src/visitors/builder.ts:147

Builds a logical plan from an AST node.

Parameters​

ParameterTypeDescription
nodeASTNodeThe root node of the AST.
ctxIdSetThe context to use for the plan.
langCtxRecord<string, unknown>The per-language additional context. For example, SQL may use this to pass in definitions of CTEs created in an outer language switch.

Returns​

BuildPlanResult

The plan operator, as well as the inferred context (@see toInfer).

Implementation of​

LogicalPlanBuilder.buildPlan


checkRecursionValidity()​

protected checkRecursionValidity(node): SelectSet

Defined in: lang-sql/src/visitors/builder.ts:918

Validates that a WITH RECURSIVE query only uses supported features.

Parameters​

ParameterType
nodeWithQuery

Returns​

SelectSet

The top-level AST.SelectSet for further processing.

Throws​

If the query is not a UNION, or if unsupported cycle or search features are used.


cloneLangCtx()​

protected cloneLangCtx(ctx): SQLLangCtx

Defined in: lang-sql/src/visitors/builder.ts:140

Returns a shallow copy of ctx with the CTE maps cloned so sub-queries can extend them independently.

Parameters​

ParameterType
ctxSQLLangCtx

Returns​

SQLLangCtx


getAllTableNames()​

protected getAllTableNames(node): ASTIdentifier[]

Defined in: lang-sql/src/visitors/builder.ts:888

Get all table names forming a join (before aliasing)

Parameters​

ParameterType
nodeASTTableAlias | ASTIdentifier | JoinClause

Returns​

ASTIdentifier[]


getTableName()​

protected getTableName(node): [PlanTupleOperator, ASTIdentifier]

Defined in: lang-sql/src/visitors/builder.ts:638

Resolves a FROM-clause item to a tuple operator and optional relation name.

Parameters​

ParameterType
nodeASTTableAlias | ASTIdentifier | JoinClause

Returns​

[PlanTupleOperator, ASTIdentifier]


handleRecursion()​

protected handleRecursion(node): PlanTupleOperator

Defined in: lang-sql/src/visitors/builder.ts:943

Builds an plan.IndexedRecursion plan for a WITH RECURSIVE query after validating it via checkRecursionValidity.

Parameters​

ParameterType
nodeWithQuery

Returns​

PlanTupleOperator


idToTupleSource()​

protected idToTupleSource(name): [PlanTupleOperator, ASTIdentifier]

Defined in: lang-sql/src/visitors/builder.ts:604

Also handles CTEs and materialized CTEs

Parameters​

ParameterTypeDescription
nameASTIdentifiername of the tuple source

Returns​

[PlanTupleOperator, ASTIdentifier]


initLangCtx()​

protected initLangCtx(): SQLLangCtx

Defined in: lang-sql/src/visitors/builder.ts:133

Creates a fresh, empty SQLLangCtx.

Returns​

SQLLangCtx


isRecursive()​

protected isRecursive(node): boolean

Defined in: lang-sql/src/visitors/builder.ts:860

Determines if a WITH query is recursive.

Parameters​

ParameterType
nodeWithQuery

Returns​

boolean


materializeCte()​

protected materializeCte(node, subq): PlanTupleOperator

Defined in: lang-sql/src/visitors/builder.ts:1004

Wraps subq in a GroupBy that collects all rows into an array and registers the CTE name in localLangCtx.materializedCtes.

Parameters​

ParameterType
nodeWithQuery
subqPlanTupleOperator

Returns​

PlanTupleOperator


optimizeInOp()​

protected optimizeInOp(expr, subq): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:1030

Rewrites an IN subquery by pushing the needle value into the subquery as a selection, enabling the executor to apply an index scan when available.

Parameters​

ParameterType
exprASTIdentifier | PlanOpAsArg
subqPlanOperator

Returns​

PlanOperator


opToCalc()​

protected opToCalc(op): Calculation

Defined in: lang-sql/src/visitors/builder.ts:200

Converts an already-built plan operator into a plan.Calculation.

Parameters​

ParameterType
opPlanOperator

Returns​

Calculation


processAttr()​

protected processAttr(attr): Aliased<ASTIdentifier | Calculation>

Defined in: lang-sql/src/visitors/builder.ts:562

Bound to this; converts a SELECT item to an [expression, alias] pair.

Parameters​

ParameterType
attrASTNode

Returns​

Aliased<ASTIdentifier | Calculation>


processFnArg()​

protected processFnArg(item): ASTIdentifier | PlanOpAsArg

Defined in: lang-sql/src/visitors/builder.ts:188

Bound to this; wraps non-identifier nodes as { op } for use as function arguments.

Parameters​

ParameterType
itemASTNode

Returns​

ASTIdentifier | PlanOpAsArg


processNode()​

protected processNode(item): OpOrId

Defined in: lang-sql/src/visitors/builder.ts:184

Bound to this for array map usage; passes identifiers through and visits all other nodes.

Parameters​

ParameterType
itemASTNode

Returns​

OpOrId


processOrderItem()​

protected processOrderItem(item): Order

Defined in: lang-sql/src/visitors/builder.ts:393

Bound to this; converts an ORDER BY item to a plan.Order descriptor.

Parameters​

ParameterType
itemOrderByItem

Returns​

Order


renameWithQuery()​

protected renameWithQuery(node, subq): Projection

Defined in: lang-sql/src/visitors/builder.ts:817

Rename with query according to the with query name. If column names are provided, use them. Additionally, provide schemaless aliases for all columns.

Parameters​

ParameterType
nodeWithQuery
subqPlanTupleOperator

Returns​

Projection


toCalc()​

protected toCalc(node): ASTIdentifier | Calculation

Defined in: lang-sql/src/visitors/builder.ts:192

Converts an AST node to a plan.Calculation or identifier; extracts the field name for aggregate calls.

Parameters​

ParameterType
nodeASTNode

Returns​

ASTIdentifier | Calculation


visitAggregate()​

visitAggregate(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:736

Parameters​

ParameterType
nodeASTAggregate

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitAggregate


visitArray()​

visitArray(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:210

Parameters​

ParameterType
nodeASTArray

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitArray


visitCase()​

visitCase(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:705

Parameters​

ParameterType
nodeASTCase

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitCase


visitCast()​

visitCast(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:252

Parameters​

ParameterType
nodeASTCast

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitCast


visitExists()​

visitExists(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:283

Parameters​

ParameterType
nodeASTExists

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitExists


visitExpressionAlias()​

visitExpressionAlias(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:388

Parameters​

ParameterType
nodeASTExpressionAlias

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitExpressionAlias


visitFunction()​

visitFunction(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:1119

Parameters​

ParameterType
nodeASTFunction

Returns​

PlanOperator

Implementation of​

LogicalPlanBuilder.visitFunction


visitGroupByClause()​

visitGroupByClause(node, src?, aggregates?): PlanTupleOperator

Defined in: lang-sql/src/visitors/builder.ts:583

should be called only by SQLLogicalPlanBuilder#visitSelectSet, which provides the src and aggregates args

Parameters​

ParameterTypeDefault value
nodeGroupByClauseundefined
srcPlanTupleOperatornull
aggregatesAggregateCall[][]

Returns​

PlanTupleOperator

Implementation of​

SQLVisitor.visitGroupByClause


visitIdentifier()​

visitIdentifier(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:336

Parameters​

ParameterType
nodeASTIdentifier

Returns​

PlanOperator

Implementation of​

LogicalPlanBuilder.visitIdentifier


visitJoinClause()​

visitJoinClause(node): PlanTupleOperator

Defined in: lang-sql/src/visitors/builder.ts:649

Parameters​

ParameterType
nodeJoinClause

Returns​

PlanTupleOperator

Implementation of​

SQLVisitor.visitJoinClause


visitLangSwitch()​

visitLangSwitch(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:1143

Propagates the current CTE maps back to the shared langCtx before creating a PlanLangSwitch, making locally defined CTEs visible to the embedded language.

Parameters​

ParameterType
nodeLangSwitch

Returns​

PlanOperator

Implementation of​

LogicalPlanBuilder.visitLangSwitch


visitLiteral()​

visitLiteral<U>(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:1022

Type Parameters​

Type Parameter
U

Parameters​

ParameterType
nodeASTLiteral<U>

Returns​

PlanOperator

Implementation of​

LogicalPlanBuilder.visitLiteral


visitNumberLiteral()​

visitNumberLiteral(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:207

Parameters​

ParameterType
nodeASTNumberLiteral

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitNumberLiteral


visitOperator()​

visitOperator(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:1072

Parameters​

ParameterType
nodeASTOperator

Returns​

PlanOperator

Implementation of​

LogicalPlanBuilder.visitOperator


visitQuantifier()​

visitQuantifier(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:294

Parameters​

ParameterType
nodeASTQuantifier

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitQuantifier


visitRow()​

visitRow(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:232

Parameters​

ParameterType
nodeASTRow

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitRow


visitRowsFrom()​

visitRowsFrom(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:793

Parameters​

ParameterType
nodeRowsFrom

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitRowsFrom


visitSelectSet()​

visitSelectSet(node, _?, orderByAggs?): PlanTupleOperator

Defined in: lang-sql/src/visitors/builder.ts:486

Builds the plan for a single SELECT body, merging any outer ORDER BY aggregate calls supplied by the caller.

Parameters​

ParameterTypeDescription
nodeSelectSet-
_?unknownonly for compliance with PlanVisitor
orderByAggs?AggregateCall[]aggregate calls inferred from an enclosing ORDER BY clause.

Returns​

PlanTupleOperator

Throws​

UnsupportedError when the SELECT uses window functions.

Implementation of​

SQLVisitor.visitSelectSet


visitSelectSetOp()​

visitSelectSetOp(node, left?): PlanTupleOperator

Defined in: lang-sql/src/visitors/builder.ts:456

should be called only by SQLLogicalPlanBuilder#visitSelectSet, which provides the left arg

Parameters​

ParameterTypeDefault value
nodeSelectSetOpundefined
leftPlanTupleOperatornull

Returns​

PlanTupleOperator

Implementation of​

SQLVisitor.visitSelectSetOp


visitSelectStatement()​

visitSelectStatement(node): PlanTupleOperator

Defined in: lang-sql/src/visitors/builder.ts:400

Parameters​

ParameterType
nodeSelectStatement

Returns​

PlanTupleOperator

Implementation of​

SQLVisitor.visitSelectStatement


visitSQLIdentifier()​

visitSQLIdentifier(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:339

Parameters​

ParameterType
nodeSQLIdentifier

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitSQLIdentifier


visitStringLiteral()​

visitStringLiteral(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:204

Parameters​

ParameterType
nodeASTStringLiteral

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitStringLiteral


visitSubscript()​

visitSubscript(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:266

Parameters​

ParameterType
nodeASTSubscript

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitSubscript


visitTableAlias()​

visitTableAlias(node): PlanTupleOperator

Defined in: lang-sql/src/visitors/builder.ts:342

Parameters​

ParameterType
nodeASTTableAlias

Returns​

PlanTupleOperator

Implementation of​

SQLVisitor.visitTableAlias


visitTableFn()​

visitTableFn(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:776

Parameters​

ParameterType
nodeTableFn

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitTableFn


visitTuple()​

visitTuple(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:224

Parameters​

ParameterType
nodeASTTuple

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitTuple


visitValues()​

visitValues(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:713

Parameters​

ParameterType
nodeValuesClause

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitValues


visitWindowFn()​

visitWindowFn(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:773

Parameters​

ParameterType
nodeASTWindowFn

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitWindowFn


visitWindowSpec()​

visitWindowSpec(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:770

Parameters​

ParameterType
nodeWindowSpec

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitWindowSpec


visitWithQuery()​

visitWithQuery(node): PlanOperator

Defined in: lang-sql/src/visitors/builder.ts:796

Parameters​

ParameterType
nodeWithQuery

Returns​

PlanOperator

Implementation of​

SQLVisitor.visitWithQuery