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