opfsql 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +19 -0
- package/README.md +198 -0
- package/dist/binder/core/context.d.ts +15 -0
- package/dist/binder/core/errors.d.ts +4 -0
- package/dist/binder/core/helpers.d.ts +6 -0
- package/dist/binder/core/operators.d.ts +12 -0
- package/dist/binder/core/plan-utils.d.ts +4 -0
- package/dist/binder/core/scope.d.ts +34 -0
- package/dist/binder/core/type-check.d.ts +5 -0
- package/dist/binder/core/type-map.d.ts +8 -0
- package/dist/binder/core/utils/eval-constant.d.ts +4 -0
- package/dist/binder/core/utils/extract-columns.d.ts +4 -0
- package/dist/binder/core/utils/find-column.d.ts +4 -0
- package/dist/binder/core/utils/require-table.d.ts +3 -0
- package/dist/binder/expression/aggregate.d.ts +11 -0
- package/dist/binder/expression/between.d.ts +5 -0
- package/dist/binder/expression/case.d.ts +5 -0
- package/dist/binder/expression/cast.d.ts +5 -0
- package/dist/binder/expression/column-ref.d.ts +5 -0
- package/dist/binder/expression/comparison.d.ts +5 -0
- package/dist/binder/expression/conjunction.d.ts +5 -0
- package/dist/binder/expression/constant.d.ts +3 -0
- package/dist/binder/expression/function.d.ts +5 -0
- package/dist/binder/expression/index.d.ts +5 -0
- package/dist/binder/expression/operator.d.ts +5 -0
- package/dist/binder/expression/parameter.d.ts +4 -0
- package/dist/binder/expression/same-expression.d.ts +3 -0
- package/dist/binder/expression/star.d.ts +5 -0
- package/dist/binder/expression/subquery.d.ts +5 -0
- package/dist/binder/index.d.ts +30 -0
- package/dist/binder/statement/alter-table.d.ts +4 -0
- package/dist/binder/statement/create-index.d.ts +4 -0
- package/dist/binder/statement/create-table.d.ts +4 -0
- package/dist/binder/statement/cte.d.ts +16 -0
- package/dist/binder/statement/delete.d.ts +4 -0
- package/dist/binder/statement/drop.d.ts +3 -0
- package/dist/binder/statement/insert.d.ts +4 -0
- package/dist/binder/statement/query-node.d.ts +5 -0
- package/dist/binder/statement/select.d.ts +5 -0
- package/dist/binder/statement/set-operation.d.ts +5 -0
- package/dist/binder/statement/update.d.ts +4 -0
- package/dist/binder/table-ref/base-table.d.ts +5 -0
- package/dist/binder/table-ref/index.d.ts +5 -0
- package/dist/binder/table-ref/join.d.ts +6 -0
- package/dist/binder/table-ref/subquery.d.ts +5 -0
- package/dist/binder/tests/aggregates.test.d.ts +1 -0
- package/dist/binder/tests/binder.test.d.ts +1 -0
- package/dist/binder/tests/cte.test.d.ts +1 -0
- package/dist/binder/tests/ddl.test.d.ts +1 -0
- package/dist/binder/tests/dml.test.d.ts +1 -0
- package/dist/binder/tests/expressions.test.d.ts +1 -0
- package/dist/binder/tests/join.test.d.ts +1 -0
- package/dist/binder/tests/misc.test.d.ts +1 -0
- package/dist/binder/tests/select.test.d.ts +1 -0
- package/dist/binder/tests/subquery.test.d.ts +1 -0
- package/dist/binder/tests/test_helpers.d.ts +14 -0
- package/dist/binder/tests/union.test.d.ts +1 -0
- package/dist/binder/tests/utils.test.d.ts +1 -0
- package/dist/binder/types.d.ts +401 -0
- package/dist/engine/engine.d.ts +23 -0
- package/dist/engine/explain.d.ts +3 -0
- package/dist/engine/index.d.ts +3 -0
- package/dist/engine/session.d.ts +43 -0
- package/dist/engine/tests/engine.test.d.ts +1 -0
- package/dist/engine/tests/explain-format.test.d.ts +1 -0
- package/dist/engine/tests/explain.test.d.ts +1 -0
- package/dist/engine/tests/session.test.d.ts +1 -0
- package/dist/engine/types.d.ts +19 -0
- package/dist/executor/ddl/alter-drop.d.ts +5 -0
- package/dist/executor/ddl/create.d.ts +5 -0
- package/dist/executor/ddl/index.d.ts +2 -0
- package/dist/executor/ddl.d.ts +8 -0
- package/dist/executor/dml/delete.d.ts +5 -0
- package/dist/executor/dml/index.d.ts +3 -0
- package/dist/executor/dml/insert.d.ts +5 -0
- package/dist/executor/dml/update.d.ts +5 -0
- package/dist/executor/dml/utils/coerce.d.ts +3 -0
- package/dist/executor/dml/utils/index-maintenance.d.ts +5 -0
- package/dist/executor/dml/utils/scan.d.ts +16 -0
- package/dist/executor/dml.d.ts +8 -0
- package/dist/executor/errors.d.ts +4 -0
- package/dist/executor/evaluate/aggregate.d.ts +4 -0
- package/dist/executor/evaluate/between.d.ts +5 -0
- package/dist/executor/evaluate/case.d.ts +5 -0
- package/dist/executor/evaluate/cast.d.ts +5 -0
- package/dist/executor/evaluate/column-ref.d.ts +5 -0
- package/dist/executor/evaluate/comparison.d.ts +5 -0
- package/dist/executor/evaluate/compile.d.ts +11 -0
- package/dist/executor/evaluate/conjunction.d.ts +5 -0
- package/dist/executor/evaluate/context.d.ts +9 -0
- package/dist/executor/evaluate/function.d.ts +5 -0
- package/dist/executor/evaluate/functions/md5.d.ts +1 -0
- package/dist/executor/evaluate/functions/normalize-json.d.ts +8 -0
- package/dist/executor/evaluate/helpers.d.ts +14 -0
- package/dist/executor/evaluate/index.d.ts +6 -0
- package/dist/executor/evaluate/json-access.d.ts +7 -0
- package/dist/executor/evaluate/operator.d.ts +5 -0
- package/dist/executor/evaluate/parameter.d.ts +4 -0
- package/dist/executor/evaluate/subquery.d.ts +5 -0
- package/dist/executor/evaluate/utils/cast.d.ts +7 -0
- package/dist/executor/evaluate/utils/compare.d.ts +8 -0
- package/dist/executor/evaluate/utils/like.d.ts +2 -0
- package/dist/executor/evaluate/utils/serialize.d.ts +3 -0
- package/dist/executor/execute/index.d.ts +4 -0
- package/dist/executor/execute/result.d.ts +5 -0
- package/dist/executor/execute/select.d.ts +8 -0
- package/dist/executor/executor.d.ts +5 -0
- package/dist/executor/index.d.ts +3 -0
- package/dist/executor/operators/aggregate.d.ts +22 -0
- package/dist/executor/operators/cte.d.ts +37 -0
- package/dist/executor/operators/filter.d.ts +13 -0
- package/dist/executor/operators/index-min-max.d.ts +18 -0
- package/dist/executor/operators/index-scan.d.ts +22 -0
- package/dist/executor/operators/index-union-scan.d.ts +22 -0
- package/dist/executor/operators/join.d.ts +36 -0
- package/dist/executor/operators/limit.d.ts +13 -0
- package/dist/executor/operators/projection.d.ts +14 -0
- package/dist/executor/operators/scan.d.ts +29 -0
- package/dist/executor/operators/set.d.ts +22 -0
- package/dist/executor/operators/sort.d.ts +18 -0
- package/dist/executor/operators/utils.d.ts +10 -0
- package/dist/executor/planner/index.d.ts +5 -0
- package/dist/executor/planner/plan-aggregate.d.ts +5 -0
- package/dist/executor/planner/plan-cte.d.ts +6 -0
- package/dist/executor/planner/plan-filter.d.ts +4 -0
- package/dist/executor/planner/plan-get.d.ts +6 -0
- package/dist/executor/planner/plan-join.d.ts +5 -0
- package/dist/executor/planner/plan-limit.d.ts +4 -0
- package/dist/executor/planner/plan-order-by.d.ts +4 -0
- package/dist/executor/planner/plan-projection.d.ts +4 -0
- package/dist/executor/planner/plan-set.d.ts +5 -0
- package/dist/executor/planner/types.d.ts +12 -0
- package/dist/executor/planner.d.ts +5 -0
- package/dist/executor/resolve.d.ts +3 -0
- package/dist/executor/tests/compile.test.d.ts +1 -0
- package/dist/executor/tests/ddl-dml.test.d.ts +1 -0
- package/dist/executor/tests/evaluate.test.d.ts +1 -0
- package/dist/executor/tests/executor.test.d.ts +1 -0
- package/dist/executor/tests/functions.test.d.ts +1 -0
- package/dist/executor/tests/helpers.d.ts +34 -0
- package/dist/executor/tests/index-min-max.test.d.ts +1 -0
- package/dist/executor/tests/index-scan.test.d.ts +1 -0
- package/dist/executor/tests/index-union-scan.test.d.ts +1 -0
- package/dist/executor/tests/operators.test.d.ts +1 -0
- package/dist/executor/tests/planner.test.d.ts +1 -0
- package/dist/executor/tests/scan.test.d.ts +1 -0
- package/dist/executor/types.d.ts +39 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +5 -0
- package/dist/optimizer/build_probe_side.d.ts +2 -0
- package/dist/optimizer/decorrelate_exists.d.ts +2 -0
- package/dist/optimizer/expression_rewriter.d.ts +2 -0
- package/dist/optimizer/filter_combiner.d.ts +13 -0
- package/dist/optimizer/filter_pullup.d.ts +2 -0
- package/dist/optimizer/filter_pushdown.d.ts +2 -0
- package/dist/optimizer/in_clause_rewriter.d.ts +2 -0
- package/dist/optimizer/index.d.ts +15 -0
- package/dist/optimizer/index_selection.d.ts +3 -0
- package/dist/optimizer/join_order.d.ts +2 -0
- package/dist/optimizer/limit_pushdown.d.ts +2 -0
- package/dist/optimizer/remove_unused_columns.d.ts +2 -0
- package/dist/optimizer/reorder_filter.d.ts +4 -0
- package/dist/optimizer/tests/build_probe_side.test.d.ts +1 -0
- package/dist/optimizer/tests/decorrelate_exists.test.d.ts +1 -0
- package/dist/optimizer/tests/expression_rewriter.test.d.ts +1 -0
- package/dist/optimizer/tests/filter_combiner.test.d.ts +1 -0
- package/dist/optimizer/tests/filter_pullup.test.d.ts +1 -0
- package/dist/optimizer/tests/filter_pushdown.test.d.ts +1 -0
- package/dist/optimizer/tests/full_pipeline.test.d.ts +1 -0
- package/dist/optimizer/tests/in_clause_rewriter.test.d.ts +1 -0
- package/dist/optimizer/tests/index_selection.test.d.ts +1 -0
- package/dist/optimizer/tests/join_order.test.d.ts +1 -0
- package/dist/optimizer/tests/limit_pushdown.test.d.ts +1 -0
- package/dist/optimizer/tests/optimizer.test.d.ts +1 -0
- package/dist/optimizer/tests/remove_unused_columns.test.d.ts +1 -0
- package/dist/optimizer/tests/reorder_filter.test.d.ts +1 -0
- package/dist/optimizer/tests/test_helpers.d.ts +27 -0
- package/dist/optimizer/tests/utils.test.d.ts +1 -0
- package/dist/optimizer/utils/collect_column_refs.d.ts +2 -0
- package/dist/optimizer/utils/expression_key.d.ts +7 -0
- package/dist/optimizer/utils/expression_references_table.d.ts +2 -0
- package/dist/optimizer/utils/expressions_equal.d.ts +1 -0
- package/dist/optimizer/utils/flatten_conjunction.d.ts +2 -0
- package/dist/optimizer/utils/flip_comparison.d.ts +2 -0
- package/dist/optimizer/utils/get_expression_tables.d.ts +2 -0
- package/dist/optimizer/utils/get_operator_tables.d.ts +2 -0
- package/dist/optimizer/utils/index.d.ts +23 -0
- package/dist/optimizer/utils/is_column_ref.d.ts +2 -0
- package/dist/optimizer/utils/is_comparison.d.ts +2 -0
- package/dist/optimizer/utils/is_conjunction.d.ts +2 -0
- package/dist/optimizer/utils/is_constant.d.ts +2 -0
- package/dist/optimizer/utils/is_foldable.d.ts +2 -0
- package/dist/optimizer/utils/is_numeric_type.d.ts +2 -0
- package/dist/optimizer/utils/is_operator.d.ts +2 -0
- package/dist/optimizer/utils/is_parameter.d.ts +2 -0
- package/dist/optimizer/utils/make_bool_constant.d.ts +2 -0
- package/dist/optimizer/utils/make_conjunction.d.ts +2 -0
- package/dist/optimizer/utils/make_constant.d.ts +2 -0
- package/dist/optimizer/utils/make_null_constant.d.ts +2 -0
- package/dist/optimizer/utils/map_expression.d.ts +2 -0
- package/dist/optimizer/utils/map_operator_expressions.d.ts +2 -0
- package/dist/optimizer/utils/negate_comparison.d.ts +2 -0
- package/dist/parser/index.d.ts +3 -0
- package/dist/parser/lexer.d.ts +24 -0
- package/dist/parser/parser/base.d.ts +17 -0
- package/dist/parser/parser/ddl.d.ts +5 -0
- package/dist/parser/parser/dml.d.ts +5 -0
- package/dist/parser/parser/expressions.d.ts +5 -0
- package/dist/parser/parser/index.d.ts +7 -0
- package/dist/parser/parser/select.d.ts +3 -0
- package/dist/parser/parser/tcl.d.ts +3 -0
- package/dist/parser/parser/type-parser.d.ts +3 -0
- package/dist/parser/tests/lexer.test.d.ts +1 -0
- package/dist/parser/tests/parser.test.d.ts +1 -0
- package/dist/parser/types.d.ts +482 -0
- package/dist/store/backend/memory-storage.d.ts +16 -0
- package/dist/store/backend/node-storage.d.ts +33 -0
- package/dist/store/backend/opfs-storage.d.ts +39 -0
- package/dist/store/btree/btree.d.ts +48 -0
- package/dist/store/btree/compare.d.ts +13 -0
- package/dist/store/btree/search-bounds.d.ts +15 -0
- package/dist/store/btree/types.d.ts +33 -0
- package/dist/store/cache.d.ts +17 -0
- package/dist/store/catalog.d.ts +24 -0
- package/dist/store/errors.d.ts +5 -0
- package/dist/store/index-btree/compare.d.ts +3 -0
- package/dist/store/index-btree/index-btree.d.ts +53 -0
- package/dist/store/index-btree/search-bounds.d.ts +7 -0
- package/dist/store/index-btree/types.d.ts +27 -0
- package/dist/store/index-expression.d.ts +5 -0
- package/dist/store/index-manager.d.ts +23 -0
- package/dist/store/index.d.ts +10 -0
- package/dist/store/memory-storage.d.ts +13 -0
- package/dist/store/opfs/opfs-storage.d.ts +15 -0
- package/dist/store/opfs-storage.d.ts +44 -0
- package/dist/store/page-manager.d.ts +19 -0
- package/dist/store/row-manager.d.ts +15 -0
- package/dist/store/session-store.d.ts +20 -0
- package/dist/store/storage/memory-storage.d.ts +11 -0
- package/dist/store/storage/opfs-storage.d.ts +15 -0
- package/dist/store/storage.d.ts +28 -0
- package/dist/store/table-btree.d.ts +48 -0
- package/dist/store/table-manager.d.ts +17 -0
- package/dist/store/tests/btree.test.d.ts +1 -0
- package/dist/store/tests/catalog.test.d.ts +1 -0
- package/dist/store/tests/compare.test.d.ts +1 -0
- package/dist/store/tests/index-btree.test.d.ts +1 -0
- package/dist/store/tests/index-expression.test.d.ts +1 -0
- package/dist/store/tests/index-manager.test.d.ts +1 -0
- package/dist/store/tests/lru-cache.test.d.ts +1 -0
- package/dist/store/tests/memory-storage.d.ts +15 -0
- package/dist/store/tests/opfs-storage.test.d.ts +1 -0
- package/dist/store/tests/page-manager.test.d.ts +1 -0
- package/dist/store/tests/row-manager.test.d.ts +1 -0
- package/dist/store/tests/search-bounds.test.d.ts +1 -0
- package/dist/store/tests/storage.test.d.ts +1 -0
- package/dist/store/tests/table-btree.test.d.ts +1 -0
- package/dist/store/tests/vacuum.test.d.ts +1 -0
- package/dist/store/tests/wal-storage.test.d.ts +1 -0
- package/dist/store/types.d.ts +75 -0
- package/dist/store/vacuum.d.ts +12 -0
- package/dist/store/wal/crc32.d.ts +1 -0
- package/dist/store/wal/file-handle.d.ts +34 -0
- package/dist/store/wal/wal-storage.d.ts +50 -0
- package/dist/types.d.ts +87 -0
- package/dist/worker/client.d.ts +36 -0
- package/dist/worker/index.d.ts +1 -0
- package/dist/worker/protocol.d.ts +59 -0
- package/dist/worker/worker.d.ts +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { BoundExpression, ColumnBinding } from '../../binder/types.js';
|
|
2
|
+
import type { LogicalType } from '../../store/types.js';
|
|
3
|
+
import type { SyncEvalContext } from '../evaluate/context.js';
|
|
4
|
+
import type { SyncPhysicalOperator, Tuple } from '../types.js';
|
|
5
|
+
export declare class MockOperator implements SyncPhysicalOperator {
|
|
6
|
+
private readonly batches;
|
|
7
|
+
private readonly layout;
|
|
8
|
+
private index;
|
|
9
|
+
constructor(batches: Tuple[][], layout: ColumnBinding[]);
|
|
10
|
+
getLayout(): ColumnBinding[];
|
|
11
|
+
next(): Tuple[] | null;
|
|
12
|
+
reset(): void;
|
|
13
|
+
}
|
|
14
|
+
export declare function colRef(tableIndex: number, columnIndex: number, columnName?: string, returnType?: LogicalType): BoundExpression;
|
|
15
|
+
export declare function constant(value: string | number | boolean | null, returnType?: LogicalType): BoundExpression;
|
|
16
|
+
export declare function comparison(left: BoundExpression, right: BoundExpression, comparisonType?: 'EQUAL' | 'NOT_EQUAL' | 'LESS' | 'GREATER' | 'LESS_EQUAL' | 'GREATER_EQUAL'): BoundExpression;
|
|
17
|
+
export declare function conjunction(type: 'AND' | 'OR', ...children: BoundExpression[]): BoundExpression;
|
|
18
|
+
export declare function operator(operatorType: string, children: BoundExpression[], returnType?: LogicalType): BoundExpression;
|
|
19
|
+
export declare function between(input: BoundExpression, lower: BoundExpression, upper: BoundExpression): BoundExpression;
|
|
20
|
+
export declare function fnCall(functionName: string, children: BoundExpression[], returnType?: LogicalType): BoundExpression;
|
|
21
|
+
export declare function cast(child: BoundExpression, castType: LogicalType): BoundExpression;
|
|
22
|
+
export declare function caseExpr(checks: Array<{
|
|
23
|
+
when: BoundExpression;
|
|
24
|
+
then: BoundExpression;
|
|
25
|
+
}>, elseExpr?: BoundExpression | null, returnType?: LogicalType): BoundExpression;
|
|
26
|
+
export declare function jsonAccess(child: BoundExpression, path: Array<{
|
|
27
|
+
type: 'field';
|
|
28
|
+
name: string;
|
|
29
|
+
} | {
|
|
30
|
+
type: 'index';
|
|
31
|
+
value: number;
|
|
32
|
+
}>): BoundExpression;
|
|
33
|
+
export declare function layout(...bindings: Array<[tableIndex: number, columnIndex: number]>): ColumnBinding[];
|
|
34
|
+
export declare const noopCtx: SyncEvalContext;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ColumnBinding } from "../binder/types.js";
|
|
2
|
+
import type { IndexDef, Row, TableSchema, Value as BaseValue } from "../types.js";
|
|
3
|
+
export type Value = BaseValue;
|
|
4
|
+
export type Tuple = Value[];
|
|
5
|
+
export interface SyncPhysicalOperator {
|
|
6
|
+
getLayout(): ColumnBinding[];
|
|
7
|
+
next(): Tuple[] | null;
|
|
8
|
+
reset(): void;
|
|
9
|
+
}
|
|
10
|
+
export interface CTECacheEntry {
|
|
11
|
+
tuples: Tuple[];
|
|
12
|
+
layout: ColumnBinding[];
|
|
13
|
+
}
|
|
14
|
+
export interface ExecuteResult {
|
|
15
|
+
rows: Row[];
|
|
16
|
+
rowsAffected: number;
|
|
17
|
+
catalogChanges: CatalogChange[];
|
|
18
|
+
catalogDirty?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export type CatalogChange = {
|
|
21
|
+
type: "CREATE_TABLE";
|
|
22
|
+
schema: TableSchema;
|
|
23
|
+
} | {
|
|
24
|
+
type: "DROP_TABLE";
|
|
25
|
+
name: string;
|
|
26
|
+
schema: TableSchema;
|
|
27
|
+
} | {
|
|
28
|
+
type: "ALTER_TABLE";
|
|
29
|
+
name: string;
|
|
30
|
+
before: TableSchema;
|
|
31
|
+
after: TableSchema;
|
|
32
|
+
} | {
|
|
33
|
+
type: "CREATE_INDEX";
|
|
34
|
+
index: IndexDef;
|
|
35
|
+
} | {
|
|
36
|
+
type: "DROP_INDEX";
|
|
37
|
+
name: string;
|
|
38
|
+
index: IndexDef;
|
|
39
|
+
};
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
var W=(c=>(c[c.INTEGER_LITERAL=0]="INTEGER_LITERAL",c[c.FLOAT_LITERAL=1]="FLOAT_LITERAL",c[c.STRING_LITERAL=2]="STRING_LITERAL",c[c.BLOB_LITERAL=3]="BLOB_LITERAL",c[c.PARAMETER=4]="PARAMETER",c[c.IDENTIFIER=5]="IDENTIFIER",c[c.QUOTED_IDENTIFIER=6]="QUOTED_IDENTIFIER",c[c.EQUALS=7]="EQUALS",c[c.NOT_EQUALS=8]="NOT_EQUALS",c[c.LESS_THAN=9]="LESS_THAN",c[c.LESS_THAN_EQUAL=10]="LESS_THAN_EQUAL",c[c.GREATER_THAN=11]="GREATER_THAN",c[c.GREATER_THAN_EQUAL=12]="GREATER_THAN_EQUAL",c[c.PLUS=13]="PLUS",c[c.MINUS=14]="MINUS",c[c.STAR=15]="STAR",c[c.SLASH=16]="SLASH",c[c.PERCENT=17]="PERCENT",c[c.PIPE_PIPE=18]="PIPE_PIPE",c[c.LEFT_PAREN=19]="LEFT_PAREN",c[c.RIGHT_PAREN=20]="RIGHT_PAREN",c[c.LEFT_BRACKET=21]="LEFT_BRACKET",c[c.RIGHT_BRACKET=22]="RIGHT_BRACKET",c[c.COMMA=23]="COMMA",c[c.SEMICOLON=24]="SEMICOLON",c[c.DOT=25]="DOT",c[c.SELECT=26]="SELECT",c[c.FROM=27]="FROM",c[c.WHERE=28]="WHERE",c[c.JOIN=29]="JOIN",c[c.LEFT=30]="LEFT",c[c.RIGHT=31]="RIGHT",c[c.INNER=32]="INNER",c[c.OUTER=33]="OUTER",c[c.CROSS=34]="CROSS",c[c.ON=35]="ON",c[c.USING=36]="USING",c[c.AS=37]="AS",c[c.DISTINCT=38]="DISTINCT",c[c.ALL=39]="ALL",c[c.GROUP=40]="GROUP",c[c.BY=41]="BY",c[c.HAVING=42]="HAVING",c[c.ORDER=43]="ORDER",c[c.ASC=44]="ASC",c[c.DESC=45]="DESC",c[c.NULLS=46]="NULLS",c[c.FIRST=47]="FIRST",c[c.LAST=48]="LAST",c[c.LIMIT=49]="LIMIT",c[c.OFFSET=50]="OFFSET",c[c.UNION=51]="UNION",c[c.INSERT=52]="INSERT",c[c.INTO=53]="INTO",c[c.VALUES=54]="VALUES",c[c.UPDATE=55]="UPDATE",c[c.SET=56]="SET",c[c.DELETE=57]="DELETE",c[c.CREATE=58]="CREATE",c[c.TABLE=59]="TABLE",c[c.INDEX=60]="INDEX",c[c.UNIQUE=61]="UNIQUE",c[c.IF=62]="IF",c[c.NOT=63]="NOT",c[c.EXISTS=64]="EXISTS",c[c.ALTER=65]="ALTER",c[c.ADD=66]="ADD",c[c.DROP=67]="DROP",c[c.COLUMN=68]="COLUMN",c[c.BEGIN=69]="BEGIN",c[c.COMMIT=70]="COMMIT",c[c.ROLLBACK=71]="ROLLBACK",c[c.TRANSACTION=72]="TRANSACTION",c[c.WITH=73]="WITH",c[c.AND=74]="AND",c[c.OR=75]="OR",c[c.IN=76]="IN",c[c.BETWEEN=77]="BETWEEN",c[c.LIKE=78]="LIKE",c[c.IS=79]="IS",c[c.NULL_KW=80]="NULL_KW",c[c.PRIMARY=81]="PRIMARY",c[c.KEY=82]="KEY",c[c.FOREIGN=83]="FOREIGN",c[c.REFERENCES=84]="REFERENCES",c[c.DEFAULT=85]="DEFAULT",c[c.CASE=86]="CASE",c[c.WHEN=87]="WHEN",c[c.THEN=88]="THEN",c[c.ELSE=89]="ELSE",c[c.END=90]="END",c[c.CAST=91]="CAST",c[c.TRUE_KW=92]="TRUE_KW",c[c.FALSE_KW=93]="FALSE_KW",c[c.CONFLICT=94]="CONFLICT",c[c.DO=95]="DO",c[c.NOTHING=96]="NOTHING",c[c.EXCLUDED=97]="EXCLUDED",c[c.AUTOINCREMENT=98]="AUTOINCREMENT",c[c.EXPLAIN=99]="EXPLAIN",c[c.INTEGER_KW=100]="INTEGER_KW",c[c.INT_KW=101]="INT_KW",c[c.BIGINT_KW=102]="BIGINT_KW",c[c.SMALLINT_KW=103]="SMALLINT_KW",c[c.REAL_KW=104]="REAL_KW",c[c.FLOAT_KW=105]="FLOAT_KW",c[c.DOUBLE_KW=106]="DOUBLE_KW",c[c.TEXT_KW=107]="TEXT_KW",c[c.VARCHAR_KW=108]="VARCHAR_KW",c[c.CHAR_KW=109]="CHAR_KW",c[c.BLOB_KW=110]="BLOB_KW",c[c.BOOLEAN_KW=111]="BOOLEAN_KW",c[c.BOOL_KW=112]="BOOL_KW",c[c.JSON_KW=113]="JSON_KW",c[c.EOF=114]="EOF",c))(W||{});var dn=(n=>(n.TABLE="TABLE",n.INDEX="INDEX",n))(dn||{});var Z=class extends Error{constructor(n,r,o,s){super(`Parse error at line ${r}, column ${o}: ${n}`);this.line=r;this.column=o;this.token=s;this.name="ParseError"}line;column;token};var xs={select:26,from:27,where:28,join:29,left:30,right:31,inner:32,outer:33,cross:34,on:35,using:36,as:37,distinct:38,all:39,group:40,by:41,having:42,order:43,asc:44,desc:45,nulls:46,first:47,last:48,limit:49,offset:50,union:51,insert:52,into:53,values:54,update:55,set:56,delete:57,create:58,table:59,index:60,unique:61,if:62,not:63,exists:64,alter:65,add:66,drop:67,column:68,begin:69,commit:70,rollback:71,transaction:72,with:73,and:74,or:75,in:76,between:77,like:78,is:79,null:80,primary:81,key:82,foreign:83,references:84,default:85,case:86,when:87,then:88,else:89,end:90,cast:91,true:92,false:93,conflict:94,do:95,nothing:96,excluded:97,autoincrement:98,explain:99,integer:100,int:101,bigint:102,smallint:103,real:104,float:105,double:106,text:107,varchar:108,char:109,blob:110,boolean:111,bool:112,json:113},ys=new Set(["window","over","partition","full","truncate","grant","revoke","procedure","trigger","pivot","unpivot"]),je=class{source;pos=0;line=1;column=1;tokens=[];constructor(e){this.source=e}tokenize(){for(this.tokens=[],this.pos=0,this.line=1,this.column=1;this.pos<this.source.length&&(this.skipWhitespace(),!(this.pos>=this.source.length));){let e=this.source[this.pos];if(e==="-"&&this.peek(1)==="-"){this.skipLineComment();continue}if(e==="/"&&this.peek(1)==="*"){this.skipBlockComment();continue}if(e==="'"){this.readString();continue}if(e==='"'){this.readQuotedIdentifier();continue}if(this.isDigit(e)){this.readNumber();continue}if(this.isAlpha(e)||e==="_"){this.readIdentifierOrKeyword();continue}let n=this.line,r=this.column;switch(e){case"(":this.addToken(19,"(",n,r),this.advance();break;case")":this.addToken(20,")",n,r),this.advance();break;case",":this.addToken(23,",",n,r),this.advance();break;case";":this.addToken(24,";",n,r),this.advance();break;case".":this.addToken(25,".",n,r),this.advance();break;case"[":this.addToken(21,"[",n,r),this.advance();break;case"]":this.addToken(22,"]",n,r),this.advance();break;case"+":this.addToken(13,"+",n,r),this.advance();break;case"-":this.addToken(14,"-",n,r),this.advance();break;case"*":this.addToken(15,"*",n,r),this.advance();break;case"/":this.addToken(16,"/",n,r),this.advance();break;case"%":this.addToken(17,"%",n,r),this.advance();break;case"=":this.addToken(7,"=",n,r),this.advance();break;case"<":this.advance(),this.pos<this.source.length&&this.source[this.pos]==="="?(this.addToken(10,"<=",n,r),this.advance()):this.pos<this.source.length&&this.source[this.pos]===">"?(this.addToken(8,"<>",n,r),this.advance()):this.addToken(9,"<",n,r);break;case">":this.advance(),this.pos<this.source.length&&this.source[this.pos]==="="?(this.addToken(12,">=",n,r),this.advance()):this.addToken(11,">",n,r);break;case"|":this.advance(),this.pos<this.source.length&&this.source[this.pos]==="|"?(this.addToken(18,"||",n,r),this.advance()):this.error("Unexpected character '|'",n,r);break;case"!":this.advance(),this.pos<this.source.length&&this.source[this.pos]==="="?(this.addToken(8,"!=",n,r),this.advance()):this.error("Unexpected character '!'",n,r);break;case"$":{this.advance();let o="";for(;this.pos<this.source.length&&this.isDigit(this.source[this.pos]);)o+=this.source[this.pos],this.advance();o.length===0&&this.error("Expected parameter index after '$'",n,r),this.addToken(4,o,n,r);break}default:this.error(`Unexpected character '${e}'`,n,r)}}return this.addToken(114,"",this.line,this.column),this.tokens}advance(){this.source[this.pos]===`
|
|
2
|
+
`?(this.line++,this.column=1):this.column++,this.pos++}peek(e){return this.source[this.pos+e]}skipWhitespace(){for(;this.pos<this.source.length;){let e=this.source[this.pos];if(e===" "||e===" "||e===`
|
|
3
|
+
`||e==="\r")this.advance();else break}}skipLineComment(){for(this.advance(),this.advance();this.pos<this.source.length&&this.source[this.pos]!==`
|
|
4
|
+
`;)this.advance()}skipBlockComment(){let e=this.line,n=this.column;for(this.advance(),this.advance();this.pos<this.source.length;){if(this.source[this.pos]==="*"&&this.peek(1)==="/"){this.advance(),this.advance();return}this.advance()}this.error("Unterminated block comment",e,n)}readString(){let e=this.line,n=this.column;this.advance();let r="";for(;this.pos<this.source.length;){let o=this.source[this.pos];if(o==="'")if(this.peek(1)==="'")r+="'",this.advance(),this.advance();else{this.advance(),this.addToken(2,r,e,n);return}else r+=o,this.advance()}this.error("Unterminated string literal",e,n)}readQuotedIdentifier(){let e=this.line,n=this.column;this.advance();let r="";for(;this.pos<this.source.length;){let o=this.source[this.pos];if(o==='"'){this.advance(),this.addToken(6,r,e,n);return}r+=o,this.advance()}this.error("Unterminated quoted identifier",e,n)}readNumber(){let e=this.line,n=this.column,r="",o=!1;for(;this.pos<this.source.length&&this.isDigit(this.source[this.pos]);)r+=this.source[this.pos],this.advance();if(this.pos<this.source.length&&this.source[this.pos]==="."&&this.peek(1)!==void 0&&this.isDigit(this.peek(1)))for(o=!0,r+=".",this.advance();this.pos<this.source.length&&this.isDigit(this.source[this.pos]);)r+=this.source[this.pos],this.advance();this.addToken(o?1:0,r,e,n)}readIdentifierOrKeyword(){let e=this.line,n=this.column,r="";for(;this.pos<this.source.length&&this.isAlphaNumeric(this.source[this.pos]);)r+=this.source[this.pos],this.advance();let o=r.toLowerCase();if(o==="x"&&this.pos<this.source.length&&this.source[this.pos]==="'"){this.advance();let i="";for(;this.pos<this.source.length&&this.source[this.pos]!=="'";)i+=this.source[this.pos],this.advance();this.pos>=this.source.length&&this.error("Unterminated blob literal",e,n),this.advance(),(i.length%2!==0||!/^[0-9a-fA-F]*$/.test(i))&&this.error("Invalid blob literal: hex string must have even length and contain only hex digits",e,n),this.addToken(3,i,e,n);return}ys.has(o)&&this.error(`Keyword '${r.toUpperCase()}' is not supported`,e,n);let s=xs[o];s!==void 0?this.addToken(s,r,e,n):this.addToken(5,r,e,n)}isDigit(e){return e>="0"&&e<="9"}isAlpha(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"||e==="_"}isAlphaNumeric(e){return this.isAlpha(e)||this.isDigit(e)}addToken(e,n,r,o){this.tokens.push({type:e,value:n,line:r,column:o})}error(e,n,r){let o={type:114,value:"",line:n,column:r};throw new Z(e,n,r,o)}};var rt=class{tokens=[];current=0;peek(){return this.tokens[this.current]}peekAt(e){let n=this.current+e;return n>=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[n]}advance(){let e=this.tokens[this.current];return this.isAtEnd()||this.current++,e}check(e){return this.peek().type===e}match(...e){for(let n of e)if(this.check(n))return this.advance(),!0;return!1}expect(e,n){if(this.check(e))return this.advance();let r=this.peek(),o=n??`Expected ${W[e]}, got '${r.value||"EOF"}'`;throw new Z(o,r.line,r.column,r)}isAtEnd(){return this.peek().type===114}error(e){let n=this.peek();throw new Z(e,n.line,n.column,n)}checkIdentifier(){return this.check(5)||this.check(6)}expectIdentifier(e){if(this.check(5)||this.check(6))return this.advance();let n=this.peek(),r=e??`Expected identifier, got '${n.value||"EOF"}'`;throw new Z(r,n.line,n.column,n)}isClauseKeyword(){let e=this.peek().type;return e===27||e===28||e===40||e===42||e===43||e===49||e===50||e===51||e===24||e===114||e===20}parseSelectStatement(){this.error("Unexpected subquery")}};var Ts={100:"INTEGER",101:"INTEGER",102:"BIGINT",103:"SMALLINT",104:"FLOAT",105:"FLOAT",106:"DOUBLE",107:"VARCHAR",108:"VARCHAR",109:"VARCHAR",110:"BLOB",111:"BOOLEAN",112:"BOOLEAN",113:"JSON"};function ot(t){let e=t.peek(),n=Ts[e.type];if(n!==void 0)return t.advance(),t.match(19)&&(t.expect(0,"Expected size in type"),t.expect(20,"Expected ')' after type size")),{id:n};t.error(`Expected type name, got '${e.value||"EOF"}'`)}var Cs={7:"COMPARE_EQUAL",8:"COMPARE_NOTEQUAL",9:"COMPARE_LESSTHAN",10:"COMPARE_LESSTHANOREQUALTO",11:"COMPARE_GREATERTHAN",12:"COMPARE_GREATERTHANOREQUALTO"};function B(t){return Os(t)}function Os(t){let e=pr(t);if(t.match(75)){let n=[e];do n.push(pr(t));while(t.match(75));e={expression_class:"CONJUNCTION",alias:null,type:"CONJUNCTION_OR",children:n}}return e}function pr(t){let e=mn(t);if(t.match(74)){let n=[e];do n.push(mn(t));while(t.match(74));e={expression_class:"CONJUNCTION",alias:null,type:"CONJUNCTION_AND",children:n}}return e}function mn(t){if(t.match(63)){if(t.check(64))return dr(t,!0);let e=mn(t);return{expression_class:"OPERATOR",alias:null,type:"OPERATOR_NOT",children:[e]}}return t.check(64)?dr(t,!1):Ls(t)}function dr(t,e){t.expect(64),t.expect(19,"Expected '(' after EXISTS");let n=t.parseSelectStatement();return t.expect(20,"Expected ')' after EXISTS subquery"),{expression_class:"SUBQUERY",alias:null,subquery_type:e?"NOT_EXISTS":"EXISTS",subquery:n,child:null}}function Ls(t){let e=Is(t);if(t.check(79))return t.advance(),t.match(63)?(t.expect(80,"Expected NULL after IS NOT"),{expression_class:"OPERATOR",alias:null,type:"OPERATOR_IS_NOT_NULL",children:[e]}):(t.expect(80,"Expected NULL after IS"),{expression_class:"OPERATOR",alias:null,type:"OPERATOR_IS_NULL",children:[e]});if(t.check(63)){let r=t.peekAt(1);if(r.type===77){t.advance(),t.advance();let o=re(t);t.expect(74,"Expected AND in BETWEEN expression");let s=re(t),i={expression_class:"BETWEEN",alias:null,input:e,lower:o,upper:s};return{expression_class:"OPERATOR",alias:null,type:"OPERATOR_NOT",children:[i]}}if(r.type===78){t.advance(),t.advance();let o=re(t);return{expression_class:"COMPARISON",alias:null,type:"COMPARE_NOT_LIKE",left:e,right:o}}if(r.type===76)return t.advance(),t.advance(),mr(t,e,!0)}if(t.match(77)){let r=re(t);t.expect(74,"Expected AND in BETWEEN expression");let o=re(t);return{expression_class:"BETWEEN",alias:null,input:e,lower:r,upper:o}}if(t.match(78)){let r=re(t);return{expression_class:"COMPARISON",alias:null,type:"COMPARE_LIKE",left:e,right:r}}if(t.match(76))return mr(t,e,!1);let n=Cs[t.peek().type];if(n!==void 0){t.advance();let r=re(t);return{expression_class:"COMPARISON",alias:null,type:n,left:e,right:r}}return e}function mr(t,e,n){if(t.expect(19,"Expected '(' after IN"),t.check(26)||t.check(73)){let o=t.parseSelectStatement();t.expect(20,"Expected ')' after IN subquery");let s={expression_class:"SUBQUERY",alias:null,subquery_type:"ANY",subquery:o,child:e,comparison_type:"COMPARE_EQUAL"};return n?{expression_class:"OPERATOR",alias:null,type:"OPERATOR_NOT",children:[s]}:s}let r=[e];do r.push(B(t));while(t.match(23));return t.expect(20,"Expected ')' after IN list"),{expression_class:"OPERATOR",alias:null,type:n?"OPERATOR_NOT_IN":"OPERATOR_IN",children:r}}function Is(t){let e=re(t);for(;t.check(18);){t.advance();let n=re(t);e={expression_class:"OPERATOR",alias:null,type:"OPERATOR_CONCAT",children:[e,n]}}return e}function re(t){let e=fr(t);for(;t.check(13)||t.check(14);){let n=t.advance(),r=fr(t),o=n.type===13?"OPERATOR_ADD":"OPERATOR_SUBTRACT";e={expression_class:"OPERATOR",alias:null,type:o,children:[e,r]}}return e}function fr(t){let e=ye(t);for(;t.check(15)||t.check(16)||t.check(17);){let n=t.advance(),r=ye(t),o;n.type===15?o="OPERATOR_MULTIPLY":n.type===16?o="OPERATOR_DIVIDE":o="OPERATOR_MOD",e={expression_class:"OPERATOR",alias:null,type:o,children:[e,r]}}return e}function ye(t){if(t.match(14)){let e=ye(t);return{expression_class:"OPERATOR",alias:null,type:"OPERATOR_NEGATE",children:[e]}}return t.match(13)?ye(t):Ns(t)}function Ns(t){let e=t.peek();if(t.check(0))return t.advance(),{expression_class:"CONSTANT",alias:null,value:{type:{id:"INTEGER"},is_null:!1,value:parseInt(e.value,10)}};if(t.check(1))return t.advance(),{expression_class:"CONSTANT",alias:null,value:{type:{id:"DOUBLE"},is_null:!1,value:parseFloat(e.value)}};if(t.check(2))return t.advance(),{expression_class:"CONSTANT",alias:null,value:{type:{id:"VARCHAR"},is_null:!1,value:e.value}};if(t.check(3)){t.advance();let n=e.value,r=new Uint8Array(n.length/2);for(let o=0;o<n.length;o+=2)r[o/2]=parseInt(n.substring(o,o+2),16);return{expression_class:"CONSTANT",alias:null,value:{type:{id:"BLOB"},is_null:!1,value:r}}}if(t.check(92))return t.advance(),{expression_class:"CONSTANT",alias:null,value:{type:{id:"BOOLEAN"},is_null:!1,value:!0}};if(t.check(93))return t.advance(),{expression_class:"CONSTANT",alias:null,value:{type:{id:"BOOLEAN"},is_null:!1,value:!1}};if(t.check(80))return t.advance(),{expression_class:"CONSTANT",alias:null,value:{type:{id:"INTEGER"},is_null:!0,value:null}};if(t.check(4)){t.advance();let n=parseInt(e.value,10)-1;if(n<0)throw new Z("Parameter index must be >= 1",e.line,e.column,e);return{expression_class:"PARAMETER",alias:null,index:n}}if(t.check(86))return Ss(t);if(t.check(91))return bs(t);if(t.check(15))return t.advance(),{expression_class:"STAR",alias:null,table_name:null};if(t.check(19)){if(t.advance(),t.check(26)||t.check(73)){let r=t.parseSelectStatement();return t.expect(20,"Expected ')' after subquery"),{expression_class:"SUBQUERY",alias:null,subquery_type:"SCALAR",subquery:r,child:null}}let n=B(t);return t.expect(20,"Expected ')'"),n}if(t.check(5)||t.check(6)||t.check(97))return Bs(t);t.error(`Expected expression, got '${e.value||"EOF"}'`)}function Bs(t){let n=t.advance().value;if(t.check(19))return As(t,n);if(t.match(25)){if(t.check(15))return t.advance(),{expression_class:"STAR",alias:null,table_name:n};let o=t.expectIdentifier(`Expected column name after '${n}.'`),s=[n,o.value];for(;t.check(25)&&t.peekAt(1).type!==15;){t.advance();let a=t.expectIdentifier("Expected field name after '.'");s.push(a.value)}let i=hr(t);return{expression_class:"COLUMN_REF",alias:null,column_names:s,...i.length>0&&{path:i}}}let r=hr(t);return r.length>0?{expression_class:"COLUMN_REF",alias:null,column_names:[n],path:r}:{expression_class:"COLUMN_REF",alias:null,column_names:[n]}}function hr(t){let e=[];for(;t.check(21)||t.check(25);)if(t.match(21)){let n=t.expect(0,"Expected integer index in bracket access");t.expect(22,"Expected ']' after bracket index"),e.push({type:"index",value:parseInt(n.value,10)})}else{t.advance();let n=t.expectIdentifier("Expected field name after '.'");e.push({type:"field",name:n.value})}return e}function As(t,e){t.expect(19);let n=e.toLowerCase();if(t.check(15)&&n==="count")return t.advance(),t.expect(20,"Expected ')' after COUNT(*)"),{expression_class:"FUNCTION",alias:null,function_name:n,children:[],distinct:!1,is_star:!0};if(t.check(20))return t.advance(),{expression_class:"FUNCTION",alias:null,function_name:n,children:[],distinct:!1,is_star:!1};let r=t.match(38),o=[];do o.push(B(t));while(t.match(23));return t.expect(20,"Expected ')' after function arguments"),{expression_class:"FUNCTION",alias:null,function_name:n,children:o,distinct:r,is_star:!1}}function Ss(t){t.expect(86);let e=null;!t.check(87)&&!t.check(90)&&(e=B(t));let n=[];for(;t.match(87);){let o=B(t);e!==null&&(o={expression_class:"COMPARISON",alias:null,type:"COMPARE_EQUAL",left:e,right:o}),t.expect(88,"Expected THEN after WHEN condition");let s=B(t);n.push({when_expr:o,then_expr:s})}let r=null;return t.match(89)&&(r=B(t)),t.expect(90,"Expected END after CASE expression"),{expression_class:"CASE",alias:null,case_checks:n,else_expr:r}}function bs(t){t.expect(91),t.expect(19,"Expected '(' after CAST");let e=B(t);t.expect(37,"Expected AS in CAST expression");let n=ot(t);return t.expect(20,"Expected ')' after CAST expression"),{expression_class:"CAST",alias:null,child:e,cast_type:n}}function En(t){let e=Us(t),n=xr(t,e);return t.check(51)?vs(t,n,e):(ws(t,n),{type:"SELECT_STATEMENT",node:n})}function xr(t,e){t.expect(26,"Expected 'SELECT'");let n=[];t.match(38)&&n.push({type:"DISTINCT_MODIFIER",distinct_on_targets:[]});let r=Ps(t),o=null;t.match(27)&&(o=Ds(t));let s=null;t.match(28)&&(s=B(t));let i=js(t),a=null;return t.match(42)&&(a=B(t)),{type:"SELECT_NODE",select_list:r,from_table:o,where_clause:s,groups:i,having:a,modifiers:n,cte_map:e}}function ws(t,e){if(t.check(43)){let n=Tr(t);e.modifiers.push({type:"ORDER_MODIFIER",orders:n})}(t.check(49)||t.check(50))&&e.modifiers.push(Cr(t))}function vs(t,e,n){let r=e;for(;t.check(51);){t.advance();let s=t.match(39),i=xr(t,{map:{},recursive:!1});r={type:"SET_OPERATION_NODE",set_op_type:s?"UNION_ALL":"UNION",left:r,right:i,modifiers:[],cte_map:n}}let o=r;if(t.check(43)){let s=Tr(t);o.modifiers.push({type:"ORDER_MODIFIER",orders:s})}return(t.check(49)||t.check(50))&&o.modifiers.push(Cr(t)),{type:"SELECT_STATEMENT",node:o}}function Ps(t){let e=[];for(t.isClauseKeyword()&&t.error(`Expected expression after SELECT, got '${t.peek().value||"EOF"}'`),e.push(Er(t));t.match(23);)e.push(Er(t));return e}function Er(t){let e=B(t);if(t.match(37)){let n=t.expectIdentifier("Expected alias after AS");return{...e,alias:n.value}}if(t.checkIdentifier()&&!t.isClauseKeyword()){let n=t.advance();return{...e,alias:n.value}}return e}function Us(t){let e={};if(!t.match(73))return{map:e,recursive:!1};let n=t.check(5)&&t.peek().value.toLowerCase()==="recursive";n&&t.advance();do{let o=t.expect(5,"Expected CTE name after WITH").value,s=[];if(t.match(19)){do s.push(t.expect(5,"Expected column alias").value);while(t.match(23));t.expect(20)}t.expect(37,`Expected AS after CTE name '${o}'`),t.expect(19,`Expected '(' after AS in CTE '${o}'`);let i=t.parseSelectStatement();t.expect(20,`Expected ')' to close CTE '${o}'`),e[o]={query:i,aliases:s}}while(t.match(23));return{map:e,recursive:n}}function Ds(t){let e=fn(t);for(;yr(t);)e=Ms(t,e);return e}function fn(t){if(t.check(19)){t.advance();let r=t.parseSelectStatement();t.expect(20,"Expected ')' after subquery");let o=null;return t.match(37)?o=t.expectIdentifier("Expected alias after AS").value:t.checkIdentifier()&&(o=t.advance().value),{type:"SUBQUERY",subquery:r,alias:o,column_name_alias:[]}}let e=t.expect(5,`Expected table name after FROM, got '${t.peek().value||"EOF"}'`),n=null;return t.match(37)?n=t.expectIdentifier("Expected alias after AS").value:t.checkIdentifier()&&!yr(t)&&!t.isClauseKeyword()&&(n=t.advance().value),{type:"BASE_TABLE",table_name:e.value,alias:n,schema_name:null}}function yr(t){let e=t.peek().type;return e===29||e===34||e===32||e===30||e===31}function Ms(t,e){let n;if(t.match(34)){t.expect(29,"Expected JOIN after CROSS");let i=fn(t);return{type:"JOIN",left:e,right:i,condition:null,join_type:"CROSS",using_columns:[]}}t.match(30)?(t.match(33),n="LEFT"):t.match(31)?(t.match(33),n="RIGHT"):t.match(32)?n="INNER":n="INNER",t.expect(29,"Expected JOIN");let r=fn(t),o=null,s=[];if(t.match(35))o=B(t);else if(t.match(36)){t.expect(19);do s.push(t.expect(5,"Expected column name in USING").value);while(t.match(23));t.expect(20)}return{type:"JOIN",left:e,right:r,condition:o,join_type:n,using_columns:s}}function js(t){let e=[];if(t.match(40)){t.expect(41,"Expected BY after GROUP");do e.push(B(t));while(t.match(23))}return{group_expressions:e}}function Tr(t){t.expect(43),t.expect(41,"Expected BY after ORDER");let e=[];do{let n=B(t),r="ASCENDING";t.match(44)?r="ASCENDING":t.match(45)&&(r="DESCENDING");let o=r==="ASCENDING"?"NULLS_LAST":"NULLS_FIRST";t.match(46)&&(t.match(47)?o="NULLS_FIRST":t.match(48)?o="NULLS_LAST":t.error("Expected FIRST or LAST after NULLS")),e.push({type:r,null_order:o,expression:n})}while(t.match(23));return e}function Cr(t){let e=null,n=null;return t.match(49)&&(e=B(t)),t.match(50)&&(n=B(t)),e===null&&t.match(49)&&(e=B(t)),{type:"LIMIT_MODIFIER",limit:e,offset:n}}function Or(t){t.expect(52),t.expect(53,"Expected INTO after INSERT");let e=t.expect(5,"Expected table name after INSERT INTO").value,n=[];if(t.match(19)){do n.push(t.expect(5,"Expected column name").value);while(t.match(23));t.expect(20)}let r=[],o=null;if(t.check(26)||t.check(73))o=t.parseSelectStatement();else{t.expect(54,`Expected VALUES or SELECT after INSERT INTO ${e}`);do{t.expect(19,"Expected '(' before values");let i=[];do i.push(B(t));while(t.match(23));t.expect(20,"Expected ')' after values"),r.push(i)}while(t.match(23))}let s=Fs(t);return{type:"INSERT_STATEMENT",table:e,columns:n,values:r,select_statement:o,onConflict:s}}function Fs(t){if(!t.match(35))return null;t.expect(94,"Expected CONFLICT after ON");let e=null;if(t.match(19)){e=[];do e.push(t.expect(5,"Expected column name in conflict target").value);while(t.match(23));t.expect(20)}if(t.expect(95,"Expected DO after ON CONFLICT"),t.match(96))return{conflictTarget:e,action:"NOTHING"};t.expect(55,"Expected NOTHING or UPDATE after DO"),t.expect(56,"Expected SET after DO UPDATE");let n=[];do{let o=t.expect(5,"Expected column name in SET clause").value;t.expect(7,"Expected '=' after column name in SET clause");let s=B(t);n.push({column:o,value:s})}while(t.match(23));let r=null;return t.match(28)&&(r=B(t)),{conflictTarget:e,action:{type:"UPDATE",setClauses:n,whereClause:r}}}function Lr(t){t.expect(55);let e=t.expect(5,"Expected table name after UPDATE").value;t.expect(56,`Expected SET after UPDATE ${e}`);let n=[];do{let o=t.expect(5,"Expected column name in SET clause").value;t.expect(7,"Expected '=' after column name in SET clause");let s=B(t);n.push({column:o,value:s})}while(t.match(23));let r=null;return t.match(28)&&(r=B(t)),{type:"UPDATE_STATEMENT",table:e,set_clauses:n,where_clause:r}}function Ir(t){t.expect(57),t.expect(27,"Expected FROM after DELETE");let e=t.expect(5,"Expected table name after DELETE FROM").value,n=null;return t.match(28)&&(n=B(t)),{type:"DELETE_STATEMENT",table:e,where_clause:n}}function Br(t){if(t.expect(58),t.check(61))return t.advance(),Nr(t,!0);if(t.check(60))return Nr(t,!1);if(t.check(59))return Gs(t);t.error(`Expected TABLE or INDEX after CREATE, got '${t.peek().value||"EOF"}'`)}function Gs(t){t.expect(59);let e=!1;t.match(62)&&(t.expect(63,"Expected NOT after IF"),t.expect(64,"Expected EXISTS after IF NOT"),e=!0);let n=t.expect(5,"Expected table name").value;t.expect(19,"Expected '(' after table name");let r=[],o=[],s=[];do{if(t.check(81)){t.advance(),t.expect(82,"Expected KEY after PRIMARY"),t.expect(19);do o.push(t.expect(5,"Expected column name").value);while(t.match(23));t.expect(20);continue}if(t.check(83)){t.advance(),t.expect(82,"Expected KEY after FOREIGN"),t.expect(19);let i=[];do i.push(t.expect(5,"Expected column name").value);while(t.match(23));t.expect(20),t.expect(84,"Expected REFERENCES after FOREIGN KEY columns");let a=t.expect(5,"Expected referenced table name").value;t.expect(19);let l=[];do l.push(t.expect(5,"Expected column name").value);while(t.match(23));t.expect(20),s.push({columns:i,ref_table:a,ref_columns:l});continue}r.push(Ar(t))}while(t.match(23));return t.expect(20,"Expected ')' after column definitions"),{type:"CREATE_TABLE_STATEMENT",table:n,if_not_exists:e,columns:r,primary_key:o,foreign_keys:s}}function Ar(t){let e=t.expect(5,"Expected column name").value,n=ot(t),r=!1,o=!1,s=!1,i=!1,a=null;for(;;){if(t.check(81)){t.advance(),t.expect(82,"Expected KEY after PRIMARY"),r=!0;continue}if(t.check(98)){t.advance(),i=!0;continue}if(t.check(63)){t.advance(),t.expect(80,"Expected NULL after NOT"),o=!0;continue}if(t.check(61)){t.advance(),s=!0;continue}if(t.check(85)){t.advance(),a=ye(t);continue}break}return{name:e,type:n,is_primary_key:r,is_not_null:o,is_unique:s,is_autoincrement:i,default_value:a}}function Nr(t,e){t.expect(60);let n=!1;t.match(62)&&(t.expect(63,"Expected NOT after IF"),t.expect(64,"Expected EXISTS after IF NOT"),n=!0);let r=t.expect(5,"Expected index name").value;t.expect(35,"Expected ON after index name");let o=t.expect(5,"Expected table name after ON").value;t.expect(19);let s=[];do s.push(B(t));while(t.match(23));return t.expect(20),{type:"CREATE_INDEX_STATEMENT",index_name:r,table_name:o,expressions:s,is_unique:e,if_not_exists:n}}function Sr(t){t.expect(65),t.expect(59,"Expected TABLE after ALTER");let e=t.expect(5,"Expected table name after ALTER TABLE").value;if(t.match(66)){t.match(68);let n=Ar(t);return{type:"ALTER_TABLE_STATEMENT",table:e,alter_type:"ADD_COLUMN",column_def:n,column_name:null}}if(t.match(67)){t.match(68);let n=t.expect(5,"Expected column name to drop").value;return{type:"ALTER_TABLE_STATEMENT",table:e,alter_type:"DROP_COLUMN",column_def:null,column_name:n}}t.error(`Expected ADD or DROP after ALTER TABLE ${e}`)}function br(t){t.expect(67);let e;t.match(59)?e="TABLE":t.match(60)?e="INDEX":t.error(`Expected TABLE or INDEX after DROP, got '${t.peek().value||"EOF"}'`);let n=!1;t.match(62)&&(t.expect(64,"Expected EXISTS after IF"),n=!0);let r=t.expect(5,`Expected name after DROP ${dn[e]}`).value;return{type:"DROP_STATEMENT",drop_type:e,name:r,if_exists:n}}function it(t,e){return t.advance(),t.match(72),{type:"TRANSACTION_STATEMENT",transaction_type:e}}var Ge=class extends rt{parse(e){let n=new je(e);this.tokens=n.tokenize(),this.current=0;let r=[];for(;!this.isAtEnd();){for(;this.match(24););if(this.isAtEnd())break;r.push(this.parseStatement()),this.match(24)}return r}parseSelectStatement(){return En(this)}parseStatement(){let e=this.peek();switch(e.type){case 26:case 73:return En(this);case 52:return Or(this);case 55:return Lr(this);case 57:return Ir(this);case 58:return Br(this);case 65:return Sr(this);case 67:return br(this);case 69:return it(this,"BEGIN");case 70:return it(this,"COMMIT");case 71:return it(this,"ROLLBACK");case 99:{this.advance();let n=this.parseStatement();return{type:"EXPLAIN_STATEMENT",statement:n}}default:this.error(`Unexpected token '${e.value||"EOF"}' at start of statement`)}}};import{Encoder as Vs,decode as Js}from"cbor-x";var $s=new Vs({structuredClone:!1,useRecords:!0}),at=new Uint8Array([79,80,70,83,81,76,48,51]),gn=16,Hs=32768,ke=class{constructor(e){this.dbName=e}dbName;handle;pageSize=Hs;nextPageId=3;async open(){if(this.handle)return;let n=await(await navigator.storage.getDirectory()).getFileHandle(`${this.dbName}.opfsql`,{create:!0});this.handle=await n.createSyncAccessHandle({mode:"readwrite-unsafe"}),this.handle.getSize()===0?this.initNewFile():this.readHeader()}close(){this.handle.close(),this.handle=void 0}readPage(e){let n=e*this.pageSize;if(n+4>this.handle.getSize())return null;let r=new Uint8Array(4);this.handle.read(r,{at:n});let o=new DataView(r.buffer).getUint32(0,!1);if(o===0)return null;let s=new Uint8Array(o);return this.handle.read(s,{at:n+4}),Js(s)}writePage(e,n){let r=$s.encode(n);if(r.length+4>this.pageSize)throw new Error(`OPFSSyncStorage: value for page ${e} is ${r.length} bytes, exceeds page capacity ${this.pageSize-4}. Increase PAGE_SIZE.`);let o=new Uint8Array(4+r.length);new DataView(o.buffer).setUint32(0,r.length,!1),o.set(r,4),this.handle.write(o,{at:e*this.pageSize})}getNextPageId(){let e=new Uint8Array(4);return this.handle.read(e,{at:12}),this.nextPageId=new DataView(e.buffer).getUint32(0,!1),this.nextPageId}writeHeader(e){this.nextPageId=e;let n=new Uint8Array(gn),r=new DataView(n.buffer);n.set(at,0),r.setUint32(8,this.pageSize,!1),r.setUint32(12,this.nextPageId,!1),this.handle.write(n,{at:0})}truncateToSize(){this.handle.truncate(this.nextPageId*this.pageSize)}flush(){this.handle.flush()}initNewFile(){this.nextPageId=3,this.handle.truncate(3*this.pageSize);let e=new Uint8Array(gn),n=new DataView(e.buffer);e.set(at,0),n.setUint32(8,this.pageSize,!1),n.setUint32(12,this.nextPageId,!1),this.handle.write(e,{at:0}),this.handle.flush()}readHeader(){let e=new Uint8Array(gn);this.handle.read(e,{at:0});for(let o=0;o<at.length;o++)if(e[o]!==at[o])throw new Error("Invalid OPFSQL file: bad magic");let n=new DataView(e.buffer),r=n.getUint32(8,!1);if(r<4096||r>1048576||(r&r-1)!==0)throw new Error(`Invalid OPFSQL file: bad pageSize ${r}`);this.pageSize=r,this.nextPageId=n.getUint32(12,!1)}};var ae=class t{_version=0;tables=new Map;indexes=new Map;get version(){return this._version}key(e){return e.toLowerCase()}hasTable(e){return this.tables.has(this.key(e))}getTable(e){return this.tables.get(this.key(e))}addTable(e){this.tables.set(this.key(e.name),e)}removeTable(e){let n=this.key(e);this.tables.delete(n);for(let[r,o]of this.indexes)this.key(o.tableName)===n&&this.indexes.delete(r)}updateTable(e){this.tables.set(this.key(e.name),e)}getAllTables(){return[...this.tables.values()]}hasIndex(e){return this.indexes.has(this.key(e))}getIndex(e){return this.indexes.get(this.key(e))}getTableIndexes(e){let n=this.key(e);return[...this.indexes.values()].filter(r=>this.key(r.tableName)===n)}addIndex(e){this.indexes.set(this.key(e.name),e)}removeIndex(e){this.indexes.delete(this.key(e))}prepareCommit(){return this._version++,this.serialize()}serialize(){return{version:this.version,tables:[...this.tables.values()],indexes:[...this.indexes.values()]}}snapshot(){let e=this.serialize();return structuredClone(e)}clone(){return t.deserialize(this.serialize())}static deserialize(e){let n=new t;for(let r of e.tables)n.addTable(r);for(let r of e.indexes)n.addIndex(r);return n._version=e.version??0,n}};var lt=class{constructor(e,n){this.storage=e;this.catalogPageNo=n}storage;catalogPageNo;buffer=new Map;allocatorDirty=!1;snapNextPageId=null;snapFreeList=null;readPage(e){if(this.buffer.has(e)){let n=this.buffer.get(e);return n===null?null:n}return this.storage.readPage(e)}writePage(e,n){this.ensureSnapshot(),this.buffer.set(e,n)}allocPage(){return this.ensureSnapshot(),this.allocatorDirty=!0,this.storage.allocPage()}freePage(e){this.ensureSnapshot(),this.allocatorDirty=!0,this.storage.freePage(e)}commit(){this.storage.commitPages(this.buffer,this.allocatorDirty),this.buffer.clear(),this.clearSnapshot()}rollback(){this.buffer.clear(),this.snapNextPageId!==null&&this.storage.restoreAllocator(this.snapNextPageId,this.snapFreeList),this.clearSnapshot()}writeCatalog(e){this.writePage(this.catalogPageNo,e)}ensureSnapshot(){if(this.snapNextPageId===null){let e=this.storage.snapshotAllocator();this.snapNextPageId=e.nextPageId,this.snapFreeList=e.freeList}}clearSnapshot(){this.snapNextPageId=null,this.snapFreeList=null,this.allocatorDirty=!1}};var ct=1,xn=2,ut=class{constructor(e){this.backend=e}backend;nextPageId;freeList;async open(){await this.backend.open(),this.nextPageId=this.backend.getNextPageId(),this.freeList=this.backend.readPage(xn)??[]}createSession(){return new lt(this,ct)}readPage(e){return this.backend.readPage(e)}allocPage(){return this.freeList.length>0?this.freeList.pop():this.nextPageId++}freePage(e){this.freeList.push(e)}snapshotAllocator(){return{nextPageId:this.nextPageId,freeList:[...this.freeList]}}restoreAllocator(e,n){this.nextPageId=e,this.freeList=n}commitPages(e,n){if(!(e.size===0&&!n)){for(let[r,o]of e)o!==null&&this.backend.writePage(r,o);n&&(this.backend.writePage(xn,this.freeList),this.backend.writeHeader(this.nextPageId)),this.backend.flush()}}readCatalog(){return this.backend.readPage(ct)}catchUp(){let e=this.backend.catchUp?.();if(!e)return null;this.refreshFromStorage();let n=[...e],r=n.length===0,o=r||e.has(ct),s=r||n.some(i=>i!==ct);return{catalog:o,data:s}}checkpoint(){this.backend.checkpoint?.()}close(){this.backend.close()}refreshFromStorage(){this.nextPageId=this.backend.getNextPageId(),this.freeList=this.backend.readPage(xn)??[]}};import{Encoder as Ks,decode as Qs}from"cbor-x";var Rr=new Uint32Array(256);for(let t=0;t<256;t++){let e=t;for(let n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;Rr[t]=e}function _r(t){let e=4294967295;for(let n=0;n<t.length;n++)e=Rr[(e^t[n])&255]^e>>>8;return(e^4294967295)>>>0}var qs=new Ks({structuredClone:!1,useRecords:!0}),yn=new Uint8Array([79,80,70,83,87,65,76,50]),Ce=16,ee=16,wr=4294967295,Tn=4,pt=class{constructor(e,n,r=1e3){this.main=e;this.walHandle=n;this.checkpointThreshold=r}main;walHandle;checkpointThreshold;walIndex=new Map;pendingFrames=[];walOffset=Ce;currentTxId=1;nextPageId=3;walFrameCount=0;epoch=0;async open(){await this.main.open(),this.nextPageId=this.main.getNextPageId(),this.walHandle.getSize()>0?this.recover():this.initWalHeader()}close(){this.walHandle.close(),this.main.close()}readPage(e){let n=this.walIndex.get(e);return n!==void 0?n:this.main.readPage(e)}writePage(e,n){let r=qs.encode(n);this.pendingFrames.push({pageNo:e,cbor:r,value:n})}getNextPageId(){return this.nextPageId}writeHeader(e){this.nextPageId=e}flush(){if(this.pendingFrames.length===0)return;let e=this.buildCommitBuffer(this.pendingFrames,this.currentTxId,this.nextPageId);this.walHandle.write(e,{at:this.walOffset}),this.walHandle.flush(),this.walOffset+=e.length;for(let n of this.pendingFrames)this.walIndex.set(n.pageNo,n.value);this.walFrameCount+=this.pendingFrames.length,this.pendingFrames=[],this.currentTxId++,this.walFrameCount>=this.checkpointThreshold&&this.checkpoint()}getEpoch(){return this.epoch}checkpoint(){if(this.walIndex.size!==0){for(let[e,n]of this.walIndex)this.main.writePage(e,n);this.main.writeHeader(this.nextPageId),this.main.flush(),this.main.truncateToSize?.(),this.epoch++,this.walHandle.truncate(0),this.initWalHeader(),this.walHandle.flush(),this.walIndex.clear(),this.walFrameCount=0}}catchUp(){let e=this.readEpochFromFile(),n=e!==this.epoch;n&&this.resetAfterCheckpoint(e);let r=this.walHandle.getSize(),o=r>this.walOffset;return!n&&!o?null:o?this.readFramesFrom(this.walOffset,r):new Set}resetAfterCheckpoint(e){this.walIndex.clear(),this.walOffset=Ce,this.walFrameCount=0,this.epoch=e,this.nextPageId=this.main.getNextPageId()}recover(){this.readAndVerifyHeader();let e=this.walHandle.getSize();this.readFramesFrom(Ce,e)}readAndVerifyHeader(){let e=new Uint8Array(Ce);this.walHandle.read(e,{at:0});for(let r=0;r<yn.length;r++)if(e[r]!==yn[r])throw new Error("Invalid WAL file: bad magic");let n=new DataView(e.buffer);this.epoch=n.getUint32(8,!1)}readEpochFromFile(){let e=new Uint8Array(4);return this.walHandle.read(e,{at:8}),new DataView(e.buffer).getUint32(0,!1)}readFramesFrom(e,n){let r=e,o=new Set,s=[],i=this.nextPageId,a=e;for(;r+ee<=n;){let u=new Uint8Array(ee);this.walHandle.read(u,{at:r});let d=new DataView(u.buffer,u.byteOffset,u.byteLength),f=d.getUint32(0,!1),p=d.getUint32(4,!1),h=d.getUint32(8,!1),T=d.getUint32(12,!1);if(r+ee+p>n)break;let I=new Uint8Array(p);if(p>0&&this.walHandle.read(I,{at:r+ee}),this.computeChecksum(u.subarray(0,12),I)!==T)break;let X=r+ee+p;f===wr?(i=new DataView(I.buffer,I.byteOffset,I.byteLength).getUint32(0,!1),o.add(h),a=X):s.push({pageNo:f,txId:h,payload:I}),r=X}let l=new Set;for(let u of s)o.has(u.txId)&&(this.walIndex.set(u.pageNo,Qs(u.payload)),this.walFrameCount++,l.add(u.pageNo));return this.nextPageId=i,o.size>0&&(this.currentTxId=Math.max(...o)+1),this.walOffset=a,l}buildCommitBuffer(e,n,r){let o=ee+Tn;for(let d of e)o+=ee+d.cbor.length;let s=new Uint8Array(o),i=new DataView(s.buffer),a=0;for(let d of e){i.setUint32(a,d.pageNo,!1),i.setUint32(a+4,d.cbor.length,!1),i.setUint32(a+8,n,!1);let f=this.computeChecksum(s.subarray(a,a+12),d.cbor);i.setUint32(a+12,f,!1),s.set(d.cbor,a+ee),a+=ee+d.cbor.length}let l=new Uint8Array(Tn);new DataView(l.buffer).setUint32(0,r,!1),i.setUint32(a,wr,!1),i.setUint32(a+4,Tn,!1),i.setUint32(a+8,n,!1);let u=this.computeChecksum(s.subarray(a,a+12),l);return i.setUint32(a+12,u,!1),s.set(l,a+ee),s}initWalHeader(){let e=new Uint8Array(Ce);e.set(yn,0),new DataView(e.buffer).setUint32(8,this.epoch,!1),this.walHandle.write(e,{at:0}),this.walOffset=Ce}computeChecksum(e,n){let r=new Uint8Array(e.length+n.length);return r.set(e),r.set(n,e.length),_r(r)}};var m=class extends Error{name="BindError";constructor(e){super(`Bind error: ${e}`)}};function Ve(t,e){let n=e.toLowerCase();return t.columns.findIndex(r=>r.name.toLowerCase()===n)}function le(t,e){let n=Ve(t,e);if(n===-1)throw new m(`Column "${e}" not found in table "${t.name}"`);return n}function Cn(t){return t.columns.map((e,n)=>e.primaryKey?n:-1).filter(e=>e!==-1)}function On(t,e){let n=t.schema.columns[e];return{expressionClass:"BOUND_COLUMN_REF",binding:{tableIndex:t.tableIndex,columnIndex:e},tableName:t.tableName,columnName:n.name,returnType:n.type}}var Je=class t{constructor(e,n){this.parent=n;this.tableIndexCounter=e}parent;bindings=[];ctes=new Map;tableIndexCounter;addTable(e,n,r){let o={tableIndex:this.tableIndexCounter(),tableName:e,alias:n,schema:r};return this.bindings.push(o),o}resolveColumn(e,n){return n?this.resolveQualified(e,n):this.resolveUnqualified(e)}resolveColumnIn(e,n){for(let r of n){let o=Ve(r.schema,e);if(o!==-1)return On(r,o)}throw new m(`Column "${e}" not found in any table`)}findByAlias(e){let n=e.toLowerCase();return this.bindings.find(r=>r.alias.toLowerCase()===n)??this.parent?.findByAlias(e)}getAllBindings(){return this.bindings}addCTE(e,n,r,o=[]){this.ctes.set(e.toLowerCase(),{plan:n,index:r,aliases:o})}getCTE(e){return this.ctes.get(e.toLowerCase())??this.parent?.getCTE(e)}createChildScope(){return new t(this.tableIndexCounter,this)}createIsolatedScope(){let e=new t(this.tableIndexCounter);return this.collectCTEs(e.ctes),e}resolveQualified(e,n){let r=this.findByAlias(n);if(!r)throw new m(`Unknown table alias "${n}"`);let o=Ve(r.schema,e);if(o===-1)throw new m(`Column "${e}" not found in table "${r.tableName}"`);return On(r,o)}resolveUnqualified(e){let n=this.findMatchingColumns(e);if(n.length===0){if(this.parent)return this.parent.resolveUnqualified(e);throw new m(`Column "${e}" not found in any table`)}if(n.length>1){let r=n.map(o=>`"${o.entry.tableName}"`).join(" and ");throw new m(`Column "${e}" is ambiguous \u2014 exists in ${r}`)}return On(n[0].entry,n[0].colIdx)}findMatchingColumns(e){let n=[];for(let r of this.bindings){let o=Ve(r.schema,e);o!==-1&&n.push({entry:r,colIdx:o})}return n}collectCTEs(e){let n=this;for(;n;){for(let[r,o]of n.ctes)e.has(r)||e.set(r,o);n=n.parent}}};function vr(t){let e=0,n=()=>e++;return{catalog:t,nextTableIndex:n,resetTableIndex:()=>{e=0},createScope:()=>new Je(n)}}function Ws(t,e){let n=t.columns.findIndex(r=>r.name.toLowerCase()===e.toLowerCase());if(n===-1)throw new Error(`Column "${e}" not found in table "${t.name}"`);return n}function Pr(t,e,n){let r=Ws(t,n),o=t.columns[r];return{expressionClass:"BOUND_COLUMN_REF",binding:{tableIndex:e,columnIndex:r},tableName:t.name,columnName:o.name,returnType:o.type}}function Ln(t,e){let n=o=>Ln(o,e),r=t.returnType;switch(t.expressionClass){case"BOUND_COLUMN_REF":{let o=t;return{type:"column",name:e.columns[o.binding.columnIndex].name,returnType:r}}case"BOUND_JSON_ACCESS":{let o=t;return{type:"json_access",column:e.columns[o.child.binding.columnIndex].name,path:o.path,returnType:r}}case"BOUND_FUNCTION":{let o=t;return{type:"function",name:o.functionName,args:o.children.map(n),returnType:r}}case"BOUND_CAST":{let o=t;return{type:"cast",child:n(o.child),castType:o.castType,returnType:r}}case"BOUND_OPERATOR":{let o=t;return{type:"operator",operatorType:o.operatorType,args:o.children.map(n),returnType:r}}case"BOUND_COMPARISON":{let o=t;return{type:"comparison",comparisonType:o.comparisonType,left:n(o.left),right:n(o.right),returnType:r}}case"BOUND_CASE":{let o=t;return{type:"case",checks:o.caseChecks.map(s=>({when:n(s.when),then:n(s.then)})),elseExpr:o.elseExpr?n(o.elseExpr):null,returnType:r}}case"BOUND_CONSTANT":return{type:"constant",value:t.value,returnType:r};default:throw new Error(`Unsupported expression type in index: ${t.expressionClass}`)}}function me(t,e,n){let r=o=>me(o,e,n);switch(t.type){case"column":return{...Pr(e,n,t.name),returnType:t.returnType};case"json_access":return{expressionClass:"BOUND_JSON_ACCESS",child:Pr(e,n,t.column),path:t.path,returnType:t.returnType};case"function":return{expressionClass:"BOUND_FUNCTION",functionName:t.name,children:t.args.map(r),returnType:t.returnType};case"cast":return{expressionClass:"BOUND_CAST",child:r(t.child),castType:t.castType,returnType:t.returnType};case"operator":return{expressionClass:"BOUND_OPERATOR",operatorType:t.operatorType,children:t.args.map(r),returnType:t.returnType};case"comparison":return{expressionClass:"BOUND_COMPARISON",comparisonType:t.comparisonType,left:r(t.left),right:r(t.right),returnType:t.returnType};case"case":return{expressionClass:"BOUND_CASE",caseChecks:t.checks.map(o=>({when:r(o.when),then:r(o.then)})),elseExpr:t.elseExpr?r(t.elseExpr):null,returnType:t.returnType};case"constant":return{expressionClass:"BOUND_CONSTANT",value:t.value,returnType:t.returnType}}}function j(t){switch(t.type){case"column":return[t.name];case"json_access":return[t.column];case"function":case"operator":return t.args.flatMap(j);case"cast":return j(t.child);case"comparison":return[...j(t.left),...j(t.right)];case"constant":return[];case"case":{let e=t.checks.flatMap(n=>[...j(n.when),...j(n.then)]);return t.elseExpr&&e.push(...j(t.elseExpr)),e}}}function ce(t){switch(t.id){case"INTEGER":return"INTEGER";case"BIGINT":return"BIGINT";case"SMALLINT":return"INTEGER";case"FLOAT":case"DOUBLE":return"REAL";case"VARCHAR":return"TEXT";case"BLOB":return"BLOB";case"BOOLEAN":return"BOOLEAN";case"JSON":return"JSON";default:return"ANY"}}function Oe(t){switch(t){case"COMPARE_EQUAL":return"EQUAL";case"COMPARE_NOTEQUAL":return"NOT_EQUAL";case"COMPARE_LESSTHAN":return"LESS";case"COMPARE_GREATERTHAN":return"GREATER";case"COMPARE_LESSTHANOREQUALTO":return"LESS_EQUAL";case"COMPARE_GREATERTHANOREQUALTO":return"GREATER_EQUAL";default:throw new m(`Unknown comparison type: ${t}`)}}function Ur(t){switch(t){case"OPERATOR_NOT":return"NOT";case"OPERATOR_IS_NULL":return"IS_NULL";case"OPERATOR_IS_NOT_NULL":return"IS_NOT_NULL";case"OPERATOR_IN":return"IN";case"OPERATOR_NOT_IN":return"NOT_IN";case"OPERATOR_NEGATE":return"NEGATE";case"OPERATOR_ADD":return"ADD";case"OPERATOR_SUBTRACT":return"SUBTRACT";case"OPERATOR_MULTIPLY":return"MULTIPLY";case"OPERATOR_DIVIDE":return"DIVIDE";case"OPERATOR_MOD":return"MOD";case"OPERATOR_CONCAT":return"CONCAT";default:throw new m(`Unknown operator type: ${t}`)}}function Le(t){if(t.expression_class==="CONSTANT"){let e=t;if(typeof e.value.value=="number"){if(e.value.value<0)throw new m("Expected non-negative integer constant");return e.value.value}}throw new m("Expected integer constant")}function dt(t){return t.expression_class==="CONSTANT"?t.value.value:null}function te(t,e){let n=t.catalog.getTable(e);if(!n)throw new m(`Table "${e}" not found`);return n}function Dr(t,e){let n=te(t,e.table),r=e.alter_type==="ADD_COLUMN"&&e.column_def?Ys(e.column_def,n):zs(t,e.table,e.column_name);return{type:"LOGICAL_ALTER_TABLE",tableName:e.table,action:r,children:[],expressions:[],types:[],estimatedCardinality:0,columnBindings:[]}}function Ys(t,e){let n=ce(t.type);if(t.is_autoincrement){if(!t.is_primary_key)throw new m("AUTOINCREMENT is only allowed on PRIMARY KEY columns");if(n!=="INTEGER")throw new m("AUTOINCREMENT is only allowed on INTEGER columns");if(e.columns.some(r=>r.autoIncrement))throw new m("Table already has an AUTOINCREMENT column")}return{type:"ADD_COLUMN",column:{name:t.name,type:n,nullable:!t.is_not_null,primaryKey:t.is_primary_key,unique:t.is_unique,autoIncrement:t.is_autoincrement,defaultValue:t.default_value?dt(t.default_value):null}}}function zs(t,e,n){for(let r of t.catalog.getTableIndexes(e))if(r.expressions.flatMap(j).some(s=>s.toLowerCase()===n.toLowerCase()))throw new m(`Cannot drop column "${n}": referenced by index "${r.name}"`);return{type:"DROP_COLUMN",columnName:n}}function L(t,e){if(t.expressionClass!==e.expressionClass)return!1;switch(t.expressionClass){case"BOUND_COLUMN_REF":{let n=t,r=e;return n.binding.tableIndex===r.binding.tableIndex&&n.binding.columnIndex===r.binding.columnIndex}case"BOUND_CONSTANT":{let n=t,r=e;return n.value===r.value&&n.returnType===r.returnType}case"BOUND_COMPARISON":{let n=t,r=e;return n.comparisonType===r.comparisonType&&L(n.left,r.left)&&L(n.right,r.right)}case"BOUND_CONJUNCTION":return In(t,e,"conjunctionType");case"BOUND_OPERATOR":return In(t,e,"operatorType");case"BOUND_FUNCTION":return In(t,e,"functionName");case"BOUND_AGGREGATE":return fe(t,e);case"BOUND_BETWEEN":{let n=t,r=e;return L(n.input,r.input)&&L(n.lower,r.lower)&&L(n.upper,r.upper)}case"BOUND_CAST":{let n=t,r=e;return n.castType===r.castType&&L(n.child,r.child)}case"BOUND_CASE":{let n=t,r=e;if(n.caseChecks.length!==r.caseChecks.length)return!1;for(let o=0;o<n.caseChecks.length;o++)if(!L(n.caseChecks[o].when,r.caseChecks[o].when)||!L(n.caseChecks[o].then,r.caseChecks[o].then))return!1;return n.elseExpr===null&&r.elseExpr===null?!0:n.elseExpr===null||r.elseExpr===null?!1:L(n.elseExpr,r.elseExpr)}case"BOUND_JSON_ACCESS":{let n=t,r=e;return!L(n.child,r.child)||n.path.length!==r.path.length?!1:n.path.every((o,s)=>{let i=r.path[s];return o.type!==i.type?!1:o.type==="field"?o.name===i.name:o.value===i.value})}default:return!1}}function In(t,e,n){return t[n]!==e[n]||t.children.length!==e.children.length?!1:t.children.every((r,o)=>L(r,e.children[o]))}function fe(t,e){return t.functionName===e.functionName&&t.isStar===e.isStar&&t.distinct===e.distinct&&t.children.length===e.children.length&&t.children.every((n,r)=>L(n,e.children[r]))}function Mr(t,e,n){let r=t.column_names,o,s;if(r.length>=2){let a=r[0];e.findByAlias(a)?(o=e.resolveColumn(r[1],r[0]),s=2):(o=e.resolveColumn(r[0]),s=1)}else o=e.resolveColumn(r[0]),s=1;let i=[];for(let a=s;a<r.length;a++)i.push({type:"field",name:r[a]});if(t.path&&i.push(...t.path),n&&(n.groups.length>0||n.aggregates.length>0)){let a=n.groups.findIndex(l=>L(l,o));if(a===-1)throw new m(`Column "${o.columnName}" must appear in the GROUP BY clause or be used in an aggregate function`);o={...o,binding:{tableIndex:n.groupIndex,columnIndex:a}}}if(i.length>0){if(o.returnType!=="JSON")throw new m(`Cannot access field on non-JSON column "${o.columnName}" (type: ${o.returnType})`);return{expressionClass:"BOUND_JSON_ACCESS",child:o,path:i,returnType:"JSON"}}return o}function jr(t){return t.value.is_null?{expressionClass:"BOUND_CONSTANT",value:null,returnType:"NULL"}:{expressionClass:"BOUND_CONSTANT",value:t.value.value,returnType:ce(t.value.type)}}function Fr(t){return{expressionClass:"BOUND_PARAMETER",index:t.index,returnType:"ANY"}}var mt=new Set(["INTEGER","BIGINT","REAL"]),ft=new Set(["BLOB","JSON"]);function F(t,e){if(t==="NULL"||t==="ANY")return e;if(e==="NULL"||e==="ANY"||t===e)return t;if(mt.has(t)&&mt.has(e))return t==="REAL"||e==="REAL"?"REAL":t==="BIGINT"||e==="BIGINT"?"BIGINT":"INTEGER";if(t==="JSON"||e==="JSON")return"JSON";if(t==="BLOB"||e==="BLOB"){if(t==="BLOB"&&e==="BLOB")return"BLOB";throw new m(`Type mismatch: cannot compare ${t} and ${e}`)}throw new m(`Type mismatch: cannot compare ${t} and ${e}`)}function Gr(t,e){if(t==="NULL"||t==="ANY")return e;if(e==="NULL"||e==="ANY")return t;if(t==="JSON"||e==="JSON")throw new m("Cannot perform arithmetic on JSON type");if(t==="BLOB"||e==="BLOB")throw new m("Cannot perform arithmetic on BLOB type");if(mt.has(t)&&mt.has(e))return t==="REAL"||e==="REAL"?"REAL":t==="BIGINT"||e==="BIGINT"?"BIGINT":"INTEGER";throw new m(`Type mismatch: cannot perform arithmetic on ${t} and ${e}`)}function kr(t,e){switch(t){case"UPPER":case"LOWER":case"TRIM":case"LTRIM":case"RTRIM":case"SUBSTR":case"SUBSTRING":case"REPLACE":return Xs(t,e);case"CONCAT":return Zs(t,e);case"LENGTH":return"INTEGER";case"ABS":return ti(e);case"ROUND":case"FLOOR":case"CEIL":case"CEILING":return ei(t,e);case"COALESCE":return ni(e);case"TYPEOF":case"MD5":return"TEXT";default:return ri(e)}}function Xs(t,e){if(e.length>0&&ft.has(e[0].returnType))throw new m(`Cannot apply ${t} to ${e[0].returnType} type`);return"TEXT"}function Zs(t,e){let n=e.find(r=>ft.has(r.returnType));if(n)throw new m(`Cannot apply ${t} to ${n.returnType} type`);return"TEXT"}function ei(t,e){if(e.length>0&&ft.has(e[0].returnType))throw new m(`Cannot apply ${t} to ${e[0].returnType} type`);return"REAL"}function ti(t){let e=t.length>0?t[0].returnType:"ANY";if(ft.has(e))throw new m(`Cannot apply ABS to ${e} type`);return e!=="NULL"&&e!=="ANY"?e:"INTEGER"}function ni(t){return t.find(e=>e.returnType!=="NULL")?.returnType??"ANY"}function ri(t){return t.length>0?t[0].returnType:"ANY"}function Vr(t,e,n,r){let o=x(t,e.left,n,r),s=x(t,e.right,n,r);if(e.type==="COMPARE_LIKE"||e.type==="COMPARE_NOT_LIKE"){if(o.returnType==="BLOB"||s.returnType==="BLOB")throw new m("Cannot apply LIKE to BLOB type");if(o.returnType==="JSON"||s.returnType==="JSON")throw new m("Cannot apply LIKE to JSON type");return{expressionClass:"BOUND_FUNCTION",functionName:e.type==="COMPARE_LIKE"?"LIKE":"NOT_LIKE",children:[o,s],returnType:"BOOLEAN"}}return F(o.returnType,s.returnType),{expressionClass:"BOUND_COMPARISON",comparisonType:Oe(e.type),left:o,right:s,returnType:"BOOLEAN"}}function Jr(t,e,n,r){let o=e.children.map(s=>x(t,s,n,r));return{expressionClass:"BOUND_CONJUNCTION",conjunctionType:e.type==="CONJUNCTION_AND"?"AND":"OR",children:o,returnType:"BOOLEAN"}}function $r(t,e,n,r){let o=e.children.map(a=>x(t,a,n,r)),s=Ur(e.type),i;switch(s){case"NOT":case"IS_NULL":case"IS_NOT_NULL":case"IN":case"NOT_IN":for(let a=1;a<o.length;a++)F(o[0].returnType,o[a].returnType);i="BOOLEAN";break;case"NEGATE":i=o[0].returnType;break;case"ADD":case"SUBTRACT":case"MULTIPLY":case"DIVIDE":case"MOD":i=Gr(o[0].returnType,o[1].returnType);break;case"CONCAT":if(o.some(a=>a.returnType==="BLOB"))throw new m("Cannot apply CONCAT to BLOB type");i="TEXT";break;default:i="ANY"}return{expressionClass:"BOUND_OPERATOR",operatorType:s,children:o,returnType:i}}function Hr(t,e,n,r){let o=x(t,e.input,n,r),s=x(t,e.lower,n,r),i=x(t,e.upper,n,r);return F(o.returnType,s.returnType),F(o.returnType,i.returnType),{expressionClass:"BOUND_BETWEEN",input:o,lower:s,upper:i,returnType:"BOOLEAN"}}var ht=new Set(["COUNT","SUM","AVG","MIN","MAX"]);function Kr(t){switch(t.expression_class){case"FUNCTION":return t.children;case"COMPARISON":{let e=t;return[e.left,e.right]}case"CONJUNCTION":return t.children;case"OPERATOR":return t.children;case"CASE":{let e=t,n=[];for(let r of e.case_checks)n.push(r.when_expr,r.then_expr);return e.else_expr&&n.push(e.else_expr),n}case"BETWEEN":{let e=t;return[e.input,e.lower,e.upper]}case"CAST":return[t.child];default:return[]}}function $e(t){return t.some(Et)}function Et(t){return t.expression_class==="FUNCTION"&&ht.has(t.function_name.toUpperCase())?!0:Kr(t).some(Et)}function He(t,e="WHERE clause"){if(Et(t))throw new m(`Aggregate function not allowed in ${e}`)}function Qr(t,e,n){let r=[];for(let o of e)Nn(t,o,n,r);return r}function qr(t,e,n){let r=[];return Nn(t,e,n,r),r}function Nn(t,e,n,r){if(e.expression_class==="FUNCTION"){let o=e;if(ht.has(o.function_name.toUpperCase())){let s=Bn(t,o,n);r.some(i=>fe(i,s))||(s.aggregateIndex=r.length,r.push(s));return}}for(let o of Kr(e))Nn(t,o,n,r)}function Bn(t,e,n){let r=e.function_name.toUpperCase();if(!e.is_star){for(let i of e.children)if(Et(i))throw new m("Nested aggregate functions are not allowed")}let o=e.is_star?[]:e.children.map(i=>x(t,i,n)),s;switch(r){case"COUNT":s="INTEGER";break;case"SUM":case"AVG":{let i=o.length>0?o[0].returnType:"ANY";if(i==="BLOB"||i==="JSON")throw new m(`Cannot apply ${r} to ${i} type`);s="REAL";break}case"MIN":case"MAX":s=o.length>0?o[0].returnType:"ANY";break;default:s="ANY"}return{expressionClass:"BOUND_AGGREGATE",functionName:r,children:o,distinct:e.distinct,isStar:e.is_star,aggregateIndex:0,returnType:s}}function Wr(t,e,n,r){let o=e.function_name.toUpperCase();if(ht.has(o)){let a=Bn(t,e,n);return r?r.aggregates.find(u=>fe(u,a))??a:a}let s=e.children.map(a=>x(t,a,n,r)),i=kr(o,s);return{expressionClass:"BOUND_FUNCTION",functionName:o,children:s,returnType:i}}function Yr(t){let e=t.nextTableIndex(),n={name:"__empty",columns:[]};return{type:"LOGICAL_GET",children:[],expressions:[],types:[],estimatedCardinality:1,tableIndex:e,tableName:"__empty",schema:n,columnIds:[],tableFilters:[],columnBindings:[]}}function gt(t,e){let n=e.columns.map((o,s)=>s),r=e.columns.map(o=>o.type);return{type:"LOGICAL_GET",children:[],expressions:[],types:r,estimatedCardinality:0,tableIndex:t.tableIndex,tableName:e.name,schema:e,columnIds:n,tableFilters:[],columnBindings:n.map(o=>({tableIndex:t.tableIndex,columnIndex:o}))}}function Ie(t,e){return{type:"LOGICAL_FILTER",children:[t],expressions:e,types:t.types,estimatedCardinality:0,columnBindings:t.columnBindings}}function zr(t){return{type:"LOGICAL_DISTINCT",children:[t],expressions:[],types:t.types,estimatedCardinality:0,columnBindings:t.columnBindings}}function xt(t,e){return{type:"LOGICAL_ORDER_BY",children:[t],orders:e,expressions:[],types:t.types,estimatedCardinality:0,columnBindings:t.columnBindings}}function yt(t,e,n){return{type:"LOGICAL_LIMIT",children:[t],limitVal:e,offsetVal:n,expressions:[],types:t.types,estimatedCardinality:0,columnBindings:t.columnBindings}}function Xr(t,e,n,r,o,s){let i=[...e.map((a,l)=>({tableIndex:r,columnIndex:l})),...n.map((a,l)=>({tableIndex:o,columnIndex:l}))];return{type:"LOGICAL_AGGREGATE_AND_GROUP_BY",groupIndex:r,aggregateIndex:o,children:[t],expressions:n,groups:e,havingExpression:s,types:[...e.map(a=>a.returnType),...n.map(a=>a.returnType)],estimatedCardinality:0,columnBindings:i}}function An(t,e,n,r){let o=n.map(i=>i.returnType),s=n.map((i,a)=>({tableIndex:e,columnIndex:a}));return{type:"LOGICAL_PROJECTION",tableIndex:e,children:[t],expressions:n,aliases:r,types:o,estimatedCardinality:0,columnBindings:s}}function Zr(t,e,n){let r=[],o=t.table_name?[e.findByAlias(t.table_name)].filter(Boolean):e.getAllBindings();if(t.table_name&&o.length===0)throw new m(`Unknown table alias "${t.table_name}"`);for(let s of o)for(let i=0;i<s.schema.columns.length;i++){let a=s.schema.columns[i];r.push({expressionClass:"BOUND_COLUMN_REF",binding:{tableIndex:s.tableIndex,columnIndex:i},tableName:s.tableName,columnName:a.name,returnType:a.type})}if(n&&(n.groups.length>0||n.aggregates.length>0))for(let s=0;s<r.length;s++){let i=n.groups.findIndex(a=>L(a,r[s]));if(i===-1)throw new m(`Column "${r[s].columnName}" must appear in the GROUP BY clause or be used in an aggregate function`);r[s]={...r[s],binding:{tableIndex:n.groupIndex,columnIndex:i}}}return r}function eo(t){return t.type==="LOGICAL_PROJECTION"?t:t.children.length>0?eo(t.children[0]):null}function Tt(t,e){let n=eo(t);return n?n.expressions.map((r,o)=>{let s=`column${o}`;if(n.aliases[o])s=n.aliases[o];else if(r.expressionClass==="BOUND_COLUMN_REF")s=r.columnName;else if(r.expressionClass==="BOUND_AGGREGATE"){let i=r;s=i.isStar?`${i.functionName.toLowerCase()}_star`:`${i.functionName.toLowerCase()}_${o}`}return{name:s,type:e[o]??"ANY",nullable:!0,primaryKey:!1,unique:!1,autoIncrement:!1,defaultValue:null}}):e.map((r,o)=>({name:`column${o}`,type:r,nullable:!0,primaryKey:!1,unique:!1,autoIncrement:!1,defaultValue:null}))}function to(t,e,n){let r=e.alias??e.table_name,o=n.getCTE(e.table_name);if(o){let u=Tt(o.plan,o.plan.types);if(o.aliases.length>0)for(let p=0;p<o.aliases.length;p++)u[p]={...u[p],name:o.aliases[p]};let d={name:e.table_name,columns:u},f=n.addTable(e.table_name,r,d);return{type:"LOGICAL_CTE_REF",cteName:e.table_name,cteIndex:o.index,children:[],expressions:[],types:o.plan.types,estimatedCardinality:0,columnBindings:u.map((p,h)=>({tableIndex:f.tableIndex,columnIndex:h}))}}let s=t.catalog.getTable(e.table_name);if(!s)throw new m(`Table "${e.table_name}" not found`);let i=n.addTable(e.table_name,r,s),a=s.columns.map((u,d)=>d),l=s.columns.map(u=>u.type);return{type:"LOGICAL_GET",children:[],expressions:[],types:l,estimatedCardinality:0,tableIndex:i.tableIndex,tableName:s.name,schema:s,columnIds:a,tableFilters:[],columnBindings:a.map(u=>({tableIndex:i.tableIndex,columnIndex:u}))}}function ro(t,e,n){let r=n.getAllBindings().length,o=Ke(t,e.left,n),s=n.getAllBindings().length,i=Ke(t,e.right,n);if(e.join_type==="CROSS")return{type:"LOGICAL_CROSS_PRODUCT",children:[o,i],expressions:[],types:[...o.types,...i.types],estimatedCardinality:0,columnBindings:[...o.columnBindings,...i.columnBindings]};if(e.join_type==="RIGHT")throw new m("RIGHT JOIN is not supported");let a=e.join_type==="LEFT"?"LEFT":"INNER",l=[];if(e.using_columns.length>0){let u=n.getAllBindings(),d=u.slice(r,s),f=u.slice(s);for(let p of e.using_columns)l.push({left:n.resolveColumnIn(p,d),right:n.resolveColumnIn(p,f),comparisonType:"EQUAL"})}else if(e.condition){He(e.condition,"JOIN ON clause"),l=oo(t,e.condition,n);let u=n.getAllBindings(),d=new Set(u.slice(r,s).map(f=>f.tableIndex));for(let f=0;f<l.length;f++)l[f]=oi(l[f],d)}return{type:"LOGICAL_COMPARISON_JOIN",joinType:a,children:[o,i],conditions:l,expressions:[],types:[...o.types,...i.types],estimatedCardinality:0,columnBindings:[...o.columnBindings,...i.columnBindings]}}function oo(t,e,n){if(e.expression_class==="CONJUNCTION"){let o=e;if(o.type==="CONJUNCTION_AND"){let s=[];for(let i of o.children)s.push(...oo(t,i,n));return s}}if(e.expression_class==="COMPARISON"){let o=e,s=x(t,o.left,n),i=x(t,o.right,n);return F(s.returnType,i.returnType),[{left:s,right:i,comparisonType:Oe(o.type)}]}return[{left:x(t,e,n),right:{expressionClass:"BOUND_CONSTANT",value:!0,returnType:"BOOLEAN"},comparisonType:"EQUAL"}]}function oi(t,e){let n=no(t.left),r=no(t.right),o=[...n].every(i=>e.has(i)),s=[...r].every(i=>e.has(i));return o&&!s?t:s&&!o?{left:t.right,right:t.left,comparisonType:si(t.comparisonType)}:t}function si(t){switch(t){case"LESS":return"GREATER";case"GREATER":return"LESS";case"LESS_EQUAL":return"GREATER_EQUAL";case"GREATER_EQUAL":return"LESS_EQUAL";default:return t}}function no(t){let e=new Set;return Y(t,e),e}function Y(t,e){switch(t.expressionClass){case"BOUND_COLUMN_REF":e.add(t.binding.tableIndex);break;case"BOUND_CONSTANT":break;case"BOUND_COMPARISON":{let n=t;Y(n.left,e),Y(n.right,e);break}case"BOUND_CONJUNCTION":case"BOUND_OPERATOR":case"BOUND_FUNCTION":case"BOUND_AGGREGATE":for(let n of t.children)Y(n,e);break;case"BOUND_BETWEEN":{let n=t;Y(n.input,e),Y(n.lower,e),Y(n.upper,e);break}case"BOUND_CAST":Y(t.child,e);break;case"BOUND_CASE":{let n=t;for(let r of n.caseChecks)Y(r.when,e),Y(r.then,e);n.elseExpr&&Y(n.elseExpr,e);break}}}function so(t,e,n){let r=n.createIsolatedScope(),o=J(t,e.subquery.node,r),s=e.alias??"__subquery",i=Tt(o,o.types),a=o.types.map((f,p)=>({name:e.column_name_alias[p]??i[p]?.name??`column${p}`,type:f,nullable:!0,primaryKey:!1,unique:!1,autoIncrement:!1,defaultValue:null})),l={name:s,columns:a},u=n.addTable(s,s,l),d=a.map((f,p)=>p);return{type:"LOGICAL_GET",children:[o],expressions:[],types:o.types,estimatedCardinality:0,tableIndex:u.tableIndex,tableName:s,schema:l,columnIds:d,tableFilters:[],columnBindings:d.map(f=>({tableIndex:u.tableIndex,columnIndex:f}))}}function Ke(t,e,n){switch(e.type){case"BASE_TABLE":return to(t,e,n);case"JOIN":return ro(t,e,n);case"SUBQUERY":return so(t,e,n);default:throw new m("Unknown table reference type")}}function Ct(t,e,n){let r=[];for(let[o,s]of Object.entries(e.map)){let i=e.recursive&&li(o,s.query),a=t.nextTableIndex(),l=i?ai(t,o,s,a,n):ii(t,s,n),u=s.aliases;if(u.length>0&&u.length!==l.types.length)throw new m(`CTE "${o}" has ${l.types.length} columns but ${u.length} column aliases were provided`);n.addCTE(o,l,a,u),r.push({name:o,plan:l,index:a})}return r}function ii(t,e,n){let r=n.createChildScope();return J(t,e.query.node,r)}function ai(t,e,n,r,o){let s=n.query.node;if(s.type!=="SET_OPERATION_NODE")throw new m(`Recursive CTE "${e}" must use UNION or UNION ALL`);let i=s,a=i.set_op_type==="UNION_ALL",l=o.createChildScope(),u=J(t,i.left,l);o.addCTE(e,u,r,n.aliases),ui(e,i.right);let d=o.createChildScope(),f=Ne(t,i.right,d);if(u.types.length!==f.types.length)throw new m(`Recursive CTE "${e}" anchor has ${u.types.length} columns but recursive term has ${f.types.length}`);for(let h=0;h<u.types.length;h++)if(!pi(u.types[h],f.types[h]))throw new m(`Recursive CTE "${e}" column ${h+1}: anchor type ${u.types[h]} is incompatible with recursive term type ${f.types[h]}`);let p=u.columnBindings;return{type:"LOGICAL_RECURSIVE_CTE",cteName:e,cteIndex:r,children:[u,f],isUnionAll:a,expressions:[],types:u.types,estimatedCardinality:0,columnBindings:p}}function li(t,e){let n=e.node;return n.type!=="SET_OPERATION_NODE"?!1:ci(n.right,t)}function ci(t,e){return!!(t.from_table&&Sn(t.from_table,e))}function Sn(t,e){switch(t.type){case"BASE_TABLE":return t.table_name.toLowerCase()===e.toLowerCase();case"JOIN":return Sn(t.left,e)||Sn(t.right,e);case"SUBQUERY":return!1}}function ui(t,e){if(e.groups.group_expressions.length>0)throw new m(`Recursive CTE "${t}": GROUP BY is not allowed in the recursive term`);if(e.having)throw new m(`Recursive CTE "${t}": HAVING is not allowed in the recursive term`);for(let n of e.modifiers){if(n.type==="DISTINCT_MODIFIER")throw new m(`Recursive CTE "${t}": DISTINCT is not allowed in the recursive term`);if(n.type==="ORDER_MODIFIER")throw new m(`Recursive CTE "${t}": ORDER BY is not allowed in the recursive term`);if(n.type==="LIMIT_MODIFIER")throw new m(`Recursive CTE "${t}": LIMIT is not allowed in the recursive term`)}if($e(e.select_list))throw new m(`Recursive CTE "${t}": aggregate functions are not allowed in the recursive term`)}var io=new Set(["INTEGER","BIGINT","REAL"]);function pi(t,e){return!!(t===e||t==="NULL"||t==="ANY"||e==="NULL"||e==="ANY"||io.has(t)&&io.has(e))}function Ne(t,e,n){let r=Ct(t,e.cte_map,n),o=e.from_table?Ke(t,e.from_table,n):Yr(t);e.where_clause&&(He(e.where_clause),o=Ie(o,[x(t,e.where_clause,n)]));let s=di(t,e,n,o);s.aggregatePlan&&(o=s.aggregatePlan);let i=fi(t,e,n,o,s.context);return o=hi(t,e,n,i,s.context),Ci(o,r)}function di(t,e,n,r){let o=e.groups.group_expressions.length>0,s=$e(e.select_list)||e.having!==null&&$e([e.having]);if(!o&&!s)return{aggregatePlan:null,context:void 0};for(let p of e.groups.group_expressions)He(p,"GROUP BY clause");let i=e.groups.group_expressions.map(p=>x(t,p,n)),a=mi(t,e.select_list,e.having,n),l=t.nextTableIndex(),u=t.nextTableIndex();for(let p=0;p<a.length;p++)a[p].aggregateIndex=p,a[p].binding={tableIndex:u,columnIndex:p};let d={aggregates:a,groups:i,groupIndex:l},f=e.having?x(t,e.having,n,d):null;return{aggregatePlan:Xr(r,i,a,l,u,f),context:d}}function mi(t,e,n,r){let o=Qr(t,e,r);if(n)for(let s of qr(t,n,r))o.some(i=>fe(i,s))||o.push(s);return o}function fi(t,e,n,r,o){let s=[],i=[];for(let f of e.select_list)if(f.expression_class==="STAR"){let p=Zr(f,n,o);s.push(...p);for(let h=0;h<p.length;h++)i.push(null)}else s.push(x(t,f,n,o)),i.push(f.alias);let a=t.nextTableIndex(),l=An(r,a,s,i),{types:u,columnBindings:d}=l;return{plan:l,expressions:s,aliases:i,types:u,bindings:d,tableIndex:a}}function hi(t,e,n,r,o){let s=r.plan;for(let i of e.modifiers)switch(i.type){case"DISTINCT_MODIFIER":s=zr(s);break;case"ORDER_MODIFIER":s=Ei(t,i.orders,n,r,o,s);break;case"LIMIT_MODIFIER":s=yt(s,i.limit!==null?Le(i.limit):null,i.offset!==null?Le(i.offset):0);break}return s}function Ei(t,e,n,r,o,s){let i=r.expressions.length,a=e.map(u=>gi(t,u,n,r,o)),l=xt(s,a);return r.expressions.length>i&&(l=Ti(t,l,r,i)),l}function gi(t,e,n,r,o){let s=xi(e.expression,r);if(s!==-1)return bn(e,Ot(r.bindings[s],r.types[s]));let i=x(t,e.expression,n,o),a=r.expressions.findIndex(u=>L(u,i));if(a!==-1)return bn(e,Ot(r.bindings[a],i.returnType));let l=yi(r,i);return bn(e,Ot(l,i.returnType))}function xi(t,e){if(t.expression_class!=="COLUMN_REF")return-1;let n=t;if(n.column_names.length!==1)return-1;let r=n.column_names[0].toLowerCase();return e.aliases.findIndex(o=>o!==null&&o.toLowerCase()===r)}function yi(t,e){let n=t.expressions.length;t.expressions.push(e),t.aliases.push(null),t.types.push(e.returnType);let r={tableIndex:t.tableIndex,columnIndex:n};return t.bindings.push(r),r}function Ti(t,e,n,r){let o=t.nextTableIndex(),s=Array.from({length:r},(i,a)=>{let l=n.expressions[a],u=l.expressionClass==="BOUND_COLUMN_REF"?l.columnName:"";return Ot(n.bindings[a],n.types[a],u)});return An(e,o,s,n.aliases.slice(0,r))}function Ci(t,e){for(let n=e.length-1;n>=0;n--){let r=e[n],o=t;t={type:"LOGICAL_MATERIALIZED_CTE",cteName:r.name,cteIndex:r.index,children:[r.plan,o],expressions:[],types:o.types,estimatedCardinality:0,columnBindings:o.columnBindings}}return t}function Ot(t,e,n=""){return{expressionClass:"BOUND_COLUMN_REF",binding:t,tableName:"",columnName:n,returnType:e}}function bn(t,e){return{expression:e,orderType:t.type,nullOrder:t.null_order}}function ao(t,e,n){let r=Ct(t,e.cte_map,n),o=J(t,e.left,n),s=n.createIsolatedScope(),i=Ne(t,e.right,s);if(o.types.length!==i.types.length)throw new m(`UNION requires the same number of columns: left has ${o.types.length}, right has ${i.types.length}`);for(let l=0;l<o.types.length;l++)F(o.types[l],i.types[l]);let a={type:"LOGICAL_UNION",children:[o,i],all:e.set_op_type==="UNION_ALL",expressions:[],types:o.types,estimatedCardinality:0,columnBindings:o.columnBindings};for(let l of e.modifiers)switch(l.type){case"ORDER_MODIFIER":a=xt(a,Oi(t,l.orders,n));break;case"LIMIT_MODIFIER":{let u=l.limit!==null?Le(l.limit):null,d=l.offset!==null?Le(l.offset):0;a=yt(a,u,d);break}}for(let l=r.length-1;l>=0;l--){let u=r[l],d=a;a={type:"LOGICAL_MATERIALIZED_CTE",cteName:u.name,cteIndex:u.index,children:[u.plan,d],expressions:[],types:d.types,estimatedCardinality:0,columnBindings:d.columnBindings}}return a}function Oi(t,e,n){return e.map(r=>({expression:x(t,r.expression,n),orderType:r.type,nullOrder:r.null_order}))}function J(t,e,n){return e.type==="SELECT_NODE"?Ne(t,e,n):ao(t,e,n)}function lo(t,e,n){let r=n.createChildScope(),o=J(t,e.subquery.node,r),s;switch(e.subquery_type){case"SCALAR":s=o.types[0]??"ANY";break;case"EXISTS":case"NOT_EXISTS":case"ANY":case"ALL":s="BOOLEAN";break;default:s="ANY"}let i={expressionClass:"BOUND_SUBQUERY",subqueryType:e.subquery_type,subplan:o,returnType:s};return e.child&&(i.child=x(t,e.child,n)),e.comparison_type&&(i.comparisonType=Oe(e.comparison_type)),i}function co(t,e,n,r){let o=e.case_checks.map(a=>({when:x(t,a.when_expr,n,r),then:x(t,a.then_expr,n,r)})),s=e.else_expr?x(t,e.else_expr,n,r):null,i=o[0]?.then.returnType??s?.returnType??"ANY";for(let a=1;a<o.length;a++)i=F(i,o[a].then.returnType);return s&&(i=F(i,s.returnType)),{expressionClass:"BOUND_CASE",caseChecks:o,elseExpr:s,returnType:i}}function uo(t,e,n,r){let o=x(t,e.child,n,r),s=ce(e.cast_type);return{expressionClass:"BOUND_CAST",child:o,castType:s,returnType:s}}function x(t,e,n,r){switch(e.expression_class){case"COLUMN_REF":return Mr(e,n,r);case"CONSTANT":return jr(e);case"PARAMETER":return Fr(e);case"COMPARISON":return Vr(t,e,n,r);case"CONJUNCTION":return Jr(t,e,n,r);case"OPERATOR":return $r(t,e,n,r);case"BETWEEN":return Hr(t,e,n,r);case"FUNCTION":return Wr(t,e,n,r);case"SUBQUERY":return lo(t,e,n);case"CASE":return co(t,e,n,r);case"CAST":return uo(t,e,n,r);case"STAR":throw new m("Star expression must be handled in SELECT list");default:throw new m("Unknown expression class")}}function po(t,e){let n=te(t,e.table_name);if(e.index_name.toLowerCase().startsWith("__pk_"))throw new m(`Index name "${e.index_name}" uses reserved prefix "__pk_"`);let r=t.createScope();r.addTable(e.table_name,e.table_name,n);let o=[];for(let s of e.expressions){let i=x(t,s,r);if(i.returnType==="BLOB")throw new m("Index expression must return a scalar type, got BLOB");if(i.expressionClass==="BOUND_COLUMN_REF"&&i.returnType==="JSON")throw new m("Cannot create index on a JSON column directly; use a path expression (e.g. data.field)");G(i),o.push(Ln(i,n))}return{type:"LOGICAL_CREATE_INDEX",index:{name:e.index_name,tableName:e.table_name,expressions:o,unique:e.is_unique},ifNotExists:e.if_not_exists,children:[],expressions:[],types:[],estimatedCardinality:0,columnBindings:[]}}function G(t){switch(t.expressionClass){case"BOUND_AGGREGATE":throw new m("Index expressions cannot contain aggregate functions");case"BOUND_SUBQUERY":throw new m("Index expressions cannot contain subqueries");case"BOUND_PARAMETER":throw new m("Index expressions cannot contain parameters");case"BOUND_COLUMN_REF":case"BOUND_CONSTANT":return;case"BOUND_COMPARISON":{let e=t;G(e.left),G(e.right);return}case"BOUND_CONJUNCTION":{let e=t;for(let n of e.children)G(n);return}case"BOUND_BETWEEN":{let e=t;G(e.input),G(e.lower),G(e.upper);return}case"BOUND_JSON_ACCESS":{G(t.child);return}case"BOUND_FUNCTION":{let e=t;for(let n of e.children)G(n);return}case"BOUND_CAST":{G(t.child);return}case"BOUND_OPERATOR":{let e=t;for(let n of e.children)G(n);return}case"BOUND_CASE":{let e=t;for(let n of e.caseChecks)G(n.when),G(n.then);e.elseExpr&&G(e.elseExpr);return}}}function mo(t,e){let n=e.columns.map(o=>{let s=o.is_primary_key||e.primary_key.some(a=>a.toLowerCase()===o.name.toLowerCase()),i=ce(o.type);if(i==="JSON"||i==="BLOB"){if(s)throw new m(`${i} column "${o.name}" cannot be a PRIMARY KEY`);if(o.is_unique)throw new m(`${i} column "${o.name}" cannot be UNIQUE`)}if(o.is_autoincrement){if(!s)throw new m("AUTOINCREMENT is only allowed on PRIMARY KEY columns");if(i!=="INTEGER")throw new m("AUTOINCREMENT is only allowed on INTEGER columns")}return{name:o.name,type:i,nullable:!o.is_not_null&&!s,primaryKey:s,unique:o.is_unique,autoIncrement:o.is_autoincrement,defaultValue:o.default_value?dt(o.default_value):null}});if(n.filter(o=>o.autoIncrement).length>1)throw new m("Table can have at most one AUTOINCREMENT column");let r={name:e.table,columns:n};return{type:"LOGICAL_CREATE_TABLE",schema:r,ifNotExists:e.if_not_exists,children:[],expressions:[],types:[],estimatedCardinality:0,columnBindings:[]}}function fo(t,e){let n=te(t,e.table),r=t.createScope(),o=r.addTable(e.table,e.table,n),s=gt(o,n);if(e.where_clause){let i=x(t,e.where_clause,r);s=Ie(s,[i])}return{type:"LOGICAL_DELETE",tableName:n.name,schema:n,children:[s],expressions:[],types:[],estimatedCardinality:0,columnBindings:[]}}function ho(t){return{type:"LOGICAL_DROP",dropType:t.drop_type,name:t.name,ifExists:t.if_exists,children:[],expressions:[],types:[],estimatedCardinality:0,columnBindings:[]}}function go(t,e){let n=te(t,e.table),r=Li(e,n),o;return e.select_statement?o=Ii(t,e,n,r):o=Ni(t,e,n,r),e.onConflict&&(o.onConflict=Bi(t,e.onConflict,n)),o}function Li(t,e){if(t.columns.length===0)return e.columns.map((r,o)=>o);let n=new Set;return t.columns.map(r=>{let o=r.toLowerCase();if(n.has(o))throw new m(`Duplicate column "${r}" in INSERT`);return n.add(o),le(e,r)})}function Ii(t,e,n,r){let o=t.createScope(),s=J(t,e.select_statement.node,o);if(s.types.length!==r.length)throw new m(`INSERT SELECT column count mismatch: expected ${r.length}, got ${s.types.length}`);return xo(n,r,[s],[])}function Ni(t,e,n,r){let o=t.createScope(),s=[];for(let i of e.values){if(i.length!==r.length)throw new m(`INSERT VALUES column count mismatch: expected ${r.length}, got ${i.length}`);for(let a of i)s.push(x(t,a,o))}return xo(n,r,[],s)}function Bi(t,e,n){let r=Ai(t,e,n);return Ri(r,n,t),e.action==="NOTHING"?Si(r):bi(t,e.action,r,n)}function Ai(t,e,n){if(e.conflictTarget)return e.conflictTarget.map(i=>le(n,i));let r=Cn(n);if(r.length>0)return r;let o=n.columns.findIndex(i=>i.unique);if(o!==-1)return[o];let s=t.catalog.getTableIndexes(n.name).find(i=>i.unique);if(s)return s.expressions.flatMap(j).map(i=>le(n,i));throw new m(`ON CONFLICT requires a conflict target or a PRIMARY KEY / UNIQUE constraint on table "${n.name}"`)}function Si(t){return{conflictColumns:t,action:"NOTHING",updateColumns:[],updateExpressions:[],whereExpression:null,targetTableIndex:-1,excludedTableIndex:-1}}function bi(t,e,n,r){let o=t.createScope(),s=o.addTable(r.name,r.name,r),i=o.addTable(r.name,"excluded",r),a=[],l=[];for(let d of e.setClauses)a.push(le(r,d.column)),l.push(x(t,d.value,o));let u=e.whereClause?x(t,e.whereClause,o):null;return{conflictColumns:n,action:"UPDATE",updateColumns:a,updateExpressions:l,whereExpression:u,targetTableIndex:s.tableIndex,excludedTableIndex:i.tableIndex}}function Ri(t,e,n){if(Eo(t,Cn(e))||t.length===1&&e.columns[t[0]].unique)return;let r=n.catalog.getTableIndexes(e.name);for(let s of r){if(!s.unique||!s.expressions.every(l=>l.type==="column"))continue;let a=s.expressions.flatMap(j).map(l=>le(e,l));if(Eo(t,a))return}let o=t.map(s=>e.columns[s].name).join(", ");throw new m(`ON CONFLICT columns (${o}) do not match any unique constraint on table "${e.name}"`)}function Eo(t,e){if(t.length!==e.length)return!1;let n=[...t].sort(),r=[...e].sort();return n.every((o,s)=>o===r[s])}function xo(t,e,n,r){return{type:"LOGICAL_INSERT",tableName:t.name,schema:t,columns:e,children:n,expressions:r,types:[],estimatedCardinality:0,columnBindings:[]}}function yo(t,e){let n=te(t,e.table),r=t.createScope(),o=r.addTable(e.table,e.table,n),s=gt(o,n);if(e.where_clause){let l=x(t,e.where_clause,r);s=Ie(s,[l])}let i=[],a=[];for(let l of e.set_clauses)i.push(le(n,l.column)),a.push(x(t,l.value,r));return{type:"LOGICAL_UPDATE",tableName:n.name,schema:n,children:[s],updateColumns:i,expressions:a,types:[],estimatedCardinality:0,columnBindings:[]}}var Be=class{ctx;constructor(e){this.ctx=vr(e)}bindStatement(e){switch(this.ctx.resetTableIndex(),e.type){case"SELECT_STATEMENT":{let n=this.ctx.createScope();return J(this.ctx,e.node,n)}case"INSERT_STATEMENT":return go(this.ctx,e);case"UPDATE_STATEMENT":return yo(this.ctx,e);case"DELETE_STATEMENT":return fo(this.ctx,e);case"CREATE_TABLE_STATEMENT":return mo(this.ctx,e);case"CREATE_INDEX_STATEMENT":return po(this.ctx,e);case"ALTER_TABLE_STATEMENT":return Dr(this.ctx,e);case"DROP_STATEMENT":return ho(e);case"TRANSACTION_STATEMENT":throw new m("Transaction statements are not handled by the binder");default:throw new m("Unknown statement type")}}};function _i(t,e){if(typeof t=="number"&&typeof e=="number")return t-e;if(typeof t=="boolean"&&typeof e=="boolean")return(t?1:0)-(e?1:0);if(typeof t=="number"&&typeof e=="string"){let o=Number(e);if(!Number.isNaN(o))return t-o}if(typeof e=="number"&&typeof t=="string"){let o=Number(t);if(!Number.isNaN(o))return o-e}let n=String(t),r=String(e);return n<r?-1:n>r?1:0}function oe(t,e){let n=Math.min(t.length,e.length);for(let r=0;r<n;r++){let o=t[r],s=e[r];if(o===null&&s===null)continue;if(o===null)return 1;if(s===null)return-1;let i=_i(o,s);if(i!==0)return i}return t.length-e.length}function Qe(t){return t.some(e=>e===null)}var y=class extends Error{name="ExecutorError";constructor(e){super(`Executor error: ${e}`)}};function Lt(t,e,n,r){let o=t,s=n(o.binding);if(s!==void 0)return e[s]??null;if(r.outerTuple&&r.outerResolver){let i=r.outerResolver(o.binding);if(i!==void 0)return r.outerTuple[i]??null}throw new y(`Column binding {tableIndex:${o.binding.tableIndex}, columnIndex:${o.binding.columnIndex}} not found in layout`)}function To(t,e,n){let r=n(t.binding);if(r===void 0){let{tableIndex:o,columnIndex:s}=t.binding;throw new y(`Aggregate binding {tableIndex:${o}, columnIndex:${s}} not found in layout`)}return e[r]??null}function ne(t){return t===!0}function $(t,e){if(t instanceof Uint8Array&&e instanceof Uint8Array){let o=Math.min(t.length,e.length);for(let s=0;s<o;s++)if(t[s]!==e[s])return t[s]-e[s];return t.length-e.length}if(t instanceof Uint8Array)return 1;if(e instanceof Uint8Array)return-1;if(typeof t=="object"&&t!==null&&typeof e=="object"&&e!==null){let o=JSON.stringify(t),s=JSON.stringify(e);return o<s?-1:o>s?1:0}if(typeof t=="number"&&typeof e=="number")return t-e;if(typeof t=="boolean"&&typeof e=="boolean")return(t?1:0)-(e?1:0);if(typeof t=="number"&&typeof e=="string"){let o=Number(e);if(!Number.isNaN(o))return t-o}if(typeof e=="number"&&typeof t=="string"){let o=Number(t);if(!Number.isNaN(o))return o-e}let n=typeof t=="object"&&t!==null?JSON.stringify(t):String(t),r=typeof e=="object"&&e!==null?JSON.stringify(e):String(e);return n<r?-1:n>r?1:0}function Ae(t,e,n){if(t===null||e===null)return null;let r=$(t,e);switch(n){case"EQUAL":return r===0;case"NOT_EQUAL":return r!==0;case"LESS":return r<0;case"GREATER":return r>0;case"LESS_EQUAL":return r<=0;case"GREATER_EQUAL":return r>=0}}function Co(t,e,n,r){let o=t,s=E(o.input,e,n,r),i=E(o.lower,e,n,r),a=E(o.upper,e,n,r);return s===null||i===null||a===null?null:$(s,i)>=0&&$(s,a)<=0}function Oo(t,e,n,r){let o=t;for(let s of o.caseChecks)if(E(s.when,e,n,r)===!0)return E(s.then,e,n,r);return o.elseExpr?E(o.elseExpr,e,n,r):null}function Lo(t,e){if(t===null)return null;switch(e){case"INTEGER":case"BIGINT":return wi(t,e);case"REAL":return vi(t);case"TEXT":return Se(t);case"BOOLEAN":return Pi(t);case"JSON":return Rn(t);case"BLOB":return Ui(t);default:return t}}function wi(t,e){if(typeof t=="boolean")return t?1:0;if(t instanceof Uint8Array)throw new y(`Cannot cast BLOB to ${e}`);let n=typeof t=="number"?Math.trunc(t):parseInt(String(t),10);if(Number.isNaN(n))throw new y(`Cannot cast '${t}' to ${e}`);return n}function vi(t){if(t instanceof Uint8Array)throw new y("Cannot cast BLOB to REAL");let e=typeof t=="number"?t:parseFloat(String(t));if(Number.isNaN(e))throw new y(`Cannot cast '${t}' to REAL`);return e}function Se(t){return t instanceof Uint8Array?_n(t):typeof t=="boolean"?t?"true":"false":typeof t=="object"&&t!==null?JSON.stringify(t):String(t)}function Rn(t){if(t instanceof Uint8Array)throw new y("Cannot cast BLOB to JSON");if(typeof t=="object"&&t!==null)return t;if(typeof t=="string")try{return JSON.parse(t)}catch{throw new y(`Cannot cast '${t}' to JSON: invalid JSON`)}if(typeof t=="number"||typeof t=="boolean")return t;throw new y(`Cannot cast '${typeof t}' value to JSON`)}function Pi(t){if(t instanceof Uint8Array)throw new y("Cannot cast BLOB to BOOLEAN");if(typeof t=="boolean")return t;let e=String(t).toLowerCase();if(e==="true"||e==="1")return!0;if(e==="false"||e==="0")return!1;throw new y(`Cannot cast '${t}' to BOOLEAN`)}function Ui(t){if(t instanceof Uint8Array)return t;if(typeof t=="string")return Di(t);throw new y(`Cannot cast ${typeof t} to BLOB`)}function _n(t){let e="";for(let n=0;n<t.length;n++)e+=t[n].toString(16).padStart(2,"0").toUpperCase();return e}function Di(t){let e=t.replace(/\s/g,"");if(e.length%2!==0||!/^[0-9a-fA-F]*$/.test(e))throw new y(`Cannot cast '${t}' to BLOB: invalid hex string`);let n=new Uint8Array(e.length/2);for(let r=0;r<e.length;r+=2)n[r/2]=parseInt(e.substring(r,r+2),16);return n}function Io(t,e,n,r){let o=t,s=E(o.child,e,n,r);return Lo(s,o.castType)}function No(t,e,n,r){let o=t,s=E(o.left,e,n,r),i=E(o.right,e,n,r);return Ae(s,i,o.comparisonType)}function Bo(t,e,n,r){let o=t;if(o.conjunctionType==="AND"){let i=!1;for(let a of o.children){let l=E(a,e,n,r);if(l===!1)return!1;l===null&&(i=!0)}return i?null:!0}let s=!1;for(let i of o.children){let a=E(i,e,n,r);if(a===!0)return!0;a===null&&(s=!0)}return s?null:!1}function wn(t){let e="^";for(let n=0;n<t.length;n++){let r=t[n];r==="%"?e+=".*":r==="_"?e+=".":/[.*+?^${}()|[\]\\]/.test(r)?e+="\\"+r:e+=r}return e+="$",new RegExp(e)}function vn(t){let e=Mi(t),n=ji(e),r=new DataView(n.buffer,n.byteOffset,n.byteLength),o=1732584193,s=4023233417,i=2562383102,a=271733878;for(let l=0;l<n.length;l+=64){let u=o,d=s,f=i,p=a;for(let h=0;h<64;h++){let T,I;h<16?(T=d&f|~d&p,I=h):h<32?(T=p&d|~p&f,I=(5*h+1)%16):h<48?(T=d^f^p,I=(3*h+5)%16):(T=f^(d|~p),I=7*h%16);let R=r.getInt32(l+I*4,!0);T=T+u+ki[h]+R|0,u=p,p=f,f=d,d=d+Fi(T,Gi[h])|0}o=o+u|0,s=s+d|0,i=i+f|0,a=a+p|0}return It(o)+It(s)+It(i)+It(a)}function Mi(t){return new TextEncoder().encode(t)}function ji(t){let e=t.length*8,n=t.length+1;for(;n%64!==56;)n++;n+=8;let r=new Uint8Array(n);r.set(t),r[t.length]=128;let o=new DataView(r.buffer);return o.setUint32(n-8,e>>>0,!0),o.setUint32(n-4,Math.floor(e/4294967296),!0),r}function Fi(t,e){return t<<e|t>>>32-e}function It(t){return(t>>>0).toString(16).padStart(8,"0").replace(/(..)(..)(..)(..)/,(e,n,r,o,s)=>s+o+r+n)}var Gi=[7,12,17,22,7,12,17,22,7,12,17,22,7,12,17,22,5,9,14,20,5,9,14,20,5,9,14,20,5,9,14,20,4,11,16,23,4,11,16,23,4,11,16,23,4,11,16,23,6,10,15,21,6,10,15,21,6,10,15,21,6,10,15,21],ki=[3614090360,3905402710,606105819,3250441966,4118548399,1200080426,2821735955,4249261313,1770035416,2336552879,4294925233,2304563134,1804603682,4254626195,2792965006,1236535329,4129170786,3225465664,643717713,3921069994,3593408605,38016083,3634488961,3889429448,568446438,3275163606,4107603335,1163531501,2850285829,4243563512,1735328473,2368359562,4294588738,2272392833,1839030562,4259657740,2763975236,1272893353,4139469664,3200236656,681279174,3936430074,3572445317,76029189,3654602809,3873151461,530742520,3299628645,4096336452,1126891415,2878612391,4237533241,1700485571,2399980690,4293915773,2240044497,1873313359,4264355552,2734768916,1309151649,4149444226,3174756917,718787259,3951481745];function Nt(t){if(t===null||typeof t!="object")return t;if(Array.isArray(t))return t.map(Nt);let e={};for(let n of Object.keys(t).sort())e[n]=Nt(t[n]);return e}function Ao(t,e,n,r){let o=t,s=o.functionName.toUpperCase(),i=[];for(let a of o.children)i.push(E(a,e,n,r));switch(s){case"UPPER":return qe(i,"UPPER",a=>a.toUpperCase());case"LOWER":return qe(i,"LOWER",a=>a.toLowerCase());case"LENGTH":return Vi(i);case"TRIM":return qe(i,"TRIM",a=>a.trim());case"LTRIM":return qe(i,"LTRIM",a=>a.trimStart());case"RTRIM":return qe(i,"RTRIM",a=>a.trimEnd());case"SUBSTR":case"SUBSTRING":return Ji(i);case"REPLACE":return $i(i);case"CONCAT":return Hi(i);case"ABS":return Pn(i,Math.abs);case"ROUND":return Ki(i);case"FLOOR":return Pn(i,Math.floor);case"CEIL":case"CEILING":return Pn(i,Math.ceil);case"COALESCE":return Qi(i);case"NULLIF":return qi(i);case"LIKE":return Wi(i);case"NOT_LIKE":return Yi(i);case"TYPEOF":return zi(i);case"MD5":return Xi(i);default:return null}}function We(t,e){if(t instanceof Uint8Array)throw new y(`Cannot apply ${e} to BLOB value`);if(typeof t=="object"&&t!==null)throw new y(`Cannot apply ${e} to JSON value`);return String(t)}function qe(t,e,n){return t[0]===null?null:n(We(t[0],e))}function Pn(t,e){return t[0]===null?null:e(t[0])}function Vi(t){return t[0]===null?null:t[0]instanceof Uint8Array?t[0].length:String(t[0]).length}function Ji(t){if(t[0]===null||t[1]===null)return null;let e=We(t[0],"SUBSTR"),n=t[1],r=t.length>=3&&t[2]!==null?t[2]:void 0;return n>0?n-=1:n<0&&(n=e.length+n),n=Math.max(0,n),r!==void 0?e.substring(n,n+r):e.substring(n)}function $i(t){return t[0]===null||t[1]===null||t[2]===null?null:We(t[0],"REPLACE").replaceAll(String(t[1]),String(t[2]))}function Hi(t){return t.some(e=>e===null)?null:t.map(e=>Se(e)).join("")}function Ki(t){if(t[0]===null)return null;let e=t.length>=2&&t[1]!==null?t[1]:0,n=Math.pow(10,e);return Math.round(t[0]*n)/n}function Qi(t){return t.find(e=>e!==null)??null}function qi(t){return t[0]===null||t[1]===null?t[0]:$(t[0],t[1])===0?null:t[0]}function Wi(t){return t[0]===null||t[1]===null?null:(We(t[0],"LIKE"),wn(String(t[1])).test(String(t[0])))}function Yi(t){return t[0]===null||t[1]===null?null:(We(t[0],"LIKE"),!wn(String(t[1])).test(String(t[0])))}function zi(t){return t[0]===null?"null":t[0]instanceof Uint8Array?"blob":typeof t[0]=="object"?"json":typeof t[0]}function Xi(t){if(t[0]===null)return null;let e=t[0];if(e instanceof Uint8Array)throw new y("Cannot apply MD5 to BLOB value");return typeof e=="object"&&e!==null?vn(JSON.stringify(Nt(e))):vn(String(e))}function So(t,e,n,r){let o=t,s=Lt(o.child,e,n,r);return Un(s,o.path)}function Un(t,e){if(t===null||typeof t!="object")return null;let n=t;for(let r of e){if(n==null)return null;if(r.type==="field"){if(typeof n!="object"||Array.isArray(n))return null;n=n[r.name]}else{if(!Array.isArray(n))return null;n=n[r.value]}}return n??null}function Ro(t,e,n,r){let o=t;switch(o.operatorType){case"IS_NULL":return E(o.children[0],e,n,r)===null;case"IS_NOT_NULL":return E(o.children[0],e,n,r)!==null;case"NOT":{let s=E(o.children[0],e,n,r);return s===null?null:!s}case"NEGATE":{let s=E(o.children[0],e,n,r);return s===null?null:-s}case"IN":return bo(o.children,e,n,r,!1);case"NOT_IN":return bo(o.children,e,n,r,!0);case"CONCAT":{let s=E(o.children[0],e,n,r),i=E(o.children[1],e,n,r);return s===null||i===null?null:Se(s)+Se(i)}case"ADD":case"SUBTRACT":case"MULTIPLY":case"DIVIDE":case"MOD":return Zi(o.operatorType,o.children,e,n,r);default:throw new y(`Unknown operator type: ${o.operatorType}`)}}function bo(t,e,n,r,o){let s=E(t[0],e,n,r);if(s===null)return null;let i=!1;for(let a=1;a<t.length;a++){let l=E(t[a],e,n,r);if(l===null){i=!0;continue}if($(s,l)===0)return!o}return i?null:o}function Zi(t,e,n,r,o){let s=E(e[0],n,r,o),i=E(e[1],n,r,o);if(s===null||i===null)return null;let a=s,l=i;switch(t){case"ADD":return a+l;case"SUBTRACT":return a-l;case"MULTIPLY":return a*l;case"DIVIDE":return l===0?null:a/l;case"MOD":return l===0?null:a%l;default:return null}}function _o(t,e){let n=e.params;if(!n)throw new y("No parameters provided for parameterized query");if(t.index>=n.length)throw new y(`Parameter $${t.index+1} not provided (${n.length} params given)`);return n[t.index]}function vo(t,e,n,r){let o=t;if(o.subqueryType==="EXISTS"||o.subqueryType==="NOT_EXISTS"){let i=r.executeSubplan(o.subplan,e,n,1);return o.subqueryType==="EXISTS"?i.length>0:i.length===0}let s=r.executeSubplan(o.subplan,e,n);switch(o.subqueryType){case"SCALAR":return ea(s);case"ANY":return wo(o,s,e,n,r,!1);case"ALL":return wo(o,s,e,n,r,!0)}}function ea(t){if(t.length===0)return null;if(t.length>1)throw new y("Scalar subquery returned more than one row");return t[0][0]??null}function wo(t,e,n,r,o,s){if(!t.child||!t.comparisonType)return null;let i=E(t.child,n,r,o);if(i===null)return null;if(e.length===0)return s;let a=!1;for(let l of e){let u=Ae(i,l[0],t.comparisonType);if(u===null){a=!0;continue}if(s&&u!==!0)return!1;if(!s&&u===!0)return!0}return a?null:s}function E(t,e,n,r){switch(t.expressionClass){case"BOUND_COLUMN_REF":return Lt(t,e,n,r);case"BOUND_CONSTANT":return t.value;case"BOUND_PARAMETER":return _o(t,r);case"BOUND_COMPARISON":return No(t,e,n,r);case"BOUND_CONJUNCTION":return Bo(t,e,n,r);case"BOUND_OPERATOR":return Ro(t,e,n,r);case"BOUND_BETWEEN":return Co(t,e,n,r);case"BOUND_FUNCTION":return Ao(t,e,n,r);case"BOUND_AGGREGATE":return To(t,e,n);case"BOUND_SUBQUERY":return vo(t,e,n,r);case"BOUND_CASE":return Oo(t,e,n,r);case"BOUND_CAST":return Io(t,e,n,r);case"BOUND_JSON_ACCESS":return So(t,e,n,r)}}function Dn(t,e,n){switch(t.expressionClass){case"BOUND_COLUMN_REF":{let r=e(t.binding);if(r!==void 0)return o=>o[r]??null;break}case"BOUND_CONSTANT":return()=>t.value;case"BOUND_JSON_ACCESS":{let r=t,o=e(r.child.binding);if(o!==void 0){let s=r.path;return i=>Un(i[o],s)}break}}return r=>E(t,r,e,n)}function he(t,e,n){let r=Dn(t.expression,e,n),{comparisonType:o}=t,s;if(t.constant.expressionClass==="BOUND_CONSTANT"){let i=t.constant.value;s=()=>i}else{let i=t.constant.index;s=a=>a?.[i]??null}return{getValue:r,comparisonType:o,getConstant:s}}function A(t){let e=new Map;for(let n=0;n<t.length;n++)e.set(`${t[n].tableIndex}:${t[n].columnIndex}`,n);return n=>e.get(`${n.tableIndex}:${n.columnIndex}`)}var Po=new WeakMap;function Mn(t,e){let n=Po.get(e);if(n)return n;let r=e.expressions.map(a=>me(a,t,0)),o=t.columns.map((a,l)=>({tableIndex:0,columnIndex:l})),s=A(o),i={executeSubplan:()=>[],params:[]};return n=r.map(a=>Dn(a,s,i)),Po.set(e,n),n}function jn(t,e){return e.columns.map(n=>t[n.name]??null)}function Fn(t,e){return e.map(n=>{let r=n(t);return ta(r),r})}function ta(t){if(t!==null&&typeof t=="object")throw new Error("Index key must be a scalar value, got object")}function Bt(t,e,n){return Fn(jn(t,e),Mn(e,n))}function Ye(t,e,n,r,o){if(!r||!o)return;let s=r.getTable(t);if(!s)return;let i=jn(e,s);for(let a of r.getTableIndexes(t))o.insert(a.name,Fn(i,Mn(s,a)),n)}function be(t,e,n,r,o){if(!r||!o)return;let s=r.getTable(t);if(!s)return;let i=jn(e,s);for(let a of r.getTableIndexes(t))o.delete(a.name,Fn(i,Mn(s,a)),n)}var At={rows:[],rowsAffected:0,catalogChanges:[]};function Gn(t,e,n,r){if(e.hasTable(t.schema.name)){if(t.ifNotExists)return{...At};throw new y(`Table "${t.schema.name}" already exists`)}let o=n.createTable(),i=[{type:"CREATE_TABLE",schema:{...t.schema,metaPageNo:o}}],a=t.schema.columns.filter(l=>l.primaryKey);if(a.length>0&&r){let l=`__pk_${t.schema.name}`;if(e.hasIndex(l))throw new y(`Internal index "${l}" already exists`);let u=r.bulkLoad(l,[],!0),d={name:l,tableName:t.schema.name,expressions:a.map(f=>({type:"column",name:f.name,returnType:f.type})),unique:!0,metaPageNo:u};i.push({type:"CREATE_INDEX",index:d})}return{...At,catalogChanges:i}}function kn(t,e,n,r){if(e.hasIndex(t.index.name)){if(t.ifNotExists)return{...At};throw new y(`Index "${t.index.name}" already exists`)}let o=e.getTable(t.index.tableName);if(!o)throw new y(`Table "${t.index.tableName}" not found`);let s=[];for(let{rowId:a,row:l}of n.scanTable(t.index.tableName))s.push({key:Bt(l,o,t.index),rowId:a});s.sort((a,l)=>{let u=oe(a.key,l.key);return u!==0?u:a.rowId-l.rowId});let i=r.bulkLoad(t.index.name,s,t.index.unique);return{...At,catalogChanges:[{type:"CREATE_INDEX",index:{...t.index,metaPageNo:i}}]}}var ze={rows:[],rowsAffected:0,catalogChanges:[]};function Vn(t,e){let n=e.getTable(t.tableName);if(!n)throw new y(`Table "${t.tableName}" not found`);let r;if(t.action.type==="ADD_COLUMN")r=[...n.columns,t.action.column];else{let s=t.action.columnName.toLowerCase();r=n.columns.filter(i=>i.name.toLowerCase()!==s)}let o={...n,columns:r};return{...ze,catalogChanges:[{type:"ALTER_TABLE",name:t.tableName,before:n,after:o}]}}function Jn(t,e,n,r){if(t.dropType==="TABLE"){let s=e.getTable(t.name);if(!s){if(t.ifExists)return{...ze};throw new y(`Table "${t.name}" not found`)}n.deleteTableData(t.name);for(let i of e.getTableIndexes(t.name))r.dropIndex(i.name);return{...ze,catalogChanges:[{type:"DROP_TABLE",name:t.name,schema:s}]}}let o=e.getIndex(t.name);if(!o){if(t.ifExists)return{...ze};throw new y(`Index "${t.name}" not found`)}return r.dropIndex(t.name),{...ze,catalogChanges:[{type:"DROP_INDEX",name:t.name,index:o}]}}function Re(t){return t===null?"\0NULL\0":t instanceof Uint8Array?`x:${_n(t)}`:typeof t=="object"?`j:${JSON.stringify(t)}`:typeof t=="string"?`s:${t}`:typeof t=="number"?`n:${t}`:`b:${t}`}var z=500,$n=2e3;function St(t,e){return t.expressionClass==="BOUND_CONSTANT"?t.value:e?.[t.index]??null}function ue(t){return t.map(Re).join("\0")}function _e(t,e,n){return e.map(r=>{let o=n.columns[r],s=t[o.name];return s!==void 0?s:o.defaultValue??null})}function Ee(t,e,n){for(let r of e){let o=r.getValue(t),s=r.getConstant(n);if(Ae(o,s,r.comparisonType)!==!0)return!1}return!0}function v(t){let e=[];for(;;){let n=t.next();if(!n)break;for(let r of n)e.push(r)}return e}var bt=class{constructor(e,n,r){this.child=e;this.op=n;this.ctx=r;this.childResolver=A(e.getLayout()),this.layout=n.columnBindings}child;op;ctx;layout;childResolver;emitted=!1;getLayout(){return this.layout}next(){if(this.emitted)return null;this.emitted=!0;let e=v(this.child),n=this.buildGroups(e),r=this.finalize(n);return this.op.havingExpression?this.applyHaving(r):r.length>0?r:null}reset(){this.emitted=!1,this.child.reset()}buildGroups(e){let n=new Map;if(e.length===0&&this.op.groups.length===0)return n.set("",{groupValues:[],aggs:this.newAggStates()}),n;for(let r of e){let{key:o,values:s}=this.computeGroupKey(r),i=n.get(o);i||(i={groupValues:s,aggs:this.newAggStates()},n.set(o,i));for(let a=0;a<this.op.expressions.length;a++)this.updateAgg(i.aggs[a],this.op.expressions[a],r)}return n}computeGroupKey(e){let n=[];for(let r of this.op.groups)n.push(E(r,e,this.childResolver,this.ctx));return{key:ue(n),values:n}}newAggStates(){return this.op.expressions.map(()=>({count:0,sum:0,min:null,max:null,distinctSet:null}))}updateAgg(e,n,r){if(n.isStar){e.count++;return}let o=E(n.children[0],r,this.childResolver,this.ctx);if(o!==null){if(n.distinct){e.distinctSet||(e.distinctSet=new Set);let s=Re(o);if(e.distinctSet.has(s))return;e.distinctSet.add(s)}e.count++,typeof o=="number"&&(e.sum+=o),(e.min===null||$(o,e.min)<0)&&(e.min=o),(e.max===null||$(o,e.max)>0)&&(e.max=o)}}finalize(e){let n=[];for(let{groupValues:r,aggs:o}of e.values())n.push([...r,...o.map((s,i)=>this.finalizeAgg(s,this.op.expressions[i]))]);return n}finalizeAgg(e,n){switch(n.functionName){case"COUNT":return e.count;case"SUM":return e.count===0?null:e.sum;case"AVG":return e.count===0?null:e.sum/e.count;case"MIN":return e.min;case"MAX":return e.max;default:return null}}applyHaving(e){let n=A(this.layout),r=[];for(let o of e){let s=E(this.op.havingExpression,o,n,this.ctx);ne(s)&&r.push(o)}return r.length>0?r:null}};var Rt=class{constructor(e,n,r){this.agg=e;this.indexManager=n;this.hint=r;this.layout=e.columnBindings}agg;indexManager;hint;emitted=!1;layout;getLayout(){return this.layout}next(){if(this.emitted)return null;this.emitted=!0;let e=this.hint.functionName==="MIN"?this.indexManager.first(this.hint.indexDef.name):this.indexManager.last(this.hint.indexDef.name);return[[e?e.key[this.hint.keyPosition]:null]]}reset(){this.emitted=!1}};function Uo(t,e){let n=t;return n.minMaxHint&&e.indexManager?new Rt(n,e.indexManager,n.minMaxHint):new bt(e.plan(n.children[0]),n,e.ctx)}var _t=class{constructor(e,n,r,o){this.cteDefinition=e;this.mainPlan=n;this.cteIndex=r;this.cteCache=o}cteDefinition;mainPlan;cteIndex;cteCache;materialized=!1;getLayout(){return this.mainPlan.getLayout()}next(){if(!this.materialized){let e=v(this.cteDefinition);this.cteCache.set(this.cteIndex,{tuples:e,layout:this.cteDefinition.getLayout()}),this.materialized=!0}return this.mainPlan.next()}reset(){this.materialized=!1,this.cteCache.delete(this.cteIndex),this.cteDefinition.reset(),this.mainPlan.reset()}},wt=class{constructor(e,n){this.op=e;this.cteCache=n;this.layout=e.columnBindings}op;cteCache;offset=0;layout;getLayout(){return this.layout}next(){let e=this.cteCache.get(this.op.cteIndex);if(!e)throw new y(`CTE '${this.op.cteName}' not materialized yet`);if(this.offset>=e.tuples.length)return null;let n=e.tuples.slice(this.offset,this.offset+z);return this.offset+=n.length,n}reset(){this.offset=0}},Do=1e3,vt=class{constructor(e,n,r,o,s){this.anchor=e;this.recursive=n;this.cteIndex=r;this.cteCache=o;this.isUnionAll=s}anchor;recursive;cteIndex;cteCache;isUnionAll;result=null;offset=0;getLayout(){return this.anchor.getLayout()}next(){if(this.result||(this.result=this.execute()),this.offset>=this.result.length)return null;let e=this.result.slice(this.offset,this.offset+z);return this.offset+=e.length,e}reset(){this.result=null,this.offset=0,this.cteCache.delete(this.cteIndex),this.anchor.reset(),this.recursive.reset()}execute(){let e=[],n=this.isUnionAll?null:new Set,r=this.anchor.getLayout(),o=v(this.anchor),s=[];for(let i of o){if(n){let a=ue(i);if(n.has(a))continue;n.add(a)}e.push(i),s.push(i)}for(let i=0;i<Do&&s.length!==0;i++){this.cteCache.set(this.cteIndex,{tuples:s,layout:r}),this.recursive.reset();let a=v(this.recursive);if(a.length===0){s=[];break}s=[];for(let l of a){if(n){let u=ue(l);if(n.has(u))continue;n.add(u)}e.push(l),s.push(l)}}if(s.length>0)throw new y(`Recursive CTE exceeded maximum iteration limit (${Do})`);return this.cteCache.set(this.cteIndex,{tuples:e,layout:r}),e}};function Mo(t,e){let n=t;return new _t(e.plan(n.children[0]),e.plan(n.children[1]),n.cteIndex,e.cteCache)}function jo(t,e){let n=t;return new vt(e.plan(n.children[0]),e.plan(n.children[1]),n.cteIndex,e.cteCache,n.isUnionAll)}function Fo(t,e){return new wt(t,e.cteCache)}var Pt=class{constructor(e,n,r){this.child=e;this.condition=n;this.ctx=r;this.resolver=A(e.getLayout())}child;condition;ctx;resolver;getLayout(){return this.child.getLayout()}next(){for(;;){let e=this.child.next();if(!e)return null;let n=[];for(let r of e){let o=E(this.condition,r,this.resolver,this.ctx);ne(o)&&n.push(r)}if(n.length>0)return n}}reset(){this.child.reset()}};function Go(t,e){let n=t,r=n.expressions.length===1?n.expressions[0]:{expressionClass:"BOUND_CONJUNCTION",conjunctionType:"AND",children:n.expressions,returnType:"BOOLEAN"};return new Pt(e.plan(n.children[0]),r,e.ctx)}var Ut=class{constructor(e,n,r,o,s,i,a){this.op=e;this.rowManager=n;this.indexManager=r;this.indexDef=o;this.indexPredicates=s;this.ctx=a;this.layout=e.columnBindings;let l=A(this.layout);this.compiledResiduals=i.map(u=>he(u,l,a))}op;rowManager;indexManager;indexDef;indexPredicates;ctx;rowIds=null;cursor=0;done=!1;layout;compiledResiduals;getLayout(){return this.layout}next(){if(this.done)return null;for(this.rowIds===null&&(this.rowIds=this.fetchRowIds());this.cursor<this.rowIds.length;){let e=[];for(;this.cursor<this.rowIds.length&&e.length<z;){let n=this.rowIds[this.cursor++],r=this.rowManager.readRow(this.op.tableName,n);if(r===null)continue;let o=_e(r,this.op.columnIds,this.op.schema);Ee(o,this.compiledResiduals,this.ctx.params)&&e.push(o)}if(e.length>0)return e}return this.done=!0,null}reset(){this.rowIds=null,this.cursor=0,this.done=!1}fetchRowIds(){let e=this.indexPredicates.map(n=>({columnPosition:n.columnPosition,comparisonType:n.comparisonType,value:St(n.value,this.ctx.params)}));return this.indexManager.search(this.indexDef.name,e)}};var Dt=class{constructor(e,n,r,o,s){this.op=e;this.rowManager=n;this.indexManager=r;this.hint=o;this.ctx=s;this.layout=e.columnBindings,this.resolver=A(this.layout),this.residualExpr=o.originalFilter}op;rowManager;indexManager;hint;ctx;rowIds=null;cursor=0;done=!1;layout;resolver;residualExpr;getLayout(){return this.layout}next(){if(this.done)return null;for(this.rowIds===null&&(this.rowIds=this.fetchUnionRowIds());this.cursor<this.rowIds.length;){let e=[];for(;this.cursor<this.rowIds.length&&e.length<z;){let n=this.rowIds[this.cursor++],r=this.rowManager.readRow(this.op.tableName,n);if(r===null)continue;let o=_e(r,this.op.columnIds,this.op.schema),s=E(this.residualExpr,o,this.resolver,this.ctx);ne(s)&&e.push(o)}if(e.length>0)return e}return this.done=!0,null}reset(){this.rowIds=null,this.cursor=0,this.done=!1}fetchUnionRowIds(){let e=new Set;for(let n of this.hint.branches){let r=n.predicates.map(s=>({columnPosition:s.columnPosition,comparisonType:s.comparisonType,value:St(s.value,this.ctx.params)})),o=this.indexManager.search(n.indexDef.name,r);for(let s of o)e.add(s)}return[...e].sort((n,r)=>n-r)}};var Mt=class{constructor(e,n,r){this.op=e;this.rowManager=n;this.ctx=r;this.layout=e.columnBindings;let o=A(this.layout);this.compiledFilters=e.tableFilters.map(s=>he(s,o,r))}op;rowManager;ctx;iterator=null;done=!1;layout;compiledFilters;getLayout(){return this.layout}next(){if(this.op.tableName==="__empty")return this.done?null:(this.done=!0,[[]]);for(this.iterator||(this.iterator=this.rowManager.scanTable(this.op.tableName)[Symbol.iterator]());!this.done;){let e=[];for(let n=0;n<z;n++){let{value:r,done:o}=this.iterator.next();if(o){this.done=!0;break}let s=_e(r.row,this.op.columnIds,this.op.schema);Ee(s,this.compiledFilters,this.ctx.params)&&e.push(s)}if(e.length>0)return e}return null}reset(){this.iterator=null,this.done=!1}},jt=class{constructor(e,n,r){this.op=e;this.childOp=n;this.ctx=r;this.layout=e.columnBindings;let o=A(this.layout);this.compiledFilters=e.tableFilters.map(s=>he(s,o,r))}op;childOp;ctx;done=!1;layout;compiledFilters;getLayout(){return this.layout}next(){for(;!this.done;){let e=this.childOp.next();if(!e)return this.done=!0,null;let n=[];for(let r of e){let o=this.op.columnIds.map(s=>r[s]??null);Ee(o,this.compiledFilters,this.ctx.params)&&n.push(o)}if(n.length>0)return n}return null}reset(){this.done=!1,this.childOp.reset()}};function ko(t,e){let n=t;if(n.indexHint&&e.indexManager){if(n.indexHint.kind==="union")return new Dt(n,e.rowManager,e.indexManager,n.indexHint,e.ctx);if(n.indexHint.kind==="scan")return new Ut(n,e.rowManager,e.indexManager,n.indexHint.indexDef,n.indexHint.predicates,n.indexHint.residualFilters,e.ctx)}return n.children.length>0?new jt(n,e.plan(n.children[0]),e.ctx):new Mt(n,e.rowManager,e.ctx)}var Ft=class{constructor(e,n,r,o){this.probe=e;this.build=n;this.op=r;this.ctx=o;this.layout=r.joinType==="SEMI"||r.joinType==="ANTI"?[...e.getLayout()]:[...e.getLayout(),...n.getLayout()],this.probeResolver=A(e.getLayout()),this.buildResolver=A(n.getLayout()),this.buildNullTuple=new Array(n.getLayout().length).fill(null)}probe;build;op;ctx;layout;probeResolver;buildResolver;buildNullTuple;hashTable=null;emitter=null;getLayout(){return this.layout}next(){this.hashTable||this.buildHashTable(),this.emitter||(this.emitter=this.op.joinType==="SEMI"||this.op.joinType==="ANTI"?this.emitSemiAnti():this.emitMatches());let e=[];for(let n=0;n<$n;n++){let{value:r,done:o}=this.emitter.next();if(o)break;e.push(r)}return e.length>0?e:null}reset(){this.hashTable=null,this.emitter=null,this.probe.reset(),this.build.reset()}buildHashTable(){this.hashTable=new Map;let e=v(this.build);for(let n of e){let r=this.evalKey(n,this.buildResolver,"right");if(r===null)continue;let o=this.hashTable.get(r);o?o.push(n):this.hashTable.set(r,[n])}}*emitMatches(){for(let e of this.probeTuples()){let n=this.evalKey(e,this.probeResolver,"left");if(n===null){this.op.joinType==="LEFT"&&(yield[...e,...this.buildNullTuple]);continue}let r=this.hashTable.get(n);if(r&&r.length>0)for(let o of r)yield[...e,...o];else this.op.joinType==="LEFT"&&(yield[...e,...this.buildNullTuple])}}*emitSemiAnti(){let e=this.op.joinType==="SEMI";for(let n of this.probeTuples()){let r=this.evalKey(n,this.probeResolver,"left"),o=r!==null&&(this.hashTable.get(r)?.length??0)>0;(e?o:!o)&&(yield n)}}*probeTuples(){for(;;){let e=this.probe.next();if(!e)return;yield*e}}evalKey(e,n,r){let o=[];for(let s of this.op.conditions){let i=r==="left"?s.left:s.right,a=E(i,e,n,this.ctx);if(a===null)return null;o.push(Re(a))}return o.join("\0")}},Gt=class{constructor(e,n){this.left=e;this.right=n;this.layout=[...e.getLayout(),...n.getLayout()]}left;right;layout;rightTuples=null;emitter=null;getLayout(){return this.layout}next(){if(!this.rightTuples&&(this.rightTuples=v(this.right),this.rightTuples.length===0))return null;this.emitter||(this.emitter=this.emitCrossProduct());let e=[];for(let n=0;n<$n;n++){let{value:r,done:o}=this.emitter.next();if(o)break;e.push(r)}return e.length>0?e:null}reset(){this.rightTuples=null,this.emitter=null,this.left.reset(),this.right.reset()}*emitCrossProduct(){for(;;){let e=this.left.next();if(!e)return;for(let n of e)for(let r of this.rightTuples)yield[...n,...r]}}};function Vo(t,e){let n=t;return new Ft(e.plan(n.children[0]),e.plan(n.children[1]),n,e.ctx)}function Jo(t,e){return new Gt(e.plan(t.children[0]),e.plan(t.children[1]))}var kt=class{constructor(e,n){this.child=e;this.op=n;this.maxRows=n.limitVal??1/0}child;op;skipped=0;emitted=0;maxRows;getLayout(){return this.child.getLayout()}next(){if(this.emitted>=this.maxRows)return null;for(;;){let e=this.child.next();if(!e)return null;let n=0;if(this.skipped<this.op.offsetVal){let i=Math.min(e.length,this.op.offsetVal-this.skipped);this.skipped+=i,n=i}if(n>=e.length)continue;let r=this.maxRows-this.emitted,o=Math.min(e.length,n+r),s=e.slice(n,o);return this.emitted+=s.length,s.length>0?s:null}}reset(){this.skipped=0,this.emitted=0,this.child.reset()}};function $o(t,e){let n=t;return new kt(e.plan(n.children[0]),n)}function Ho(t,e,n){let r=t.length;for(;;){let o=e,s=2*e+1,i=2*e+2;if(s<r&&n(t[s],t[o])>0&&(o=s),i<r&&n(t[i],t[o])>0&&(o=i),o===e)break;[t[e],t[o]]=[t[o],t[e]],e=o}}function na(t,e,n){for(;e>0;){let r=Math.floor((e-1)/2);if(n(t[e],t[r])<=0)break;[t[e],t[r]]=[t[r],t[e]],e=r}}function ra(t,e){let n=[];for(;t.length>0;)n.push(t[0]),t[0]=t[t.length-1],t.pop(),t.length>0&&Ho(t,0,e);return n.reverse(),n}var Vt=class{constructor(e,n,r){this.child=e;this.op=n;this.ctx=r}child;op;ctx;sorted=null;offset=0;getLayout(){return this.child.getLayout()}next(){if(this.sorted||(this.sorted=this.op.topN!==void 0?this.topKSort():this.sortAll()),this.offset>=this.sorted.length)return null;let e=this.sorted.slice(this.offset,this.offset+z);return this.offset+=e.length,e}reset(){this.sorted=null,this.offset=0,this.child.reset()}compare(e,n){for(let r=0;r<this.op.orders.length;r++){let o=this.op.orders[r],s=e.keys[r],i=n.keys[r];if(s===null&&i===null)continue;if(s===null)return o.nullOrder==="NULLS_FIRST"?-1:1;if(i===null)return o.nullOrder==="NULLS_FIRST"?1:-1;let a=$(s,i);if(a!==0)return o.orderType==="DESCENDING"?-a:a}return 0}computeKeys(e,n){let r=[];for(let o of this.op.orders)r.push(E(o.expression,e,n,this.ctx));return{tuple:e,keys:r}}sortAll(){let e=v(this.child),n=A(this.child.getLayout()),r=e.map(o=>this.computeKeys(o,n));return r.sort((o,s)=>this.compare(o,s)),r.map(o=>o.tuple)}topKSort(){let e=this.op.topN,n=A(this.child.getLayout()),r=(s,i)=>this.compare(s,i),o=[];for(;;){let s=this.child.next();if(!s)break;for(let i of s){let a=this.computeKeys(i,n);o.length<e?(o.push(a),na(o,o.length-1,r)):r(a,o[0])<0&&(o[0]=a,Ho(o,0,r))}}return ra(o,r).map(s=>s.tuple)}};function Ko(t,e){let n=t;return new Vt(e.plan(n.children[0]),n,e.ctx)}var Jt=class{constructor(e,n,r){this.child=e;this.op=n;this.ctx=r;this.resolver=A(e.getLayout()),this.layout=n.columnBindings}child;op;ctx;resolver;layout;getLayout(){return this.layout}next(){let e=this.child.next();if(!e)return null;let n=[];for(let r of e){let o=[];for(let s of this.op.expressions)o.push(E(s,r,this.resolver,this.ctx));n.push(o)}return n}reset(){this.child.reset()}};function Qo(t,e){let n=t;return new Jt(e.plan(n.children[0]),n,e.ctx)}var $t=class{constructor(e){this.child=e}child;seen=new Set;getLayout(){return this.child.getLayout()}next(){for(;;){let e=this.child.next();if(!e)return null;let n=[];for(let r of e){let o=ue(r);this.seen.has(o)||(this.seen.add(o),n.push(r))}if(n.length>0)return n}}reset(){this.seen.clear(),this.child.reset()}},Ht=class{constructor(e,n,r){this.left=e;this.right=n;this.all=r;this.seen=r?null:new Set}left;right;all;leftDone=!1;seen;getLayout(){return this.left.getLayout()}next(){for(;!this.leftDone;){let e=this.left.next();if(!e){this.leftDone=!0;break}let n=this.dedup(e);if(n)return n}for(;;){let e=this.right.next();if(!e)return null;let n=this.dedup(e);if(n)return n}}reset(){this.leftDone=!1,this.seen?.clear(),this.left.reset(),this.right.reset()}dedup(e){if(!this.seen)return e;let n=[];for(let r of e){let o=ue(r);this.seen.has(o)||(this.seen.add(o),n.push(r))}return n.length>0?n:null}};function qo(t,e){return new $t(e.plan(t.children[0]))}function Wo(t,e){let n=t;return new Ht(e.plan(n.children[0]),e.plan(n.children[1]),n.all)}var oa=new Map([["LOGICAL_GET",ko],["LOGICAL_FILTER",Go],["LOGICAL_PROJECTION",Qo],["LOGICAL_AGGREGATE_AND_GROUP_BY",Uo],["LOGICAL_COMPARISON_JOIN",Vo],["LOGICAL_CROSS_PRODUCT",Jo],["LOGICAL_ORDER_BY",Ko],["LOGICAL_LIMIT",$o],["LOGICAL_DISTINCT",qo],["LOGICAL_UNION",Wo],["LOGICAL_MATERIALIZED_CTE",Mo],["LOGICAL_RECURSIVE_CTE",jo],["LOGICAL_CTE_REF",Fo]]);function we(t,e,n,r,o){let s={rowManager:e,cteCache:n,ctx:r,indexManager:o,plan:a=>we(a,e,n,r,o)},i=oa.get(t.type);if(!i)throw new y(`Cannot create physical plan for ${t.type} \u2014 use executor directly for DML/DDL`);return i(t,s)}function ve(t,e,n){return e.columns[n].type==="JSON"&&typeof t=="string"?Rn(t):t}function Hn(t,e,n,r,o){let s={op:t,rowManager:e,ctx:n,catalog:r,indexManager:o},i=t.children.length>0?ia(s):sa(s);return aa(s,i)}function sa(t){let{op:e,ctx:n}=t,r=e.columns.length,o=e.expressions.length/r,s=[],i=A([]),a=e.columns.map(d=>e.schema.columns[d].name),l=zo(e.schema),u=[];for(let d=0;d<o;d++){let f={...l};for(let p=0;p<r;p++){let h=e.expressions[d*r+p],T=E(h,s,i,n);f[a[p]]=ve(T,e.schema,e.columns[p])}u.push(f)}return u}function ia(t){let{op:e,rowManager:n,ctx:r}=t,o=new Map,s=we(e.children[0],n,o,r),i=v(s),a=zo(e.schema);return i.map(l=>{let u={...a};for(let d=0;d<e.columns.length;d++){let f=l[d]??null;u[e.schema.columns[e.columns[d]].name]=ve(f,e.schema,e.columns[d])}return u})}function aa(t,e){let n=0,r=!1;for(let o of e)t.catalog&&la(o,t.op.tableName,t.catalog)&&(r=!0),ca(t,o)&&n++;return{rows:[],rowsAffected:n,catalogChanges:[],catalogDirty:r}}function la(t,e,n){let r=n.getTable(e);if(!r)return!1;let o=r.columns.find(a=>a.autoIncrement);if(!o)return!1;let s=r.autoIncrementSeq??0,i=t[o.name];if(i==null){let a=s+1;return t[o.name]=a,n.updateTable({...r,autoIncrementSeq:a}),!0}return typeof i=="number"&&i>s?(n.updateTable({...r,autoIncrementSeq:i}),!0):!1}function Yo(t,e){let n=t.rowManager.prepareInsert(t.op.tableName,e);Ye(t.op.tableName,e,n,t.catalog,t.indexManager)}function ca(t,e){if(!t.op.onConflict)return Yo(t,e),!0;let n=t.op.onConflict,r=n.conflictColumns.map(s=>t.op.schema.columns[s].name),o=ua(t,e,r);return o?n.action==="NOTHING"?!1:ma(t,n,o.rowId,o.row,e):(Yo(t,e),!0)}function ua(t,e,n){if(t.catalog&&t.indexManager){let r=pa(t.op.tableName,e,n,t.catalog,t.indexManager,t.rowManager);if(r!==void 0)return r}return da(t.op.tableName,e,n,t.rowManager)}function pa(t,e,n,r,o,s){let i=r.getTable(t);if(i)for(let a of r.getTableIndexes(t)){if(!a.unique||!a.expressions.every(T=>T.type==="column"))continue;let d=[...a.expressions.flatMap(j)].map(T=>T.toLowerCase()).sort(),f=[...n].map(T=>T.toLowerCase()).sort();if(d.length!==f.length||!d.every((T,I)=>T===f[I]))continue;let p=Bt(e,i,a);if(p.some(T=>T===null))return null;let h=o.search(a.name,p.map((T,I)=>({columnPosition:I,comparisonType:"EQUAL",value:T})));if(h.length>0){let T=s.readRow(t,h[0]);if(T)return{rowId:h[0],row:T}}return null}}function da(t,e,n,r){for(let{rowId:o,row:s}of r.scanTable(t))if(n.every(a=>{let l=s[a]??null,u=e[a]??null;return l===null||u===null?!1:l===u}))return{rowId:o,row:s};return null}function ma(t,e,n,r,o){let s=t.op.schema,i=s.columns.length,a=new Array(i*2);for(let p=0;p<i;p++){let h=s.columns[p].name;a[p]=r[h]??null,a[i+p]=o[h]??null}let l=[];for(let p=0;p<i;p++)l.push({tableIndex:e.targetTableIndex,columnIndex:p});for(let p=0;p<i;p++)l.push({tableIndex:e.excludedTableIndex,columnIndex:p});let u=A(l);if(e.whereExpression){let p=E(e.whereExpression,a,u,t.ctx);if(!ne(p))return!1}let d={...r};for(let p=0;p<e.updateColumns.length;p++){let h=e.updateColumns[p],T=E(e.updateExpressions[p],a,u,t.ctx);d[s.columns[h].name]=ve(T,s,h)}be(t.op.tableName,r,n,t.catalog,t.indexManager);let f=t.rowManager.prepareUpdate(t.op.tableName,n,d);return Ye(t.op.tableName,d,f,t.catalog,t.indexManager),!0}function zo(t){let e={};for(let n of t.columns)e[n.name]=n.defaultValue;return e}function Kt(t,e){let{get:n,condition:r}=Xo(t),o=n.schema.columns.map((a,l)=>({tableIndex:n.tableIndex,columnIndex:l})),s=A(o),i=n.tableFilters.map(a=>he(a,s,e));return{get:n,condition:r,layout:o,resolver:s,compiledFilters:i}}function Xo(t){if(t.type==="LOGICAL_FILTER"){let e=t,n=Xo(e.children[0]),r=e.expressions.length===1?e.expressions[0]:{expressionClass:"BOUND_CONJUNCTION",conjunctionType:"AND",children:e.expressions,returnType:"BOOLEAN"};if(n.condition){let o={expressionClass:"BOUND_CONJUNCTION",conjunctionType:"AND",children:[r,n.condition],returnType:"BOOLEAN"};return{get:n.get,condition:o}}return{get:n.get,condition:r}}if(t.type==="LOGICAL_GET")return{get:t,condition:null};throw new y(`Unexpected node ${t.type} in DML scan tree`)}function Qt(t,e){return e.schema.columns.map(n=>{let r=t[n.name];return r!==void 0?r:n.defaultValue??null})}function qt(t,e,n){if(!Ee(t,e.compiledFilters,n.params))return!1;if(e.condition){let r=E(e.condition,t,e.resolver,n);if(!ne(r))return!1}return!0}function Kn(t,e,n,r,o){let s=Kt(t.children[0],n),i=[];for(let{rowId:a,row:l}of e.scanTable(t.tableName)){let u=Qt(l,s.get);if(!qt(u,s,n))continue;let d={...l};for(let f=0;f<t.updateColumns.length;f++){let p=t.updateColumns[f],h=E(t.expressions[f],u,s.resolver,n);d[t.schema.columns[p].name]=ve(h,t.schema,p)}i.push({rowId:a,oldRow:l,newRow:d})}for(let{rowId:a,oldRow:l,newRow:u}of i){be(t.tableName,l,a,r,o);let d=e.prepareUpdate(t.tableName,a,u);Ye(t.tableName,u,d,r,o)}return{rows:[],rowsAffected:i.length,catalogChanges:[]}}function Qn(t,e,n,r,o){let s=Kt(t.children[0],n),i=[];for(let{rowId:a,row:l}of e.scanTable(t.tableName)){let u=Qt(l,s.get);qt(u,s,n)&&i.push({rowId:a,row:l})}for(let{rowId:a,row:l}of i)be(t.tableName,l,a,r,o),e.prepareDelete(t.tableName,a);return{rows:[],rowsAffected:i.length,catalogChanges:[]}}function Zo(t){let e=qn(t);return e?e.expressions.map((n,r)=>{if(e.aliases[r])return e.aliases[r];if(n.expressionClass==="BOUND_COLUMN_REF")return n.columnName;if(n.expressionClass==="BOUND_AGGREGATE"){let o=n;return o.isStar?`${o.functionName.toLowerCase()}_star`:`${o.functionName.toLowerCase()}_${r}`}return`column${r}`}):t.types.map((n,r)=>`column${r}`)}function qn(t){if(t.type==="LOGICAL_PROJECTION")return t;if(t.type==="LOGICAL_MATERIALIZED_CTE")return qn(t.children[1]);for(let e of t.children){let n=qn(e);if(n)return n}return null}function es(t,e){return t.map(n=>{let r={};for(let o=0;o<e.length;o++)r[e[o]]=n[o]??null;return r})}function Wn(t,e,n,r,o){return{executeSubplan:(s,i,a,l)=>fa(s,t,e,i,a,l,n),outerTuple:r,outerResolver:o,params:n}}function ts(t,e,n,r){let s=we(t,e,new Map,n,r),i=v(s),a=Zo(t);return{rows:es(i,a),rowsAffected:0,catalogChanges:[]}}function fa(t,e,n,r,o,s,i){let a=Wn(e,n,i,r,o),u=we(t,e,new Map,a);if(s===void 0)return v(u);let d=[];for(;d.length<s;){let f=u.next();if(!f)break;for(let p of f)if(d.push(p),d.length>=s)break}return d}var ha=new Map([["LOGICAL_CREATE_TABLE",(t,e,n,r,o)=>Gn(t,n,e,o)],["LOGICAL_CREATE_INDEX",(t,e,n,r,o)=>kn(t,n,e,o)],["LOGICAL_ALTER_TABLE",(t,e,n)=>Vn(t,n)],["LOGICAL_DROP",(t,e,n,r,o)=>Jn(t,n,e,o)],["LOGICAL_INSERT",(t,e,n,r,o)=>Hn(t,e,r,n,o)],["LOGICAL_UPDATE",(t,e,n,r,o)=>Kn(t,e,r,n,o)],["LOGICAL_DELETE",(t,e,n,r,o)=>Qn(t,e,r,n,o)]]);function ns(t,e,n,r,o){let s=ha.get(t.type),i=Wn(e,n,o);return s?s(t,e,n,i,r):ts(t,e,i,r)}function N(t,e){switch(t.expressionClass){case"BOUND_COLUMN_REF":case"BOUND_CONSTANT":return e(t);case"BOUND_COMPARISON":{let n=t,r=N(n.left,e),o=N(n.right,e),s=r===n.left&&o===n.right?n:{...n,left:r,right:o};return e(s)}case"BOUND_CONJUNCTION":{let n=t,r=n.children.map(s=>N(s,e)),o=r.some((s,i)=>s!==n.children[i]);return e(o?{...n,children:r}:n)}case"BOUND_OPERATOR":{let n=t,r=n.children.map(s=>N(s,e)),o=r.some((s,i)=>s!==n.children[i]);return e(o?{...n,children:r}:n)}case"BOUND_BETWEEN":{let n=t,r=N(n.input,e),o=N(n.lower,e),s=N(n.upper,e),i=r===n.input&&o===n.lower&&s===n.upper?n:{...n,input:r,lower:o,upper:s};return e(i)}case"BOUND_FUNCTION":{let n=t,r=n.children.map(s=>N(s,e)),o=r.some((s,i)=>s!==n.children[i]);return e(o?{...n,children:r}:n)}case"BOUND_AGGREGATE":{let n=t,r=n.children.map(s=>N(s,e)),o=r.some((s,i)=>s!==n.children[i]);return e(o?{...n,children:r}:n)}case"BOUND_SUBQUERY":{let n=t;if(n.child){let r=N(n.child,e);return e(r===n.child?n:{...n,child:r})}return e(n)}case"BOUND_CASE":{let n=t,r=n.caseChecks.map(s=>({when:N(s.when,e),then:N(s.then,e)})),o=n.elseExpr?N(n.elseExpr,e):null;return e({...n,caseChecks:r,elseExpr:o})}case"BOUND_CAST":{let n=t,r=N(n.child,e);return e(r===n.child?n:{...n,child:r})}case"BOUND_JSON_ACCESS":{let n=t,r=N(n.child,e);return e(r===n.child?n:{...n,child:r})}default:return e(t)}}function P(t){let e=[];return N(t,n=>{if(n.expressionClass==="BOUND_COLUMN_REF")e.push(n.binding);else if(n.expressionClass==="BOUND_JSON_ACCESS")e.push(n.child.binding);else if(n.expressionClass==="BOUND_AGGREGATE"){let r=n;r.binding&&e.push(r.binding)}else n.expressionClass==="BOUND_SUBQUERY"&&rs(n.subplan,e);return n}),e}function rs(t,e){for(let n of t.expressions)e.push(...P(n));if("conditions"in t&&Array.isArray(t.conditions))for(let n of t.conditions)e.push(...P(n.left)),e.push(...P(n.right));if("orders"in t&&Array.isArray(t.orders))for(let n of t.orders)e.push(...P(n.expression));if("groups"in t&&Array.isArray(t.groups))for(let n of t.groups)e.push(...P(n));"havingExpression"in t&&t.havingExpression&&e.push(...P(t.havingExpression));for(let n of t.children)rs(n,e)}function Q(t){let e=new Set;for(let n of P(t))e.add(n.tableIndex);return e}function D(t){if(t.expressionClass==="BOUND_CONJUNCTION"&&t.conjunctionType==="AND"){let e=t,n=[];for(let r of e.children)n.push(...D(r));return n}return[t]}function Pe(t){return t.length===0?null:t.length===1?t[0]:{expressionClass:"BOUND_CONJUNCTION",conjunctionType:"AND",children:t,returnType:"BOOLEAN"}}function ge(t){switch(t){case"LESS":return"GREATER";case"GREATER":return"LESS";case"LESS_EQUAL":return"GREATER_EQUAL";case"GREATER_EQUAL":return"LESS_EQUAL";case"EQUAL":return"EQUAL";case"NOT_EQUAL":return"NOT_EQUAL"}}function Yn(t){return t==="INTEGER"||t==="BIGINT"||t==="REAL"}function C(t){return t.expressionClass==="BOUND_CONSTANT"}function Wt(t){return t.expressionClass==="BOUND_PARAMETER"}function pe(t){return t.expressionClass==="BOUND_COLUMN_REF"}function se(t){return t.expressionClass==="BOUND_COMPARISON"}function zn(t){return t.expressionClass==="BOUND_CONJUNCTION"}function Yt(t){return t.expressionClass==="BOUND_OPERATOR"}function M(t){switch(t.expressionClass){case"BOUND_CONSTANT":return!0;case"BOUND_COLUMN_REF":case"BOUND_AGGREGATE":case"BOUND_SUBQUERY":return!1;case"BOUND_COMPARISON":{let e=t;return M(e.left)&&M(e.right)}case"BOUND_CONJUNCTION":return t.children.every(M);case"BOUND_OPERATOR":return t.children.every(M);case"BOUND_BETWEEN":{let e=t;return M(e.input)&&M(e.lower)&&M(e.upper)}case"BOUND_FUNCTION":return t.children.every(M);case"BOUND_CASE":{let e=t;return e.caseChecks.every(n=>M(n.when)&&M(n.then))&&(e.elseExpr===null||M(e.elseExpr))}case"BOUND_CAST":return M(t.child);default:return!1}}function H(t){let e=new Set;return os(t,e),e}function os(t,e){if("tableIndex"in t&&typeof t.tableIndex=="number"&&e.add(t.tableIndex),t.type==="LOGICAL_CTE_REF")for(let n of t.columnBindings)e.add(n.tableIndex);for(let n of t.children)os(n,e)}function Ue(t,e){for(let n=0;n<t.expressions.length;n++)t.expressions[n]=N(t.expressions[n],e);if("conditions"in t&&Array.isArray(t.conditions))for(let n of t.conditions)n.left=N(n.left,e),n.right=N(n.right,e);if("orders"in t&&Array.isArray(t.orders))for(let n of t.orders)n.expression=N(n.expression,e);if("groups"in t&&Array.isArray(t.groups))for(let n=0;n<t.groups.length;n++)t.groups[n]=N(t.groups[n],e);"havingExpression"in t&&t.havingExpression&&(t.havingExpression=N(t.havingExpression,e));for(let n of t.children)Ue(n,e)}function U(t,e){return{expressionClass:"BOUND_CONSTANT",value:t,returnType:e}}function b(t){return U(t,"BOOLEAN")}function _(t="NULL"){return U(null,t)}function w(t){switch(t.expressionClass){case"BOUND_COLUMN_REF":{let e=t;return`C:${e.binding.tableIndex}:${e.binding.columnIndex}`}case"BOUND_JSON_ACCESS":{let e=t;return`J:${w(e.child)}:${JSON.stringify(e.path)}`}case"BOUND_FUNCTION":{let e=t;return`F:${e.functionName}(${e.children.map(w).join(",")})`}case"BOUND_CAST":{let e=t;return`T:${e.castType}(${w(e.child)})`}case"BOUND_OPERATOR":{let e=t;return`O:${e.operatorType}(${e.children.map(w).join(",")})`}case"BOUND_BETWEEN":{let e=t;return`B:${w(e.input)},${w(e.lower)},${w(e.upper)}`}case"BOUND_CONJUNCTION":{let e=t;return`A:${e.conjunctionType}(${e.children.map(w).join(",")})`}case"BOUND_CASE":{let e=t,n=e.caseChecks.map(o=>`${w(o.when)}:${w(o.then)}`).join(","),r=e.elseExpr?w(e.elseExpr):"_";return`K:(${n}|${r})`}case"BOUND_CONSTANT":{let e=t;return`V:${e.returnType}:${String(e.value)}`}case"BOUND_PARAMETER":return`P:${t.index}`;default:return`R:${JSON.stringify(t)}`}}function Ea(t){let e=0;for(let n of t)switch(n){case"TEXT":case"BLOB":e+=32;break;case"REAL":e+=8;break;default:e+=4}return Math.max(e,1)}function ss(t){return t.estimatedCardinality*Ea(t.types)}function zt(t){for(let o=0;o<t.children.length;o++)t.children[o]=zt(t.children[o]);if(t.type!=="LOGICAL_COMPARISON_JOIN")return t;let e=t;if(e.joinType!=="INNER")return t;let n=ss(e.children[0]),r=ss(e.children[1]);if(n<r){let o=e.children[0];e.children[0]=e.children[1],e.children[1]=o;for(let a of e.conditions){let l=a.left;a.left=a.right,a.right=l,a.comparisonType=ge(a.comparisonType)}let s=e.children[0].types,i=e.children[1].types;e.types=[...s,...i],e.columnBindings=[...e.children[0].columnBindings,...e.children[1].columnBindings]}return t}function Zt(t){for(let l=0;l<t.children.length;l++)t.children[l]=Zt(t.children[l]);if(t.type!=="LOGICAL_FILTER")return t;let e=t,n=e.expressions[0];if(!n)return t;let r=H(e.children[0]),o=D(n),s=[];for(let l=0;l<o.length;l++)if(o[l].expressionClass==="BOUND_SUBQUERY"){let u=o[l];(u.subqueryType==="EXISTS"||u.subqueryType==="NOT_EXISTS")&&s.push({index:l,expr:u})}if(s.length===0)return t;let i=e.children[0],a=[...o];for(let l=s.length-1;l>=0;l--){let{index:u,expr:d}=s[l],f=ga(d,i,r);f&&(i=f,a.splice(u,1))}if(a.length>0){let l=Pe(a);l&&(i={type:"LOGICAL_FILTER",children:[i],expressions:[l],types:i.types,estimatedCardinality:0,columnBindings:i.columnBindings})}return i}function ga(t,e,n){let r=is(t.subplan);if(!r)return null;let o=H(t.subplan),s=D(r.expressions[0]),i=[],a=[];for(let p of s){let h=Q(p),T=Xt(h,n),I=Xt(h,o);if(T&&I){if(p.expressionClass!=="BOUND_COMPARISON")return null;let R=p;if(R.comparisonType!=="EQUAL")return null;i.push(R)}else a.push(p)}if(i.length===0)return null;let l=[];for(let p of i){let h=Q(p.left),T=Q(p.right),I=Xt(h,n),R=Xt(T,n);if(I&&!R)l.push({left:p.left,right:p.right,comparisonType:"EQUAL"});else if(R&&!I)l.push({left:p.right,right:p.left,comparisonType:"EQUAL"});else return null}let u=r.children[0];if(a.length>0){let p=Pe(a);u={type:"LOGICAL_FILTER",children:[u],expressions:[p],types:u.types,estimatedCardinality:0,columnBindings:u.columnBindings}}let d=t.subqueryType==="EXISTS"?"SEMI":"ANTI";return{type:"LOGICAL_COMPARISON_JOIN",joinType:d,children:[e,u],conditions:l,expressions:[],types:e.types,estimatedCardinality:0,columnBindings:e.columnBindings}}function is(t){return t.type==="LOGICAL_FILTER"?t:t.type==="LOGICAL_PROJECTION"?is(t.children[0]):null}function Xt(t,e){for(let n of t)if(e.has(n))return!0;return!1}function Xn(t){return Ue(t,xa),t}function xa(t){let e=t;return e=ya(e),e=Ca(e),e=Oa(e),e=La(e),e=Ia(e),e}function ya(t){return!M(t)||C(t)?t:Ta(t)??t}function Ta(t){switch(t.expressionClass){case"BOUND_OPERATOR":{let e=t,n=e.children.map(r=>{if(C(r))return r.value});if(n.some(r=>r===void 0))return null;switch(e.operatorType){case"ADD":{let[r,o]=n;return r===null||o===null?_(e.returnType):U(r+o,e.returnType)}case"SUBTRACT":{let[r,o]=n;return r===null||o===null?_(e.returnType):U(r-o,e.returnType)}case"MULTIPLY":{let[r,o]=n;return r===null||o===null?_(e.returnType):U(r*o,e.returnType)}case"DIVIDE":{let[r,o]=n;return r===null||o===null?_(e.returnType):o===0?_(e.returnType):U(r/o,e.returnType)}case"MOD":{let[r,o]=n;return r===null||o===null?_(e.returnType):o===0?_(e.returnType):U(r%o,e.returnType)}case"NEGATE":{let[r]=n;return r===null?_(e.returnType):U(-r,e.returnType)}case"NOT":{let[r]=n;return r===null?_("BOOLEAN"):b(!r)}case"IS_NULL":{let[r]=n;return b(r===null)}case"IS_NOT_NULL":{let[r]=n;return b(r!==null)}case"CONCAT":{let[r,o]=n;return r===null||o===null?_("TEXT"):U(String(r)+String(o),"TEXT")}default:return null}}case"BOUND_COMPARISON":{let e=t;if(!C(e.left)||!C(e.right))return null;let n=e.left.value,r=e.right.value;if(n===null||r===null)return _("BOOLEAN");switch(e.comparisonType){case"EQUAL":return b(n===r);case"NOT_EQUAL":return b(n!==r);case"LESS":return b(n<r);case"GREATER":return b(n>r);case"LESS_EQUAL":return b(n<=r);case"GREATER_EQUAL":return b(n>=r);default:return null}}case"BOUND_CONJUNCTION":{let e=t,n=e.children.map(r=>{if(C(r))return r.value});return n.some(r=>r===void 0)?null:e.conjunctionType==="AND"?b(n.every(r=>r===!0)):b(n.some(r=>r===!0))}default:return null}}function Ca(t){if(!se(t))return t;let e=t;if(C(e.left)&&e.left.value===null)return _("BOOLEAN");if(C(e.right)&&e.right.value===null)return _("BOOLEAN");if(L(e.left,e.right)&&pe(e.left))switch(e.comparisonType){case"EQUAL":case"LESS_EQUAL":case"GREATER_EQUAL":return b(!0);case"NOT_EQUAL":case"LESS":case"GREATER":return b(!1)}return t}function Oa(t){if(!zn(t))return t;let e=t,n=[];for(let r of e.children){if(C(r)){let o=r.value;if(e.conjunctionType==="AND"){if(o===!1||o===null)return b(!1);continue}else{if(o===!0)return b(!0);if(o===!1||o===null)continue}}n.push(r)}return n.length===0?b(e.conjunctionType==="AND"):n.length===1?n[0]:n.length===e.children.length?t:{...e,children:n}}function La(t){if(!Yt(t))return t;let e=t;switch(e.operatorType){case"ADD":{let[n,r]=e.children;return C(r)&&r.value===0?n:C(n)&&n.value===0?r:t}case"SUBTRACT":{let[n,r]=e.children;return C(r)&&r.value===0?n:t}case"MULTIPLY":{let[n,r]=e.children;return C(r)&&r.value===1?n:C(n)&&n.value===1?r:C(r)&&r.value===0?as(U(0,e.returnType),n):C(n)&&n.value===0?as(U(0,e.returnType),r):t}case"DIVIDE":{let[n,r]=e.children;return C(r)&&r.value===1?e.children[0]:C(r)&&r.value===0?_(e.returnType):t}default:return t}}function as(t,e){return C(e)&&e.value!==null?t:{expressionClass:"BOUND_CASE",caseChecks:[{when:{expressionClass:"BOUND_OPERATOR",operatorType:"IS_NOT_NULL",children:[e],returnType:"BOOLEAN"},then:t}],elseExpr:_(t.returnType),returnType:t.returnType}}function Ia(t){if(!se(t))return t;let e=t;if(C(e.left)&&!C(e.right))return{...e,left:e.right,right:e.left,comparisonType:ge(e.comparisonType)};if(Yt(e.left)&&C(e.right)){let n=e.left,r=e.right;if((n.operatorType==="ADD"||n.operatorType==="SUBTRACT")&&n.children.length===2&&C(n.children[1])&&Yn(r.returnType)){let o=n.children[1].value,s=r.value;if(typeof o=="number"&&typeof s=="number"){let i=n.operatorType==="ADD"?s-o:s+o;return{...e,left:n.children[0],right:U(i,r.returnType)}}}}return t}function en(t){for(let e=0;e<t.children.length;e++)t.children[e]=en(t.children[e]);return t.type==="LOGICAL_FILTER"?Na(t):t}function Na(t){let e=t.children[0];if(e.type==="LOGICAL_COMPARISON_JOIN"){let n=e;if(n.joinType!=="INNER")return t;let r=[...D(Ba(t))];for(let a of n.conditions)r.push({expressionClass:"BOUND_COMPARISON",comparisonType:a.comparisonType,left:a.left,right:a.right,returnType:"BOOLEAN"});let o={type:"LOGICAL_CROSS_PRODUCT",children:[n.children[0],n.children[1]],expressions:[],types:n.types,estimatedCardinality:n.estimatedCardinality,columnBindings:[...n.children[0].columnBindings,...n.children[1].columnBindings]},s=Pe(r);return s?{type:"LOGICAL_FILTER",children:[o],expressions:D(s),types:o.types,estimatedCardinality:t.estimatedCardinality,columnBindings:o.columnBindings}:o}return t}function Ba(t){return t.expressions.length===1?t.expressions[0]:{expressionClass:"BOUND_CONJUNCTION",conjunctionType:"AND",children:t.expressions,returnType:"BOOLEAN"}}function Zn(t){return t.expressionClass==="BOUND_PARAMETER"}function ls(t){return!C(t)&&!Zn(t)}var Xe=class{equivalences=new Map;constantFilters=new Map;keyExpressions=new Map;remainingFilters=[];addFilter(e){let n=D(e);for(let r of n)this.addSingleFilter(r)}addSingleFilter(e){if(!se(e)){this.remainingFilters.push(e);return}let n=e;if(n.comparisonType==="EQUAL"&&pe(n.left)&&pe(n.right)){let r=w(n.left),o=w(n.right);this.addEquivalence(r,o),this.keyExpressions.set(r,n.left),this.keyExpressions.set(o,n.right),this.remainingFilters.push(e);return}if(ls(n.left)&&(C(n.right)||Zn(n.right))){let r=w(n.left);this.keyExpressions.set(r,n.left),this.addConstantFilter(r,n.comparisonType,n.right);return}if((C(n.left)||Zn(n.left))&&ls(n.right)){let r=w(n.right);this.keyExpressions.set(r,n.right);let o=Aa(n.comparisonType);this.addConstantFilter(r,o,n.left);return}this.remainingFilters.push(e)}addEquivalence(e,n){let r=this.equivalences.get(e),o=this.equivalences.get(n);if(r&&o)for(let s of o)r.add(s),this.equivalences.set(s,r);else if(r)r.add(n),this.equivalences.set(n,r);else if(o)o.add(e),this.equivalences.set(e,o);else{let s=new Set([e,n]);this.equivalences.set(e,s),this.equivalences.set(n,s)}}addConstantFilter(e,n,r){let o=this.constantFilters.get(e);o||(o=[],this.constantFilters.set(e,o));for(let s=o.length-1;s>=0;s--){let i=Sa(o[s],{comparisonType:n,constant:r});if(i==="UNSATISFIABLE"){o.length=0,o.push({comparisonType:"EQUAL",constant:b(!1)});return}i==="PRUNE"&&o.splice(s,1)}o.push({comparisonType:n,constant:r})}generateFilters(){let e=[];for(let[n,r]of this.constantFilters){if(r.length===1&&r[0].comparisonType==="EQUAL"&&C(r[0].constant)&&r[0].constant.value===!1&&r[0].constant.returnType==="BOOLEAN")return[b(!1)];let o=this.keyExpressions.get(n);if(o)for(let s of r)e.push({expressionClass:"BOUND_COMPARISON",comparisonType:s.comparisonType,left:o,right:s.constant,returnType:"BOOLEAN"})}for(let[n,r]of this.equivalences){let o=this.constantFilters.get(n);if(o)for(let s of r){if(s===n||this.constantFilters.has(s))continue;let i=this.keyExpressions.get(s);if(i)for(let a of o)C(a.constant)&&e.push({expressionClass:"BOUND_COMPARISON",comparisonType:a.comparisonType,left:i,right:a.constant,returnType:"BOOLEAN"})}}return e.push(...this.remainingFilters),e}generateTableFilters(e){let n=[];for(let[r,o]of this.constantFilters){let s=this.keyExpressions.get(r);if(!(!s||!Q(s).has(e)))for(let a of o)C(a.constant)&&a.constant.returnType==="BOOLEAN"&&a.constant.value===!1||n.push({expression:s,comparisonType:a.comparisonType,constant:a.constant})}return n}};function Aa(t){switch(t){case"LESS":return"GREATER";case"GREATER":return"LESS";case"LESS_EQUAL":return"GREATER_EQUAL";case"GREATER_EQUAL":return"LESS_EQUAL";case"EQUAL":return"EQUAL";case"NOT_EQUAL":return"NOT_EQUAL"}}function Sa(t,e){if(!C(t.constant)||!C(e.constant))return"KEEP";let n=t.constant.value,r=e.constant.value;return typeof n!="number"||typeof r!="number"?t.comparisonType==="EQUAL"&&e.comparisonType==="EQUAL"?n===r?"PRUNE":"UNSATISFIABLE":"KEEP":t.comparisonType==="EQUAL"&&e.comparisonType==="EQUAL"?n===r?"PRUNE":"UNSATISFIABLE":t.comparisonType==="EQUAL"?cs(n,e.comparisonType,r)?"KEEP":"UNSATISFIABLE":e.comparisonType==="EQUAL"?cs(r,t.comparisonType,n)?"PRUNE":"UNSATISFIABLE":ba(t.comparisonType,e.comparisonType)?e.comparisonType==="LESS"||e.comparisonType==="LESS_EQUAL"?r<n||r===n&&e.comparisonType==="LESS"?"PRUNE":"KEEP":r>n||r===n&&e.comparisonType==="GREATER"?"PRUNE":"KEEP":tn(t.comparisonType)&&nn(e.comparisonType)&&(n>r||n===r&&(t.comparisonType==="GREATER"||e.comparisonType==="LESS"))||nn(t.comparisonType)&&tn(e.comparisonType)&&(r>n||r===n&&(e.comparisonType==="GREATER"||t.comparisonType==="LESS"))?"UNSATISFIABLE":"KEEP"}function cs(t,e,n){switch(e){case"EQUAL":return t===n;case"NOT_EQUAL":return t!==n;case"LESS":return t<n;case"GREATER":return t>n;case"LESS_EQUAL":return t<=n;case"GREATER_EQUAL":return t>=n}}function tn(t){return t==="GREATER"||t==="GREATER_EQUAL"}function nn(t){return t==="LESS"||t==="LESS_EQUAL"}function ba(t,e){return tn(t)&&tn(e)||nn(t)&&nn(e)}function tr(t){return new er().rewrite(t)}var er=class t{filters=[];rewrite(e){switch(e.type){case"LOGICAL_FILTER":return this.pushdownFilter(e);case"LOGICAL_PROJECTION":return this.pushdownProjection(e);case"LOGICAL_COMPARISON_JOIN":return this.pushdownJoin(e);case"LOGICAL_CROSS_PRODUCT":return this.pushdownCrossProduct(e);case"LOGICAL_GET":return this.pushdownGet(e);case"LOGICAL_AGGREGATE_AND_GROUP_BY":return this.pushdownAggregate(e);case"LOGICAL_ORDER_BY":case"LOGICAL_LIMIT":case"LOGICAL_DISTINCT":return this.pushdownPassthrough(e);case"LOGICAL_UNION":return this.pushdownSetOperation(e);case"LOGICAL_MATERIALIZED_CTE":return this.pushdownMaterializedCTE(e);case"LOGICAL_RECURSIVE_CTE":return this.pushdownRecursiveCTE(e);default:return this.finishPushdown(e)}}pushdownFilter(e){for(let n of e.expressions)for(let r of D(n))this.filters.push(r);return this.rewrite(e.children[0])}pushdownProjection(e){let n=[],r=[];for(let s of this.filters){let i=Ra(s,e);i?n.push(i):r.push(s)}let o=new t;return o.filters=n,e.children=[o.rewrite(e.children[0])],this.filters=r,this.finishPushdown(e)}pushdownJoin(e){let n=H(e.children[0]),r=H(e.children[1]),o=[],s=[],i=[];for(let u of this.filters){let d=Q(u),f=[...d].some(h=>n.has(h)),p=[...d].some(h=>r.has(h));if(f&&!p)o.push(u);else if(p&&!f)e.joinType==="INNER"||e.joinType==="SEMI"||e.joinType==="ANTI"?s.push(u):i.push(u);else if(f&&p&&e.joinType==="INNER"){let h=us(u,n,r);h?e.conditions.push(h):i.push(u)}else i.push(u)}let a=new t;a.filters=o,e.children[0]=a.rewrite(e.children[0]);let l=new t;return l.filters=s,e.children[1]=l.rewrite(e.children[1]),this.filters=i,this.finishPushdown(e)}pushdownCrossProduct(e){let n=H(e.children[0]),r=H(e.children[1]),o=[],s=[],i=[],a=[];for(let p of this.filters){let h=Q(p),T=[...h].some(R=>n.has(R)),I=[...h].some(R=>r.has(R));if(T&&!I)o.push(p);else if(I&&!T)s.push(p);else if(T&&I){let R=us(p,n,r);R?i.push(R):a.push(p)}else a.push(p)}let l=new t;l.filters=o;let u=l.rewrite(e.children[0]),d=new t;d.filters=s;let f=d.rewrite(e.children[1]);if(i.length>0){let p={type:"LOGICAL_COMPARISON_JOIN",joinType:"INNER",children:[u,f],conditions:i,expressions:[],types:e.types,estimatedCardinality:e.estimatedCardinality,columnBindings:[...u.columnBindings,...f.columnBindings]};return this.filters=a,this.finishPushdown(p)}return e.children=[u,f],this.filters=a,this.finishPushdown(e)}pushdownGet(e){let n=new Xe;for(let i of this.filters)n.addFilter(i);let r=n.generateTableFilters(e.tableIndex);e.tableFilters.push(...r);let s=n.generateFilters().filter(i=>{if(!se(i))return!0;let a=i;return!r.some(l=>l.comparisonType!==a.comparisonType||!L(l.expression,a.left)?!1:C(l.constant)&&C(a.right)?l.constant.value===a.right.value:l.constant.expressionClass==="BOUND_PARAMETER"&&a.right.expressionClass==="BOUND_PARAMETER"?l.constant.index===a.right.index:!1)});return this.filters=s,this.finishPushdown(e)}pushdownAggregate(e){let n=[],r=[];for(let s of this.filters)wa(s,e)?n.push(s):r.push(s);if(e.havingExpression&&e.groups.length>0){let s=D(e.havingExpression),i=[];for(let a of s){let l=_a(a,e);l?n.push(l):i.push(a)}i.length===0?e.havingExpression=null:i.length===1?e.havingExpression=i[0]:e.havingExpression={expressionClass:"BOUND_CONJUNCTION",conjunctionType:"AND",children:i,returnType:"BOOLEAN"}}let o=new t;return o.filters=n,e.children=[o.rewrite(e.children[0])],this.filters=r,this.finishPushdown(e)}pushdownPassthrough(e){let n=new t;return n.filters=this.filters,this.filters=[],e.children[0]=n.rewrite(e.children[0]),e}pushdownMaterializedCTE(e){let n=new t;e.children[0]=n.rewrite(e.children[0]);let r=new t;return r.filters=this.filters,this.filters=[],e.children[1]=r.rewrite(e.children[1]),e}pushdownRecursiveCTE(e){let n=new t;e.children[0]=n.rewrite(e.children[0]);let r=new t;return e.children[1]=r.rewrite(e.children[1]),this.finishPushdown(e)}pushdownSetOperation(e){return this.finishPushdown(e)}finishPushdown(e){if(this.filters.length===0)return e;let n={type:"LOGICAL_FILTER",children:[e],expressions:this.filters,types:e.types,estimatedCardinality:e.estimatedCardinality,columnBindings:e.columnBindings};return this.filters=[],n}};function Ra(t,e){let n=!0,r=N(t,o=>{if(o.expressionClass==="BOUND_COLUMN_REF"){let s=o;if(s.binding.tableIndex===e.tableIndex){let i=s.binding.columnIndex;if(i<e.expressions.length)return e.expressions[i];n=!1}}return o});return n?r:null}function us(t,e,n){if(!se(t))return null;let r=t;if(r.comparisonType!=="EQUAL")return null;let o=Q(r.left),s=Q(r.right),i=[...o].every(d=>e.has(d)),a=[...s].every(d=>n.has(d));if(i&&a)return{left:r.left,right:r.right,comparisonType:"EQUAL"};let l=[...o].every(d=>n.has(d)),u=[...s].every(d=>e.has(d));return l&&u?{left:r.right,right:r.left,comparisonType:"EQUAL"}:null}function _a(t,e){let n=!0,r=N(t,o=>{if(o.expressionClass==="BOUND_COLUMN_REF"){let s=o;if(s.binding.tableIndex===e.groupIndex){let i=s.binding.columnIndex;if(i<e.groups.length)return e.groups[i];n=!1}s.binding.tableIndex===e.aggregateIndex&&(n=!1)}return o.expressionClass==="BOUND_AGGREGATE"&&(n=!1),o});return n?r:null}function wa(t,e){let n=P(t),r=new Set;for(let o of e.groups)for(let s of P(o))r.add(`${s.tableIndex}:${s.columnIndex}`);return n.every(o=>r.has(`${o.tableIndex}:${o.columnIndex}`))}var va=10;function nr(t){return Ue(t,Pa),t}function Pa(t){if(t.expressionClass!=="BOUND_OPERATOR")return t;let e=t;if(e.operatorType!=="IN"&&e.operatorType!=="NOT_IN"||e.children.length<2)return t;let n=e.children[0],r=e.children.slice(1);if(!r.every(C))return t;let o=e.operatorType==="NOT_IN",s=o?"NOT_EQUAL":"EQUAL";if(r.length===1)return{expressionClass:"BOUND_COMPARISON",comparisonType:s,left:n,right:r[0],returnType:"BOOLEAN"};if(r.length>va)return t;let i=r.map(l=>({expressionClass:"BOUND_COMPARISON",comparisonType:s,left:n,right:l,returnType:"BOOLEAN"})),a=o?"AND":"OR";return{expressionClass:"BOUND_CONJUNCTION",conjunctionType:a,children:i,returnType:"BOOLEAN"}}function rr(t,e){let n=t;return n=Ze(n,e,ka),n=Ze(n,e,Va),n=Ze(n,e,Ja),n=Ze(n,e,$a),n}function Ze(t,e,n){for(let r=0;r<t.children.length;r++)t.children[r]=Ze(t.children[r],e,n);return n(t,e)}function ps(t){if(t.type==="LOGICAL_GET"){let e=t;return e.tableFilters.length===0&&!e.indexHint?e:null}return t.type==="LOGICAL_PROJECTION"&&t.children.length===1?ps(t.children[0]):null}function or(t){if(t.type==="LOGICAL_GET")return{get:t,projections:[]};if(t.type==="LOGICAL_PROJECTION"||t.type==="LOGICAL_FILTER"){let e=or(t.children[0]);return e?(t.type==="LOGICAL_PROJECTION"&&e.projections.unshift(t),e):null}return null}function Ua(t,e){let n=t;for(let r of e){if(n.expressionClass!=="BOUND_COLUMN_REF")break;let o=n;o.binding.tableIndex===r.tableIndex&&(n=r.expressions[o.binding.columnIndex])}return n}function Da(t){let e=D(t),n=[];for(let r of e){let o=Ma(r);if(!o)return[];n.push(o)}return n}function Ma(t){if(t.expressionClass!=="BOUND_COMPARISON")return null;let e=t;return C(e.right)||Wt(e.right)?{expression:e.left,comparisonType:e.comparisonType,constant:e.right}:C(e.left)||Wt(e.left)?{expression:e.right,comparisonType:ge(e.comparisonType),constant:e.left}:null}function ja(t,e,n,r){if(t.length<2)return null;let o=[];for(let s of t){let i=Da(s);if(i.length===0)return null;let a=ds(i,e,n,r);if(!a)return null;o.push(a)}return o}function ds(t,e,n,r){let o=0,s=null;for(let i of r){let a=Fa(t,e,n,i);a&&a.score>o&&(o=a.score,s=a.hint)}return s}function Fa(t,e,n,r){let o=[],s=[],i=0;for(let u=0;u<r.expressions.length;u++){let d=me(r.expressions[u],e,n),f=Ga(t,d,u);if(s.push(...f.predicates),o.push(...f.covered),f.type==="eq"){i++;continue}break}if(s.length===0)return null;let a=t.filter(u=>!o.includes(u)),l=o.length;return r.unique&&i===r.expressions.length&&(l+=10),{score:l,hint:{kind:"scan",indexDef:r,predicates:s,residualFilters:a,coveredFilters:o}}}function Ga(t,e,n){let r=t.find(s=>s.comparisonType==="EQUAL"&&L(s.expression,e));if(r)return{type:"eq",predicates:[{columnPosition:n,comparisonType:"EQUAL",value:r.constant}],covered:[r]};let o=t.filter(s=>L(s.expression,e)&&s.comparisonType!=="EQUAL"&&s.comparisonType!=="NOT_EQUAL");return o.length===0?{type:"miss",predicates:[],covered:[]}:{type:"range",predicates:o.map(s=>({columnPosition:n,comparisonType:s.comparisonType,value:s.constant})),covered:o}}function ka(t,e){if(t.type!=="LOGICAL_GET")return t;let n=t;if(n.tableName==="__empty"||n.tableFilters.length===0)return t;let r=e.getTableIndexes(n.tableName);if(r.length===0)return t;let o=ds(n.tableFilters,n.schema,n.tableIndex,r);return o&&(n.indexHint=o),t}function Va(t,e){if(t.type!=="LOGICAL_FILTER")return t;let n=t,r=or(n.children[0]);if(!r)return t;let{get:o}=r;if(o.indexHint||o.tableName==="__empty")return t;let s=e.getTableIndexes(o.tableName);if(s.length===0)return t;for(let i=0;i<n.expressions.length;i++){let a=n.expressions[i];if(a.expressionClass!=="BOUND_CONJUNCTION"||a.conjunctionType!=="OR")continue;let l=ja(a.children,o.schema,o.tableIndex,s);if(l)return o.indexHint={kind:"union",branches:l,originalFilter:a},n.expressions.splice(i,1),n.expressions.length===0?n.children[0]:t}return t}function Ja(t,e){if(t.type!=="LOGICAL_AGGREGATE_AND_GROUP_BY")return t;let n=t;if(n.groups.length!==0||n.expressions.length!==1)return t;let r=n.expressions[0];if(r.functionName!=="MIN"&&r.functionName!=="MAX"||r.isStar||r.distinct||r.children.length!==1)return t;let o=ps(n.children[0]);if(!o)return t;for(let s of e.getTableIndexes(o.tableName)){let i=me(s.expressions[0],o.schema,o.tableIndex);if(L(r.children[0],i))return n.minMaxHint={indexDef:s,functionName:r.functionName,keyPosition:0},t}return t}function $a(t,e){if(t.type!=="LOGICAL_ORDER_BY")return t;let n=t;if(n.orders.some(a=>a.orderType!=="ASCENDING"))return t;let r=or(n.children[0]);if(!r||r.get.tableName==="__empty")return t;let{get:o,projections:s}=r,i=e.getTableIndexes(o.tableName);if(i.length===0)return t;for(let a of i)if(Ha(n.orders,a,o,s)){if(o.indexHint?.kind==="scan"&&o.indexHint.indexDef.name===a.name)return n.children[0];if(!o.indexHint)return o.indexHint={kind:"scan",indexDef:a,predicates:[],residualFilters:[],coveredFilters:[]},n.children[0]}return t}function Ha(t,e,n,r){if(t.length>e.expressions.length)return!1;for(let o=0;o<t.length;o++){let s=me(e.expressions[o],n.schema,n.tableIndex),i=Ua(t[o].expression,r);if(!L(i,s))return!1}return!0}function rn(t){for(let o=0;o<t.children.length;o++)t.children[o]=rn(t.children[o]);if(t.type!=="LOGICAL_COMPARISON_JOIN"&&t.type!=="LOGICAL_CROSS_PRODUCT"||t.type==="LOGICAL_COMPARISON_JOIN"&&t.joinType!=="INNER")return t;let e=[],n=[];if(et(t,e,n),e.length<=1)return t;let r=e.length<=6?Ka(e,n):Qa(e,n);return qa(r,n)}function et(t,e,n){if(t.type==="LOGICAL_COMPARISON_JOIN"){let r=t;if(r.joinType==="INNER"){if(et(r.children[0],e,n),et(r.children[1],e,n),r.conditions.length>0){let o=H(r.children[0]),s=H(r.children[1]);n.push({conditions:r.conditions,leftTables:o,rightTables:s})}return}}if(t.type==="LOGICAL_CROSS_PRODUCT"){let r=t;et(r.children[0],e,n),et(r.children[1],e,n);return}e.push({plan:t,tables:H(t),cardinality:Math.max(t.estimatedCardinality,1)})}function Ka(t,e){if(t.length<=2)return t;let n=t,r=ms(t,e),o=fs(t);for(let s of o){let i=ms(s,e);i<r&&(r=i,n=s)}return n}function Qa(t,e){let n=[],r=[...t];for(r.sort((o,s)=>o.cardinality-s.cardinality),n.push(r.shift());r.length>0;){let o=new Set;for(let a of n)for(let l of a.tables)o.add(l);let s=0,i=1/0;for(let a=0;a<r.length;a++){let l=r[a],d=e.some(f=>q(f.leftTables,o)&&q(f.rightTables,l.tables)||q(f.rightTables,o)&&q(f.leftTables,l.tables))?l.cardinality:l.cardinality*1e3;d<i&&(i=d,s=a)}n.push(r.splice(s,1)[0])}return n}function ms(t,e){if(t.length<=1)return 0;let n=0,r=new Set(t[0].tables),o=t[0].cardinality;for(let s=1;s<t.length;s++){let i=t[s],a=e.some(u=>q(u.leftTables,r)&&q(u.rightTables,i.tables)||q(u.rightTables,r)&&q(u.leftTables,i.tables)),l;if(a){let u=e.reduce((h,T)=>q(T.leftTables,r)&&q(T.rightTables,i.tables)||q(T.rightTables,r)&&q(T.leftTables,i.tables)?h+T.conditions.length:h,0),d=Math.max(o,i.cardinality),f=o*i.cardinality,p=Math.pow(d,u);l=Math.max(1,Math.round(f/p))}else l=o*i.cardinality;n+=l;for(let u of i.tables)r.add(u);o=l}return n}function qa(t,e){if(t.length===0)throw new Error("Empty relation set in join order reconstruction");if(t.length===1)return t[0].plan;let n=t[0].plan,r=new Set(t[0].tables);for(let o=1;o<t.length;o++){let s=t[o],i=[];for(let a of e){let l=[...a.leftTables],u=[...a.rightTables],d=new Set([...r,...s.tables]),f=l.every(h=>d.has(h)),p=u.every(h=>d.has(h));if(f&&p){let h=l.some(X=>r.has(X)),T=u.some(X=>s.tables.has(X)),I=u.some(X=>r.has(X)),R=l.some(X=>s.tables.has(X));(h&&T||I&&R)&&i.push(...a.conditions)}}i.length>0?n={type:"LOGICAL_COMPARISON_JOIN",joinType:"INNER",children:[n,s.plan],conditions:i,expressions:[],types:[...n.types,...s.plan.types],estimatedCardinality:Math.max(1,Math.round(n.estimatedCardinality*s.plan.estimatedCardinality/Math.pow(Math.max(n.estimatedCardinality,s.plan.estimatedCardinality),i.length))),columnBindings:[...n.columnBindings,...s.plan.columnBindings]}:n={type:"LOGICAL_CROSS_PRODUCT",children:[n,s.plan],expressions:[],types:[...n.types,...s.plan.types],estimatedCardinality:n.estimatedCardinality*s.plan.estimatedCardinality,columnBindings:[...n.columnBindings,...s.plan.columnBindings]};for(let a of s.tables)r.add(a)}return n}function q(t,e){for(let n of t)if(e.has(n))return!0;return!1}function fs(t){if(t.length<=1)return[t];let e=[];for(let n=0;n<t.length;n++){let r=[...t.slice(0,n),...t.slice(n+1)],o=fs(r);for(let s of o)e.push([t[n],...s])}return e}var Wa=8192;function on(t){for(let o=0;o<t.children.length;o++)t.children[o]=on(t.children[o]);if(t.type!=="LOGICAL_LIMIT")return t;let e=t;if(e.limitVal===null||e.limitVal>=Wa)return t;let n=e.limitVal+e.offsetVal,r=e.children[0];if(r.type==="LOGICAL_ORDER_BY")return r.topN=n,t;if(r.type==="LOGICAL_PROJECTION"){let o=r,s=o.children[0];s.type==="LOGICAL_ORDER_BY"&&(s.topN=n);let i={type:"LOGICAL_LIMIT",children:[o.children[0]],limitVal:e.limitVal,offsetVal:e.offsetVal,expressions:[],types:o.children[0].types,estimatedCardinality:e.limitVal+e.offsetVal,columnBindings:o.children[0].columnBindings};return o.children=[i],e.children=[o],e}return t}function sr(t){let e=new Set;for(let n of t.columnBindings)e.add(ie(n.tableIndex,n.columnIndex));return ir(t,e),V(t,e)}function V(t,e){switch(t.type){case"LOGICAL_GET":return Ya(t,e);case"LOGICAL_PROJECTION":return za(t,e);case"LOGICAL_AGGREGATE_AND_GROUP_BY":return Xa(t,e);case"LOGICAL_FILTER":return Za(t,e);case"LOGICAL_COMPARISON_JOIN":return el(t,e);case"LOGICAL_CROSS_PRODUCT":return tl(t,e);case"LOGICAL_ORDER_BY":return nl(t,e);case"LOGICAL_LIMIT":case"LOGICAL_DISTINCT":return rl(t,e);case"LOGICAL_MATERIALIZED_CTE":return ol(t,e);case"LOGICAL_RECURSIVE_CTE":return sl(t,e);default:for(let n=0;n<t.children.length;n++){let r=new Set;sn(t.children[n],r),t.children[n]=V(t.children[n],r)}return t}}function Ya(t,e){for(let s of t.tableFilters)for(let i of P(s.expression))e.add(ie(i.tableIndex,i.columnIndex));let n=[],r=[];for(let s=0;s<t.columnIds.length;s++)e.has(ie(t.tableIndex,t.columnIds[s]))&&(n.push(t.columnIds[s]),r.push(t.types[s]));if(n.length===t.columnIds.length)return t;n.length===0&&t.columnIds.length>0&&(n.push(t.columnIds[0]),r.push(t.types[0])),t.columnIds=n,t.types=r;let o=t.tableIndex;return t.columnBindings=n.map(s=>({tableIndex:o,columnIndex:s})),t}function za(t,e){let n=[],r=[],o=[];for(let l=0;l<t.expressions.length;l++){let u=ie(t.tableIndex,l),d=e.has(u);if(!d){let f=t.expressions[l];if(pe(f)){let p=f;d=e.has(ie(p.binding.tableIndex,p.binding.columnIndex))}}d&&(n.push(t.expressions[l]),r.push(t.aliases[l]),o.push(t.types[l]))}n.length===0&&t.expressions.length>0&&(n.push(t.expressions[0]),r.push(t.aliases[0]),o.push(t.types[0])),t.expressions=n,t.aliases=r,t.types=o;let s=new Set;for(let l of n)k(l,s);t.children=[V(t.children[0],s)];let i=t.tableIndex,a=n.length;return t.columnBindings=Array.from({length:a},(l,u)=>({tableIndex:i,columnIndex:u})),t}function Xa(t,e){let n=[],r=[],o=t.groups.length;for(let i=0;i<t.expressions.length;i++)e.has(ie(t.aggregateIndex,i))&&(n.push(t.expressions[i]),r.push(t.types[o+i]));t.expressions=n,t.types=[...t.types.slice(0,o),...r];let s=new Set;for(let i of t.groups)k(i,s);for(let i of n)k(i,s);return t.havingExpression&&k(t.havingExpression,s),t.children=[V(t.children[0],s)],t.columnBindings=[...t.groups.map((i,a)=>({tableIndex:t.groupIndex,columnIndex:a})),...n.map((i,a)=>({tableIndex:t.aggregateIndex,columnIndex:a}))],t}function Za(t,e){let n=new Set(e);for(let r of t.expressions)k(r,n);return t.children=[V(t.children[0],n)],t.columnBindings=t.children[0].columnBindings,t}function el(t,e){let n=new Set(e);for(let r of t.conditions)k(r.left,n),k(r.right,n);return t.children[0]=V(t.children[0],n),t.children[1]=V(t.children[1],n),t.columnBindings=[...t.children[0].columnBindings,...t.children[1].columnBindings],t}function tl(t,e){return t.children[0]=V(t.children[0],e),t.children[1]=V(t.children[1],e),t.columnBindings=[...t.children[0].columnBindings,...t.children[1].columnBindings],t}function nl(t,e){let n=new Set(e);for(let r of t.orders)k(r.expression,n);return t.children=[V(t.children[0],n)],t.columnBindings=t.children[0].columnBindings,t}function rl(t,e){return t.children[0]=V(t.children[0],e),t.columnBindings=t.children[0].columnBindings,t}function ol(t,e){let n=new Set;sn(t.children[0],n);for(let o of t.children[0].columnBindings)n.add(ie(o.tableIndex,o.columnIndex));t.children[0]=V(t.children[0],n);let r=new Set(e);return ir(t,r),t.children[1]=V(t.children[1],r),t}function sl(t,e){for(let n=0;n<t.children.length;n++){let r=new Set;sn(t.children[n],r);for(let o of t.children[n].columnBindings)r.add(ie(o.tableIndex,o.columnIndex));t.children[n]=V(t.children[n],r)}return t}function ie(t,e){return`${t}:${e}`}function k(t,e){for(let n of P(t))e.add(ie(n.tableIndex,n.columnIndex))}function ir(t,e){for(let n of t.expressions)k(n,e);if("conditions"in t&&Array.isArray(t.conditions))for(let n of t.conditions)k(n.left,e),k(n.right,e);if("orders"in t&&Array.isArray(t.orders))for(let n of t.orders)k(n.expression,e);if("groups"in t&&Array.isArray(t.groups))for(let n of t.groups)k(n,e);"havingExpression"in t&&t.havingExpression&&k(t.havingExpression,e)}function sn(t,e){ir(t,e);for(let n of t.children)sn(n,e)}function an(t){for(let n=0;n<t.children.length;n++)t.children[n]=an(t.children[n]);if(t.type!=="LOGICAL_FILTER")return t;let e=t;return e.expressions.length<=1||e.expressions.some(xe)||e.expressions.sort((n,r)=>de(n)-de(r)),t}function de(t){switch(t.expressionClass){case"BOUND_CONSTANT":return 1;case"BOUND_COLUMN_REF":return 8*il(t.returnType);case"BOUND_COMPARISON":{let e=t;return 5+de(e.left)+de(e.right)}case"BOUND_CONJUNCTION":{let e=t,n=5;for(let r of e.children)n+=de(r);return n}case"BOUND_OPERATOR":{let e=t,n;switch(e.operatorType){case"ADD":case"SUBTRACT":n=5;break;case"MULTIPLY":n=10;break;case"DIVIDE":case"MOD":n=15;break;case"NOT":case"IS_NULL":case"IS_NOT_NULL":n=3;break;case"IN":case"NOT_IN":n=(e.children.length-1)*100;break;case"NEGATE":n=3;break;default:n=10}for(let r of e.children)n+=de(r);return n}case"BOUND_FUNCTION":{let e=t,n=al(e.functionName);for(let r of e.children)n+=de(r);return n}case"BOUND_CAST":{let e=t;return(e.castType==="TEXT"||e.castType==="BLOB"?200:5)+de(e.child)}case"BOUND_SUBQUERY":return 1e4;case"BOUND_CASE":return 50;case"BOUND_BETWEEN":return 15;case"BOUND_AGGREGATE":return 100;default:return 10}}function il(t){switch(t){case"TEXT":case"BLOB":return 5;case"REAL":return 2;default:return 1}}function xe(t){switch(t.expressionClass){case"BOUND_OPERATOR":{let e=t;return e.operatorType==="DIVIDE"||e.operatorType==="MOD"?!0:e.children.some(xe)}case"BOUND_COMPARISON":{let e=t;return xe(e.left)||xe(e.right)}case"BOUND_CONJUNCTION":return t.children.some(xe);case"BOUND_FUNCTION":return t.children.some(xe);case"BOUND_CAST":return xe(t.child);default:return!1}}function al(t){switch(t.toUpperCase()){case"ABS":case"SIGN":return 5;case"UPPER":case"LOWER":case"TRIM":case"LTRIM":case"RTRIM":return 200;case"LENGTH":case"TYPEOF":return 10;case"SUBSTR":case"SUBSTRING":case"REPLACE":case"INSTR":return 200;case"COALESCE":case"IFNULL":case"NULLIF":return 5;case"HEX":case"UNHEX":case"QUOTE":return 200;default:return 100}}var ll=new Set(["LOGICAL_INSERT","LOGICAL_UPDATE","LOGICAL_DELETE","LOGICAL_CREATE_TABLE","LOGICAL_CREATE_INDEX","LOGICAL_ALTER_TABLE","LOGICAL_DROP"]);function ar(t,e){if(ll.has(t.type))return t;let n=t;return n=Xn(n),n=Zt(n),n=en(n),n=tr(n),n=nr(n),n=rn(n),n=sr(n),n=zt(n),n=on(n),n=an(n),e&&(n=rr(n,e)),n}function lr(t){return t[t.length-1]}var tt=class{constructor(e,n,r=!1){this.metaPageNo=e;this.pageStore=n;this.unique=r}metaPageNo;pageStore;unique;insert(e,n){if(this.unique&&!Qe(e)&&this.existsWithPrefix(e))throw new Error("UNIQUE constraint failed: index");let r={...this.readMeta()},o=[...e,n],{ancestors:s,leaf:i}=this.findLeafPath(r,o),a=this.insertIntoLeaf(i,o);r.size++,a.keys.length>=128?this.splitLeaf(r,a,s):this.writeNode(a),this.writeMeta(r)}delete(e,n){let r={...this.readMeta()},o=[...e,n],{leaf:s}=this.findLeafPath(r,o),i=this.removeFromLeaf(s,o);i&&(r.size--,this.writeNode(i),this.writeMeta(r))}lookup(e){return this.range({lower:e,upper:e})}range(e={}){let n=this.readMeta();if(n.size===0)return[];let r=e.lower?this.findLeafPath(n,e.lower).leaf:this.findLeftmostLeaf(n);return this.collectRange(r,e)}bulkLoad(e){let n={rootNodeId:0,height:1,size:0};if(e.length===0){n.rootNodeId=this.createLeaf([],null),this.writeMeta(n);return}this.unique&&this.checkUniqueSorted(e),n.size=e.length;let r=this.buildLeaves(e);this.linkAndWriteLeaves(r),n.rootNodeId=r.length===1?r[0].nodeId:this.buildInternalLevels(n,r),this.writeMeta(n)}drop(){let e=this.readMeta();this.freeSubtree(e.rootNodeId,e.height),this.pageStore.freePage(this.metaPageNo)}first(){let e=this.readMeta();if(e.size===0)return null;let n=this.findLeftmostLeaf(e);for(;n;){for(let r of n.keys){let o=r.slice(0,-1);if(!Qe(o))return{key:o,rowId:lr(r)}}n=n.nextLeafId!==null?this.readNode(n.nextLeafId):null}return null}last(){let e=this.readMeta();if(e.size===0)return null;let n=this.findRightmostLeaf(e);for(let r=n.keys.length-1;r>=0;r--){let o=n.keys[r],s=o.slice(0,-1);if(!Qe(s))return{key:s,rowId:lr(o)}}return null}insertIntoLeaf(e,n){let r=this.bisectLeft(e.keys,n);return{...e,keys:[...e.keys.slice(0,r),n,...e.keys.slice(r)]}}removeFromLeaf(e,n){let r=this.bisectLeft(e.keys,n);return r>=e.keys.length||oe(e.keys[r],n)!==0?null:{...e,keys:[...e.keys.slice(0,r),...e.keys.slice(r+1)]}}existsWithPrefix(e){return this.range({lower:e,upper:e}).length>0}findLeftmostLeaf(e){let n=this.readNode(e.rootNodeId);for(;n.kind==="internal";)n=this.readNode(n.children[0]);return n}findRightmostLeaf(e){let n=this.readNode(e.rootNodeId);for(;n.kind==="internal";)n=this.readNode(n.children[n.children.length-1]);return n}collectRange(e,n){let r=[],o=e;for(;o;){for(let s=0;s<o.keys.length;s++){let i=o.keys[s];if(!this.isBelowLower(i,n)){if(this.isAboveUpper(i,n))return r;r.push(lr(i))}}o=o.nextLeafId!==null?this.readNode(o.nextLeafId):null}return r}isBelowLower(e,n){if(!n.lower)return!1;let r=e.slice(0,n.lower.length),o=oe(r,n.lower);return n.lowerInclusive!==!1?o<0:o<=0}isAboveUpper(e,n){if(!n.upper)return!1;let r=e.slice(0,n.upper.length),o=oe(r,n.upper);return n.upperInclusive!==!1?o>0:o>=0}checkUniqueSorted(e){for(let n=1;n<e.length;n++)if(oe(e[n].key,e[n-1].key)===0&&!Qe(e[n].key))throw new Error("UNIQUE constraint failed: index")}buildLeaves(e){let n=[];for(let r=0;r<e.length;r+=127){let o=e.slice(r,r+128-1),s=this.pageStore.allocPage();n.push({kind:"leaf",nodeId:s,keys:o.map(i=>[...i.key,i.rowId]),nextLeafId:null})}return n}linkAndWriteLeaves(e){for(let n=0;n<e.length-1;n++)e[n].nextLeafId=e[n+1].nodeId;for(let n of e)this.writeNode(n)}buildInternalLevels(e,n){let r=n.map(o=>({nodeId:o.nodeId,firstKey:o.keys[0]}));for(;r.length>1;){e.height++;let o=[];for(let s=0;s<r.length;s+=128){let i=r.slice(s,s+128),a=this.pageStore.allocPage();this.writeNode({kind:"internal",nodeId:a,keys:i.slice(1).map(l=>l.firstKey),children:i.map(l=>l.nodeId)}),o.push({nodeId:a,firstKey:i[0].firstKey})}r=o}return r[0].nodeId}splitLeaf(e,n,r){let o=n.keys.length>>>1,s={kind:"leaf",nodeId:this.pageStore.allocPage(),keys:n.keys.slice(o),nextLeafId:n.nextLeafId},i={...n,keys:n.keys.slice(0,o),nextLeafId:s.nodeId};this.writeNode(i),this.writeNode(s),this.propagateSplit(e,r,r.length-1,s.keys[0],s.nodeId)}propagateSplit(e,n,r,o,s){if(r<0){this.createNewRoot(e,o,s);return}let i=n[r],a=this.bisectRight(i.keys,o),l={...i,keys:[...i.keys.slice(0,a),o,...i.keys.slice(a)],children:[...i.children.slice(0,a+1),s,...i.children.slice(a+1)]};this.writeNode(l),l.keys.length>=128&&this.splitInternal(e,l,n,r)}splitInternal(e,n,r,o){let s=n.keys.length>>>1,i=n.keys[s],a={kind:"internal",nodeId:this.pageStore.allocPage(),keys:n.keys.slice(s+1),children:n.children.slice(s+1)},l={...n,keys:n.keys.slice(0,s),children:n.children.slice(0,s+1)};this.writeNode(l),this.writeNode(a),this.propagateSplit(e,r,o-1,i,a.nodeId)}createNewRoot(e,n,r){let o=this.pageStore.allocPage();this.writeNode({kind:"internal",nodeId:o,keys:[n],children:[e.rootNodeId,r]}),e.rootNodeId=o,e.height++}findLeafPath(e,n){let r=[],o=this.readNode(e.rootNodeId);for(;o.kind==="internal";)r.push(o),o=this.readNode(o.children[this.bisectRight(o.keys,n)]);return{ancestors:r,leaf:o}}bisectLeft(e,n){let r=0,o=e.length;for(;r<o;){let s=r+o>>>1;oe(e[s],n)<0?r=s+1:o=s}return r}bisectRight(e,n){let r=0,o=e.length;for(;r<o;){let s=r+o>>>1;oe(n,e[s])<0?o=s:r=s+1}return r}freeSubtree(e,n){if(n===1){this.pageStore.freePage(e);return}let r=this.readNode(e);for(let o of r.children)this.freeSubtree(o,n-1);this.pageStore.freePage(e)}readMeta(){let e=this.pageStore.readPage(this.metaPageNo);if(!e)throw new Error(`Index B-tree meta at page ${this.metaPageNo} not found`);return e}writeMeta(e){this.pageStore.writePage(this.metaPageNo,e)}readNode(e){let n=this.pageStore.readPage(e);if(!n)throw new Error(`B-tree node at page ${e} not found`);return n}writeNode(e){this.pageStore.writePage(e.nodeId,e)}createLeaf(e,n){let r=this.pageStore.allocPage();return this.writeNode({kind:"leaf",nodeId:r,keys:e,nextLeafId:n}),r}};function cl(t,e,n){switch(n){case"GREATER":t.lower=e,t.lowerInclusive=!1;break;case"GREATER_EQUAL":t.lower=e,t.lowerInclusive=!0;break;case"LESS":t.upper=e,t.upperInclusive=!1;break;case"LESS_EQUAL":t.upper=e,t.upperInclusive=!0;break}}function hs(t){let e={lowerInclusive:!0,upperInclusive:!0},n=[],r=[];for(let s of t)s.comparisonType==="EQUAL"?n.push({pos:s.columnPosition,value:s.value}):r.push(s);n.sort((s,i)=>s.pos-i.pos);let o=n.map(s=>s.value);for(let s of r){let i=o.length>0?[...o,s.value]:[s.value];cl(e,i,s.comparisonType)}return o.length>0&&(e.lower||(e.lower=o,e.lowerInclusive=!0),e.upper||(e.upper=o,e.upperInclusive=!0)),e}var ln=class{constructor(e,n){this.ps=e;this.getCatalog=n}ps;getCatalog;tree(e){let n=this.getCatalog().getIndex(e.toLowerCase());if(!n)throw new Error(`Index "${e}" not found in catalog`);return new tt(n.metaPageNo,this.ps,n.unique)}insert(e,n,r){this.tree(e).insert(n,r)}delete(e,n,r){this.tree(e).delete(n,r)}search(e,n){return this.tree(e).range(hs(n))}bulkLoad(e,n,r){let o=this.ps.allocPage();return new tt(o,this.ps,r).bulkLoad(n),o}dropIndex(e){this.tree(e).drop()}first(e){return this.tree(e).first()}last(e){return this.tree(e).last()}};var cn=class{constructor(e,n){this.metaPageNo=e;this.ps=n}metaPageNo;ps;insert(e){let n={...this.readMeta()},r=n.nextRowId++,o=this.findLeafPath(n,r),s=o.at(-1),i=this.bisectLeft(s.keys,r),a={...s,keys:[...s.keys.slice(0,i),r,...s.keys.slice(i)],values:[...s.values.slice(0,i),e,...s.values.slice(i)]};return n.size++,o[o.length-1]=a,a.keys.length>=128?this.splitLeaf(n,a,o):this.writeNode(a),this.writeMeta(n),r}get(e){let n=this.readMeta();if(n.size===0)return null;let r=this.findLeafPath(n,e).at(-1),o=this.bisectLeft(r.keys,e);return o<r.keys.length&&r.keys[o]===e?r.values[o]:null}update(e,n){let r=this.readMeta(),o=this.findLeafPath(r,e).at(-1),s=this.bisectLeft(o.keys,e);if(s>=o.keys.length||o.keys[s]!==e)throw new Error(`Row ${e} not found`);this.writeNode({...o,values:o.values.map((i,a)=>a===s?n:i)})}delete(e){let n={...this.readMeta()},r=this.findLeafPath(n,e).at(-1),o=this.bisectLeft(r.keys,e);o>=r.keys.length||r.keys[o]!==e||(this.writeNode({...r,keys:[...r.keys.slice(0,o),...r.keys.slice(o+1)],values:[...r.values.slice(0,o),...r.values.slice(o+1)]}),n.size--,this.writeMeta(n))}*scan(){let e=this.readMeta();if(e.size===0)return;let n=this.findLeftmostLeaf(e);for(;n;){for(let r=0;r<n.keys.length;r++)yield{rowId:n.keys[r],row:n.values[r]};n.nextLeafId!==null?n=this.readNode(n.nextLeafId):n=null}}drop(){let e=this.readMeta();this.freeSubtree(e.rootNodeId,e.height),this.ps.freePage(this.metaPageNo)}freeSubtree(e,n){if(n===1){this.ps.freePage(e);return}let r=this.readNode(e);for(let o of r.children)this.freeSubtree(o,n-1);this.ps.freePage(e)}splitLeaf(e,n,r){let o=n.keys.length>>>1,i={kind:"leaf",nodeId:this.ps.allocPage(),keys:n.keys.slice(o),values:n.values.slice(o),nextLeafId:n.nextLeafId},a={...n,keys:n.keys.slice(0,o),values:n.values.slice(0,o),nextLeafId:i.nodeId};this.writeNode(a),this.writeNode(i),this.propagateSplit(e,r,r.length-2,i.keys[0],i.nodeId)}propagateSplit(e,n,r,o,s){if(r<0){this.createNewRoot(e,o,s);return}let i=n[r],a=this.bisectRight(i.keys,o),l={...i,keys:[...i.keys.slice(0,a),o,...i.keys.slice(a)],children:[...i.children.slice(0,a+1),s,...i.children.slice(a+1)]};this.writeNode(l),l.keys.length>=128&&this.splitInternal(e,l,n,r)}splitInternal(e,n,r,o){let s=n.keys.length>>>1,i=n.keys[s],l={kind:"internal",nodeId:this.ps.allocPage(),keys:n.keys.slice(s+1),children:n.children.slice(s+1)},u={...n,keys:n.keys.slice(0,s),children:n.children.slice(0,s+1)};this.writeNode(u),this.writeNode(l),this.propagateSplit(e,r,o-1,i,l.nodeId)}createNewRoot(e,n,r){let o=this.ps.allocPage();this.writeNode({kind:"internal",nodeId:o,keys:[n],children:[e.rootNodeId,r]}),e.rootNodeId=o,e.height++}findLeafPath(e,n){let r=[],o=this.readNode(e.rootNodeId);for(r.push(o);o.kind==="internal";)o=this.readNode(o.children[this.bisectRight(o.keys,n)]),r.push(o);return r}findLeftmostLeaf(e){let n=this.readNode(e.rootNodeId);for(;n.kind==="internal";)n=this.readNode(n.children[0]);return n}bisectLeft(e,n){let r=0,o=e.length;for(;r<o;){let s=r+o>>>1;e[s]<n?r=s+1:o=s}return r}bisectRight(e,n){let r=0,o=e.length;for(;r<o;){let s=r+o>>>1;n<e[s]?o=s:r=s+1}return r}readMeta(){let e=this.ps.readPage(this.metaPageNo);if(!e)throw new Error(`Table B-tree meta at page ${this.metaPageNo} not found`);return e}writeMeta(e){this.ps.writePage(this.metaPageNo,e)}readNode(e){let n=this.ps.readPage(e);if(!n)throw new Error(`Table B-tree node at page ${e} not found`);return n}writeNode(e){this.ps.writePage(e.nodeId,e)}};var un=class{constructor(e,n){this.ps=e;this.getCatalog=n}ps;getCatalog;tree(e){let n=this.getCatalog().getTable(e);if(!n)throw new Error(`Table "${e}" not found in catalog`);return new cn(n.metaPageNo,this.ps)}createTable(){let e=this.ps.allocPage(),n=this.ps.allocPage(),r={kind:"leaf",nodeId:n,keys:[],values:[],nextLeafId:null},o={rootNodeId:n,height:1,nextRowId:0,size:0};return this.ps.writePage(n,r),this.ps.writePage(e,o),e}prepareInsert(e,n){return this.tree(e).insert(n)}prepareUpdate(e,n,r){return this.tree(e).update(n,r),n}prepareDelete(e,n){this.tree(e).delete(n)}*scanTable(e){yield*this.tree(e).scan()}readRow(e,n){return this.tree(e).get(n)}deleteTableData(e){this.tree(e).drop()}};var cr={EQUAL:"=",NOT_EQUAL:"!=",LESS:"<",GREATER:">",LESS_EQUAL:"<=",GREATER_EQUAL:">="},ul={ADD:"+",SUBTRACT:"-",MULTIPLY:"*",DIVIDE:"/",MOD:"%",CONCAT:"||"};function S(t){switch(t.expressionClass){case"BOUND_COLUMN_REF":return`${t.tableName}.${t.columnName}`;case"BOUND_CONSTANT":return pl(t.value);case"BOUND_PARAMETER":return`$${t.index+1}`;case"BOUND_COMPARISON":return`${S(t.left)} ${cr[t.comparisonType]} ${S(t.right)}`;case"BOUND_CONJUNCTION":return t.children.map(S).join(` ${t.conjunctionType} `);case"BOUND_OPERATOR":return dl(t.operatorType,t.children);case"BOUND_BETWEEN":return`${S(t.input)} BETWEEN ${S(t.lower)} AND ${S(t.upper)}`;case"BOUND_FUNCTION":return`${t.functionName}(${t.children.map(S).join(", ")})`;case"BOUND_AGGREGATE":return ml(t.functionName,t.isStar,t.distinct,t.children);case"BOUND_SUBQUERY":return`(${t.subqueryType} subquery)`;case"BOUND_CASE":return"CASE ...";case"BOUND_CAST":return`CAST(${S(t.child)} AS ${t.castType})`;case"BOUND_JSON_ACCESS":return S(t.child)+t.path.map(e=>e.type==="field"?`.${e.name}`:`[${e.value}]`).join("")}}function pl(t){return t===null?"NULL":typeof t=="string"?`'${t}'`:t instanceof Uint8Array?"x'...'":String(t)}function dl(t,e){return t==="NOT"?`NOT ${S(e[0])}`:t==="NEGATE"?`-${S(e[0])}`:t==="IS_NULL"?`${S(e[0])} IS NULL`:t==="IS_NOT_NULL"?`${S(e[0])} IS NOT NULL`:t==="IN"?`${S(e[0])} IN (...)`:t==="NOT_IN"?`${S(e[0])} NOT IN (...)`:`${S(e[0])} ${ul[t]??t} ${S(e[1])}`}function ml(t,e,n,r){return e?`${t}(*)`:`${t}(${n?"DISTINCT ":""}${r.map(S).join(", ")})`}function fl(t){switch(t.type){case"LOGICAL_GET":return hl(t);case"LOGICAL_FILTER":return`Filter (${t.expressions.map(S).join(" AND ")})`;case"LOGICAL_PROJECTION":return El(t);case"LOGICAL_AGGREGATE_AND_GROUP_BY":return gl(t);case"LOGICAL_COMPARISON_JOIN":return xl(t);case"LOGICAL_CROSS_PRODUCT":return"CrossJoin";case"LOGICAL_ORDER_BY":return yl(t);case"LOGICAL_LIMIT":return Tl(t);case"LOGICAL_DISTINCT":return"Distinct";case"LOGICAL_UNION":return t.all?"UnionAll":"Union";case"LOGICAL_INSERT":return`Insert ${t.tableName}`;case"LOGICAL_UPDATE":return`Update ${t.tableName}`;case"LOGICAL_DELETE":return`Delete ${t.tableName}`;case"LOGICAL_CREATE_TABLE":return`CreateTable ${t.schema.name}`;case"LOGICAL_CREATE_INDEX":{let e=t;return`CreateIndex ${e.index.name} on ${e.index.tableName}`}case"LOGICAL_ALTER_TABLE":{let e=t;return`AlterTable ${e.tableName} ${e.action.type}`}case"LOGICAL_DROP":{let e=t;return`Drop ${e.dropType} ${e.name}`}case"LOGICAL_CTE_REF":return`CTERef ${t.cteName}`;case"LOGICAL_MATERIALIZED_CTE":return`CTE ${t.cteName}`;case"LOGICAL_RECURSIVE_CTE":return`RecursiveCTE ${t.cteName}`;default:return`Unknown (${t.type})`}}function hl(t){let e;if(t.indexHint?.kind==="union"){let r=t.indexHint.branches.map(o=>o.indexDef.name).join(", ");e=`IndexUnionScan ${t.tableName} (${r})`}else t.indexHint?.kind==="scan"?t.indexHint.predicates.length===0&&t.indexHint.coveredFilters.length===0?e=`IndexOrderScan ${t.tableName} (${t.indexHint.indexDef.name})`:e=`IndexScan ${t.tableName} (${t.indexHint.indexDef.name})`:e=`Scan ${t.tableName}`;if(t.tableFilters.length===0)return e+Es(t);let n=t.tableFilters.map(r=>`${S(r.expression)} ${cr[r.comparisonType]} ${S(r.constant)}`).join(", ");return`${e} [${n}]${Es(t)}`}function El(t){return`Projection (${t.aliases.map((n,r)=>n??S(t.expressions[r])).join(", ")})`}function gl(t){if(t.minMaxHint)return`IndexMinMax [${t.minMaxHint.functionName}] (${t.minMaxHint.indexDef.name})`;let e=t.expressions.map(S).join(", ");return t.groups.length===0?`Aggregate [${e}]`:`Aggregate [${e}] group by (${t.groups.map(S).join(", ")})`}function xl(t){let e=t.conditions.map(n=>`${S(n.left)} ${cr[n.comparisonType]} ${S(n.right)}`).join(" AND ");return`HashJoin [${t.joinType}] (${e})`}function yl(t){return`Sort (${t.orders.map(n=>`${S(n.expression)} ${n.orderType==="ASCENDING"?"ASC":"DESC"}`).join(", ")})${t.topN!=null?` top=${t.topN}`:""}`}function Tl(t){let e=`Limit ${t.limitVal??"ALL"}`;return t.offsetVal>0&&(e+=` Offset ${t.offsetVal}`),e}function Es(t){return t.estimatedCardinality>0?` (~${t.estimatedCardinality} rows)`:""}function gs(t){let e=[];function n(r,o){e.push(" ".repeat(o)+fl(r));for(let s of r.children)n(s,o+1)}return n(t,0),e.join(`
|
|
5
|
+
`)}var K=class extends Error{constructor(e){super(e),this.name="EngineError"}},Me=class{constructor(e){this.executeFn=e}executeFn;async run(e=[]){return this.executeFn(e)}};var Cl=new Set(["INSERT_STATEMENT","UPDATE_STATEMENT","DELETE_STATEMENT","CREATE_TABLE_STATEMENT","CREATE_INDEX_STATEMENT","ALTER_TABLE_STATEMENT","DROP_STATEMENT"]);function Ol(t){return Cl.has(t)}var nt=class{constructor(e,n,r,o,s,i,a){this.sessionStore=e;this.parser=n;this.acquireWriteLock=r;this.releaseWriteLock=o;this.catchUp=s;this.getCatalog=i;this.onCatalogCommit=a;this.refreshCatalog(),this.rowManager=new un(e,()=>this.catalog),this.indexManager=new ln(e,()=>this.catalog)}sessionStore;parser;acquireWriteLock;releaseWriteLock;catchUp;getCatalog;onCatalogCommit;binder;rowManager;indexManager;catalog;lastCatalogVersion=-1;inTransaction=!1;transactionAborted=!1;catalogSnapshot=null;catalogDirty=!1;holdingWriteLock=!1;async execute(e,n){this.inTransaction||(this.catchUp(),this.refreshCatalog());let r=this.parser.parse(e),o=[];for(let s of r)o.push(await this.executeOne(s,n));return o}prepare(e){let n=this.parser.parse(e);if(n.length!==1)throw new K("prepare() requires exactly one statement");let r=n[0],o=this.getCatalog().version;return new Me(s=>{if(this.getCatalog().version===o)return this.executeOne(r,s);throw new K("prepared statement is stale: schema has changed since prepare()")})}getSchema(){return this.catchUp(),this.refreshCatalog(),this.catalog.snapshot()}close(){this.inTransaction&&this.rollbackTransaction(),this.tryReleaseWriteLock(),this.sessionStore=null,this.parser=null,this.catalog=null,this.binder=null}async executeOne(e,n){if(e.type==="TRANSACTION_STATEMENT")return this.executeTCL(e);if(e.type==="EXPLAIN_STATEMENT")return this.executeExplain(e);if(this.transactionAborted)throw new K("current transaction is aborted, commands ignored until end of transaction block");Ol(e.type)&&!this.holdingWriteLock&&(await this.acquireWriteLock(),this.holdingWriteLock=!0);let r=!this.inTransaction;r&&(this.catalogSnapshot=this.catalog.serialize());try{let o=this.runPipeline(e,n);return r&&(this.catalogDirty&&this.commitCatalog(),this.sessionStore.commit(),this.catalogSnapshot=null,this.catalogDirty=!1,this.tryReleaseWriteLock()),o}catch(o){throw this.sessionStore.rollback(),this.restoreCatalog(),this.catalogDirty=!1,r?(this.catalogSnapshot=null,this.tryReleaseWriteLock()):this.transactionAborted=!0,o}}executeExplain(e){let n=this.binder.bindStatement(e.statement),r=ar(n,this.catalog);return{type:"rows",rows:[{plan:gs(r)}]}}executeTCL(e){switch(e.transaction_type){case"BEGIN":return this.beginTransaction();case"COMMIT":return this.commitTransaction();case"ROLLBACK":return this.rollbackTransaction();default:let n=e.transaction_type;throw new K(`Unknown transaction type: ${n}`)}}beginTransaction(){if(this.inTransaction)throw new K("already in a transaction");return this.catalogSnapshot=this.catalog.serialize(),this.inTransaction=!0,{type:"ok",rowsAffected:0}}commitTransaction(){if(!this.inTransaction)return{type:"ok",rowsAffected:0};if(this.transactionAborted)throw this.endTransaction(),new K("current transaction is aborted, COMMIT treated as ROLLBACK");return this.catalogDirty&&this.commitCatalog(),this.sessionStore.commit(),this.endTransaction(),{type:"ok",rowsAffected:0}}rollbackTransaction(){return this.inTransaction?(this.transactionAborted||(this.sessionStore.rollback(),this.restoreCatalog()),this.endTransaction(),{type:"ok",rowsAffected:0}):{type:"ok",rowsAffected:0}}runPipeline(e,n){let r=this.binder.bindStatement(e),o=ar(r,this.catalog),s=ns(o,this.rowManager,this.catalog,this.indexManager,n),i=s.catalogChanges.length>0;for(let a of s.catalogChanges)this.applyCatalogChange(a);return i&&(this.binder=new Be(this.catalog)),(i||s.catalogDirty)&&(this.catalogDirty=!0),e.type==="SELECT_STATEMENT"?{type:"rows",rows:s.rows}:{type:"ok",rowsAffected:s.rowsAffected}}refreshCatalog(){let e=this.getCatalog();e.version!==this.lastCatalogVersion&&(this.catalog=e.clone(),this.lastCatalogVersion=e.version,this.binder=new Be(this.catalog))}restoreCatalog(){this.catalogSnapshot&&(this.catalog=ae.deserialize(this.catalogSnapshot),this.binder=new Be(this.catalog))}tryReleaseWriteLock(){this.holdingWriteLock&&(this.releaseWriteLock(),this.holdingWriteLock=!1)}endTransaction(){this.catalogSnapshot=null,this.catalogDirty=!1,this.inTransaction=!1,this.transactionAborted=!1,this.tryReleaseWriteLock()}applyCatalogChange(e){switch(e.type){case"CREATE_TABLE":this.catalog.addTable(e.schema);break;case"DROP_TABLE":this.catalog.removeTable(e.name);break;case"ALTER_TABLE":this.catalog.updateTable(e.after);break;case"CREATE_INDEX":this.catalog.addIndex(e.index);break;case"DROP_INDEX":this.catalog.removeIndex(e.name);break}}commitCatalog(){let e=this.catalog.prepareCommit();this.sessionStore.writeCatalog(e),this.onCatalogCommit(e)}};var pn=class t{constructor(e){this.storage=e}storage;catalog;parser=new Ge;writeLockHolder=null;dbName=null;webLockRelease=null;static async open(e){let n=new ke(e),s=await(await(await navigator.storage.getDirectory()).getFileHandle(`${e}.opfsql-wal`,{create:!0})).createSyncAccessHandle({mode:"readwrite-unsafe"}),i=new pt(n,s),a=await t.create(i);return a.dbName=e,a}static async create(e){let n=new ut(e);await n.open();let r=new t(n);return r.catalog=r.readCatalog(),r}createSession(){let e=this.storage.createSession(),n=async()=>{this.dbName&&await this.acquireWebLock(),this.acquireWriteLock(s)},r=()=>{this.webLockRelease?.(),this.webLockRelease=null,this.releaseWriteLock(s)},o=i=>{this.catalog=ae.deserialize(i)},s=new nt(e,this.parser,()=>n(),()=>r(),()=>this.catchUp(),()=>this.catalog,i=>o(i));return s}catchUp(){this.writeLockHolder===null&&this.storage.catchUp()?.catalog&&(this.catalog=this.readCatalog())}readCatalog(){let e=this.storage.readCatalog();return e?ae.deserialize(e):new ae}checkpoint(){this.storage.checkpoint()}close(){this.storage.close()}acquireWriteLock(e){if(this.writeLockHolder!==e){if(this.writeLockHolder!==null)throw new K("database is locked");this.writeLockHolder=e}}releaseWriteLock(e){this.writeLockHolder===e&&(this.writeLockHolder=null)}async acquireWebLock(){if(!this.webLockRelease)return new Promise((e,n)=>{let r=`opfsql:${this.dbName}:write`;navigator.locks.request(r,()=>{try{this.catchUp()}catch(o){return n(o),Promise.resolve()}return e(),new Promise(o=>{this.webLockRelease=o})})})}};export{pn as Engine,K as EngineError,ke as OPFSSyncStorage,Me as PreparedStatement};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BoundExpression, TableFilter } from '../binder/types.js';
|
|
2
|
+
export declare class FilterCombiner {
|
|
3
|
+
private equivalences;
|
|
4
|
+
private constantFilters;
|
|
5
|
+
private keyExpressions;
|
|
6
|
+
private remainingFilters;
|
|
7
|
+
addFilter(expr: BoundExpression): void;
|
|
8
|
+
private addSingleFilter;
|
|
9
|
+
private addEquivalence;
|
|
10
|
+
private addConstantFilter;
|
|
11
|
+
generateFilters(): BoundExpression[];
|
|
12
|
+
generateTableFilters(tableIndex: number): TableFilter[];
|
|
13
|
+
}
|