@ahmadmoussawi/webdb 0.0.0-stage → 0.1.1

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.
Files changed (106) hide show
  1. package/README.md +386 -2
  2. package/dist/constants.d.ts +18 -0
  3. package/dist/constants.d.ts.map +1 -0
  4. package/dist/core/index.d.ts +15 -0
  5. package/dist/core/index.d.ts.map +1 -0
  6. package/dist/core/js/buffer_pool.c.d.ts +142 -0
  7. package/dist/core/js/buffer_pool.c.d.ts.map +1 -0
  8. package/dist/core/js/catalog.c.d.ts +186 -0
  9. package/dist/core/js/catalog.c.d.ts.map +1 -0
  10. package/dist/core/js/codecs.c.d.ts +32 -0
  11. package/dist/core/js/codecs.c.d.ts.map +1 -0
  12. package/dist/core/js/index.d.ts +7 -0
  13. package/dist/core/js/index.d.ts.map +1 -0
  14. package/dist/core/js/page.c.d.ts +229 -0
  15. package/dist/core/js/page.c.d.ts.map +1 -0
  16. package/dist/core/js/page_table.c.d.ts +48 -0
  17. package/dist/core/js/page_table.c.d.ts.map +1 -0
  18. package/dist/core/js/vm.c.d.ts +11 -0
  19. package/dist/core/js/vm.c.d.ts.map +1 -0
  20. package/dist/core/js/vm.helpers.c.d.ts +124 -0
  21. package/dist/core/js/vm.helpers.c.d.ts.map +1 -0
  22. package/dist/core/types.d.ts +26 -0
  23. package/dist/core/types.d.ts.map +1 -0
  24. package/dist/core/wasm/embedded_wasm.d.ts +7 -0
  25. package/dist/core/wasm/embedded_wasm.d.ts.map +1 -0
  26. package/dist/core/wasm/wasm_core.d.ts +75 -0
  27. package/dist/core/wasm/wasm_core.d.ts.map +1 -0
  28. package/dist/host/api/index.d.ts +3 -0
  29. package/dist/host/api/index.d.ts.map +1 -0
  30. package/dist/host/api/query_builder.d.ts +216 -0
  31. package/dist/host/api/query_builder.d.ts.map +1 -0
  32. package/dist/host/api/webdb.d.ts +172 -0
  33. package/dist/host/api/webdb.d.ts.map +1 -0
  34. package/dist/host/compiler/compiler.d.ts +151 -0
  35. package/dist/host/compiler/compiler.d.ts.map +1 -0
  36. package/dist/host/compiler/expr_parser.d.ts +87 -0
  37. package/dist/host/compiler/expr_parser.d.ts.map +1 -0
  38. package/dist/host/compiler/index.d.ts +4 -0
  39. package/dist/host/compiler/index.d.ts.map +1 -0
  40. package/dist/host/compiler/planner/cost.d.ts +23 -0
  41. package/dist/host/compiler/planner/cost.d.ts.map +1 -0
  42. package/dist/host/compiler/planner/custom_order.d.ts +16 -0
  43. package/dist/host/compiler/planner/custom_order.d.ts.map +1 -0
  44. package/dist/host/compiler/planner/heuristic.d.ts +11 -0
  45. package/dist/host/compiler/planner/heuristic.d.ts.map +1 -0
  46. package/dist/host/compiler/planner/index.d.ts +34 -0
  47. package/dist/host/compiler/planner/index.d.ts.map +1 -0
  48. package/dist/host/compiler/planner/noop.d.ts +11 -0
  49. package/dist/host/compiler/planner/noop.d.ts.map +1 -0
  50. package/dist/host/compiler/planner/types.d.ts +100 -0
  51. package/dist/host/compiler/planner/types.d.ts.map +1 -0
  52. package/dist/host/compiler/planner/where_optimizer.d.ts +30 -0
  53. package/dist/host/compiler/planner/where_optimizer.d.ts.map +1 -0
  54. package/dist/host/compiler/planner.d.ts +2 -0
  55. package/dist/host/compiler/planner.d.ts.map +1 -0
  56. package/dist/host/driver/buffer_pool_driver.d.ts +94 -0
  57. package/dist/host/driver/buffer_pool_driver.d.ts.map +1 -0
  58. package/dist/host/driver/crash_recovery.d.ts +24 -0
  59. package/dist/host/driver/crash_recovery.d.ts.map +1 -0
  60. package/dist/host/driver/index.d.ts +4 -0
  61. package/dist/host/driver/index.d.ts.map +1 -0
  62. package/dist/host/driver/transaction_coordinator.d.ts +166 -0
  63. package/dist/host/driver/transaction_coordinator.d.ts.map +1 -0
  64. package/dist/host/storage/crc32.d.ts +24 -0
  65. package/dist/host/storage/crc32.d.ts.map +1 -0
  66. package/dist/host/storage/idb.d.ts +27 -0
  67. package/dist/host/storage/idb.d.ts.map +1 -0
  68. package/dist/host/storage/index.d.ts +8 -0
  69. package/dist/host/storage/index.d.ts.map +1 -0
  70. package/dist/host/storage/io.d.ts +60 -0
  71. package/dist/host/storage/io.d.ts.map +1 -0
  72. package/dist/host/storage/memory.d.ts +28 -0
  73. package/dist/host/storage/memory.d.ts.map +1 -0
  74. package/dist/host/storage/opfs.d.ts +31 -0
  75. package/dist/host/storage/opfs.d.ts.map +1 -0
  76. package/dist/host/storage/vfs.d.ts +36 -0
  77. package/dist/host/storage/vfs.d.ts.map +1 -0
  78. package/dist/host/storage/wal_codec.d.ts +56 -0
  79. package/dist/host/storage/wal_codec.d.ts.map +1 -0
  80. package/dist/index.d.ts +9 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/layouts/index.d.ts +5 -0
  83. package/dist/layouts/index.d.ts.map +1 -0
  84. package/dist/layouts/page_format.d.ts +163 -0
  85. package/dist/layouts/page_format.d.ts.map +1 -0
  86. package/dist/layouts/pool_format.d.ts +126 -0
  87. package/dist/layouts/pool_format.d.ts.map +1 -0
  88. package/dist/layouts/syspage_format.d.ts +499 -0
  89. package/dist/layouts/syspage_format.d.ts.map +1 -0
  90. package/dist/layouts/wal_format.d.ts +197 -0
  91. package/dist/layouts/wal_format.d.ts.map +1 -0
  92. package/dist/shared/c_runtime.d.ts +47 -0
  93. package/dist/shared/c_runtime.d.ts.map +1 -0
  94. package/dist/shared/index.d.ts +4 -0
  95. package/dist/shared/index.d.ts.map +1 -0
  96. package/dist/shared/page_provider.d.ts +12 -0
  97. package/dist/shared/page_provider.d.ts.map +1 -0
  98. package/dist/shared/vm_context.d.ts +73 -0
  99. package/dist/shared/vm_context.d.ts.map +1 -0
  100. package/dist/types/index.d.ts +338 -0
  101. package/dist/types/index.d.ts.map +1 -0
  102. package/dist/webdb.js +13059 -0
  103. package/dist/webdb.js.map +1 -0
  104. package/dist/webdb.umd.cjs +5 -0
  105. package/dist/webdb.umd.cjs.map +1 -0
  106. package/package.json +82 -4
@@ -0,0 +1,172 @@
1
+ import { ColumnDefinition, TableMeta, DbRow, DbValue, DataType, IndexOptions, AlterTableOperation, IndexDescriptor, TransactionOptions, UpsertOptions, SyncState, BeforeCommitHook, CommitHook, TableSubscriptionCallback } from '../../types/index.ts';
2
+ import { IVfsAdapter } from '../storage/vfs.ts';
3
+ import { Io } from '../storage/io.ts';
4
+ import { BufferPoolDriver, TransactionCoordinator } from '../driver/index.js';
5
+ import { QueryFilter, SortKey, GroupKey, AggExpr } from '../compiler/compiler.ts';
6
+ import { ParsedSelectExpr } from '../compiler/expr_parser.ts';
7
+ import { QueryPlanner } from '../compiler/planner/index.ts';
8
+ import { QueryBuilder, ExplainOutput, IDatabaseQueryExecutor, QueryExecutionOptions, JoinClause } from './query_builder.ts';
9
+ import { WasmCoreExports } from '../../core/index.ts';
10
+ export interface UdfDefinition {
11
+ deterministic?: boolean;
12
+ returnType?: DataType;
13
+ call: (...args: any[]) => any;
14
+ }
15
+ export { QueryBuilder, type ExplainOutput, type IDatabaseQueryExecutor, type QueryExecutionOptions, };
16
+ export interface WebDbOptions {
17
+ name: string;
18
+ storage?: "memory" | "idb" | "opfs";
19
+ vfs?: IVfsAdapter;
20
+ slotCount?: number;
21
+ maxQueryMemory?: number;
22
+ core?: "js" | "wasm";
23
+ wasmBinary?: ArrayBuffer | Uint8Array;
24
+ planner?: QueryPlanner;
25
+ initialData?: Uint8Array | ArrayBuffer;
26
+ }
27
+ export declare class WebDB implements IDatabaseQueryExecutor {
28
+ readonly vfs: IVfsAdapter;
29
+ readonly io: Io;
30
+ readonly driver: BufferPoolDriver;
31
+ readonly coreMode: "js" | "wasm";
32
+ readonly wasmCore?: WasmCoreExports;
33
+ private planner?;
34
+ /**
35
+ * Alias to driver for callers/tests that inspect the buffer pool.
36
+ */
37
+ get pool(): BufferPoolDriver;
38
+ readonly coordinator: TransactionCoordinator;
39
+ currentLeaseId: number | null;
40
+ private vmCtx;
41
+ private udfs;
42
+ private nextUdfId;
43
+ private tableMetaCache;
44
+ private tableTailPages;
45
+ private indexTailPages;
46
+ private beforeCommitHooks;
47
+ private commitHooks;
48
+ private subscriptions;
49
+ private activeTxChanges;
50
+ private activeTxOrigin;
51
+ private activeTxMeta?;
52
+ private activeTxId;
53
+ private nextAutoTxId;
54
+ private isRunningBeforeCommit;
55
+ private broadcastChannel;
56
+ private readonly instanceId;
57
+ private constructor();
58
+ static open(options: WebDbOptions): Promise<WebDB>;
59
+ getPlanner(): QueryPlanner | undefined;
60
+ setPlanner(planner?: QueryPlanner): this;
61
+ private validateIdentifier;
62
+ createTable(name: string, columns: ColumnDefinition[]): Promise<TableMeta>;
63
+ private _createTableInternal;
64
+ getTable(tableName: string): Promise<TableMeta>;
65
+ private _getTableInternal;
66
+ listTables(): Promise<TableMeta[]>;
67
+ private freeTableTreePages;
68
+ dropTable(tableName: string): Promise<void>;
69
+ private _dropTableInternal;
70
+ renameTable(oldName: string, newName: string): Promise<TableMeta>;
71
+ private _renameTableInternal;
72
+ renameColumn(tableName: string, oldColumnName: string, newColumnName: string): Promise<TableMeta>;
73
+ private _renameColumnInternal;
74
+ addColumn(tableName: string, column: ColumnDefinition, options?: {
75
+ defaultValue?: DbValue;
76
+ }): Promise<TableMeta>;
77
+ dropColumn(tableName: string, columnName: string): Promise<TableMeta>;
78
+ alterTable(tableName: string, operation: AlterTableOperation): Promise<TableMeta>;
79
+ private _executeTableRebuildAtomic;
80
+ private _rebuildTableSchemaInternal;
81
+ createIndex(tableName: string, columns: string | string[], options?: IndexOptions): Promise<void>;
82
+ private _createIndexInternal;
83
+ dropIndex(indexName: string): Promise<void>;
84
+ private _dropIndexInternal;
85
+ listIndexes(tableName?: string): Promise<IndexDescriptor[]>;
86
+ private extractIndexKey;
87
+ private probeIndexUnique;
88
+ private deleteFromIndex;
89
+ private insertIntoIndex;
90
+ private cloneRow;
91
+ private valuesEqual;
92
+ private extractPrimaryKey;
93
+ private serializePkKey;
94
+ private buildChangeset;
95
+ private notifySubscriptions;
96
+ private emitCommitAndSubscriptions;
97
+ onBeforeCommit(hook: BeforeCommitHook): () => void;
98
+ onCommit(hook: CommitHook): () => void;
99
+ subscribe(tables: string | string[] | "*", callback: TableSubscriptionCallback): () => void;
100
+ getSyncState(): SyncState;
101
+ private validateFilterColumns;
102
+ private matchesFilter;
103
+ private matchesFilters;
104
+ /**
105
+ * Deletes a sorted list of cell indices on `pageId` while maintaining exact
106
+ * secondary index `rowid` pointers for both the deleted cells and any surviving
107
+ * cells on `pageId` whose slot index shifts left.
108
+ */
109
+ private deleteCellsOnDataPageAndShiftIndexes;
110
+ private normalizeWhereOrPkFilters;
111
+ insert(tableName: string, row: DbRow, options?: TransactionOptions): Promise<void>;
112
+ insertMany(tableName: string, rows: DbRow[], options?: TransactionOptions): Promise<void>;
113
+ private _insertManyInternal;
114
+ update(tableName: string, whereOrPk: DbValue | Partial<DbRow>, patch: Partial<DbRow>, options?: TransactionOptions): Promise<number>;
115
+ executeUpdate(tableName: string, filters: QueryFilter[], patch: Partial<DbRow>, options?: TransactionOptions): Promise<number>;
116
+ private _executeUpdateInternal;
117
+ delete(tableName: string, whereOrPk: DbValue | Partial<DbRow>, options?: TransactionOptions): Promise<number>;
118
+ executeDelete(tableName: string, filters: QueryFilter[], options?: TransactionOptions): Promise<number>;
119
+ private _executeDeleteInternal;
120
+ upsert(tableName: string, row: DbRow, options?: UpsertOptions): Promise<"inserted" | "updated" | "ignored">;
121
+ upsertMany(tableName: string, rows: DbRow[], options?: UpsertOptions): Promise<{
122
+ inserted: number;
123
+ updated: number;
124
+ ignored: number;
125
+ }>;
126
+ private _upsertManyInLease;
127
+ private findFirstMatchingRow;
128
+ transaction<T>(callback: (tx: WebDB) => Promise<T>, options?: TransactionOptions): Promise<T>;
129
+ registerFunction(name: string, def: UdfDefinition | ((...args: any[]) => any)): this;
130
+ getUdf(name: string): {
131
+ id: number;
132
+ def: UdfDefinition;
133
+ } | undefined;
134
+ getUdfMap(): Map<string, number>;
135
+ getUdfDefs(): Map<string, UdfDefinition>;
136
+ from(tableName: string): QueryBuilder;
137
+ explainQuery(tableName: string, filters: QueryFilter[], options?: {
138
+ orderBy?: SortKey[];
139
+ groupBy?: (string | GroupKey)[];
140
+ aggregates?: AggExpr[];
141
+ having?: QueryFilter[];
142
+ select?: any;
143
+ selectExprs?: ParsedSelectExpr[];
144
+ joins?: JoinClause[];
145
+ limit?: number;
146
+ offset?: number;
147
+ planner?: QueryPlanner;
148
+ }): Promise<ExplainOutput>;
149
+ private _explainQueryInternal;
150
+ executeQuery(tableName: string, filters: QueryFilter[], options: QueryExecutionOptions): Promise<DbRow[]>;
151
+ private _executeQueryInternal;
152
+ /**
153
+ * Deduplicated Monotonic Checkpointing (Section 4.3):
154
+ * Replays committed WAL frames and resident memory slots to main storage,
155
+ * flushes main storage, and truncates WAL to 0.
156
+ */
157
+ checkpoint(): Promise<{
158
+ pagesWritten: number;
159
+ }>;
160
+ /**
161
+ * Exports the entire database as a self-contained binary image (totalPages * 4096 bytes)
162
+ * with verified IEEE 802.3 CRC32 checksums on every page.
163
+ */
164
+ exportBinary(): Promise<Uint8Array>;
165
+ /**
166
+ * Validates and atomically imports a binary WebDB database image (totalPages * 4096 bytes),
167
+ * replacing all pages, resetting the WAL, and pinning the imported schema catalog.
168
+ */
169
+ importBinary(data: Uint8Array | ArrayBuffer): Promise<void>;
170
+ close(): Promise<void>;
171
+ }
172
+ //# sourceMappingURL=webdb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webdb.d.ts","sourceRoot":"","sources":["../../../src/host/api/webdb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ import { OpCode, DataType, TableMeta, ColumnMeta, IndexDescriptor, JoinType } from '../../types/index.js';
2
+ import { VmKeyInfo } from '../../shared/vm_context.js';
3
+ import { ExprNode, ParsedSelectExpr } from './expr_parser.js';
4
+ import { QueryPlanner } from './planner.js';
5
+ export type ComparisonOp = "=" | "!=" | ">" | ">=" | "<" | "<=" | "like" | "not like" | "contains" | "starts_with" | "ends_with" | "in" | "not in";
6
+ export declare function getCmpOpcode(op: string | undefined): OpCode;
7
+ export type QueryFilterType = "null" | "cmp" | "expr" | "and" | "or" | "not" | "in";
8
+ export interface QueryFilter {
9
+ type: QueryFilterType;
10
+ colName?: string;
11
+ isNull?: boolean;
12
+ op?: ComparisonOp;
13
+ value?: any;
14
+ values?: any[];
15
+ notIn?: boolean;
16
+ expr?: ExprNode;
17
+ children?: QueryFilter[];
18
+ child?: QueryFilter;
19
+ }
20
+ export interface SortKey {
21
+ colName?: string;
22
+ expr?: ExprNode;
23
+ direction?: "asc" | "desc";
24
+ nullOrder?: "nulls_first" | "nulls_last";
25
+ }
26
+ export interface GroupKey {
27
+ colName?: string;
28
+ expr?: ExprNode;
29
+ }
30
+ export type AggFunc = "count" | "sum" | "avg" | "min" | "max";
31
+ export interface AggExpr {
32
+ func: AggFunc;
33
+ colName?: string;
34
+ alias?: string;
35
+ }
36
+ export interface JoinPlan {
37
+ type: JoinType;
38
+ table: TableMeta;
39
+ cursor: number;
40
+ leftCol: string;
41
+ op: ComparisonOp;
42
+ rightCol: string;
43
+ }
44
+ export interface QueryPlan {
45
+ table: TableMeta;
46
+ joinedTables?: JoinPlan[];
47
+ filters: QueryFilter[];
48
+ orderBy?: SortKey[];
49
+ groupBy?: (string | GroupKey)[];
50
+ aggregates?: AggExpr[];
51
+ having?: QueryFilter[];
52
+ selectExprs?: ParsedSelectExpr[];
53
+ udfNameMap?: Map<string, number>;
54
+ udfDefs?: Map<string, {
55
+ returnType?: DataType;
56
+ }>;
57
+ keyInfos?: VmKeyInfo[];
58
+ outputColumns?: ColumnMeta[];
59
+ limit?: number;
60
+ offset?: number;
61
+ planner?: QueryPlanner;
62
+ isOrderSatisfied?: boolean;
63
+ sortCostAvoided?: number;
64
+ }
65
+ export declare class BytecodeEmitter {
66
+ private buffer;
67
+ private textEncoder;
68
+ emitUint8(val: number): number;
69
+ emitUint16(val: number): number;
70
+ emitUint32(val: number): number;
71
+ emitInt32(val: number): number;
72
+ emitFloat64(val: number): number;
73
+ emitString(str: string): number;
74
+ emitBytes(bytes: Uint8Array): number;
75
+ patchUint16(pos: number, val: number): void;
76
+ currentOffset(): number;
77
+ toByteArray(): Uint8Array;
78
+ }
79
+ export declare function normalizeFilter(filter: QueryFilter): QueryFilter;
80
+ export declare function buildRootFilter(filters: QueryFilter[]): QueryFilter | null;
81
+ export declare function collectLeafFilters(filter: QueryFilter): QueryFilter[];
82
+ export declare function getTopLevelConjunctionFilters(rootFilter: QueryFilter | null): QueryFilter[];
83
+ export interface ResolvedColumn {
84
+ tableIdx: number;
85
+ cursor: number;
86
+ colIdx: number;
87
+ col: ColumnMeta;
88
+ table: TableMeta;
89
+ }
90
+ export declare function resolveColumnAcrossTables(colName: string, tables: TableMeta[]): ResolvedColumn | null;
91
+ export declare function inferExprType(expr: ExprNode, table: TableMeta, udfDefs?: Map<string, {
92
+ returnType?: DataType;
93
+ }>, tables?: TableMeta[]): DataType;
94
+ export declare function emitExpression(expr: ExprNode, table: TableMeta, emitter: BytecodeEmitter, cursor: number, targetReg: number, allocReg: () => number, udfNameMap?: Map<string, number>, resolveReg?: (name?: string, expr?: ExprNode) => number | undefined, tables?: TableMeta[]): void;
95
+ export interface CandidateIndexScan {
96
+ index: IndexDescriptor;
97
+ scanType: "point" | "range" | "multi_point";
98
+ seekFilter?: QueryFilter;
99
+ filterIndex: number;
100
+ keyType: DataType;
101
+ compositeValue?: Uint8Array;
102
+ inValues?: any[];
103
+ satisfiesOrderBy?: boolean;
104
+ }
105
+ /**
106
+ * Returns minimum scalar key value for DataType when seeking the start of an index.
107
+ */
108
+ export declare function getMinKeyValueForType(type: DataType): any;
109
+ /**
110
+ * Tests whether a secondary index satisfies the query's ORDER BY keys directly.
111
+ * Forward B-Tree scans naturally stream in ASC order.
112
+ */
113
+ export declare function isIndexAlignedWithOrderBy(index: IndexDescriptor, table: TableMeta, orderBy?: SortKey[], equalityColumns?: Set<string>): boolean;
114
+ /**
115
+ * Tests whether a join plan preserves the requested ORDER BY.
116
+ * In a nested loop join, if all ORDER BY keys belong to the driving table (Table 0)
117
+ * and are sorted in ASC order, the outer loop determines the output order.
118
+ */
119
+ export declare function canJoinPreserveOrder(drivingTable: TableMeta, joinedTables: JoinPlan[], orderBy?: SortKey[], allTables?: TableMeta[], selectExprs?: ParsedSelectExpr[]): boolean;
120
+ export declare function chooseIndexScan(table: TableMeta, candidateFilters: QueryFilter[], leafFilters?: QueryFilter[], orderBy?: SortKey[]): CandidateIndexScan | null;
121
+ export interface JoinIndexCandidate {
122
+ index: IndexDescriptor;
123
+ isUnique: boolean;
124
+ innerCol: ResolvedColumn;
125
+ outerCol: ResolvedColumn;
126
+ indexCursor: number;
127
+ }
128
+ export declare function chooseJoinIndex(joinPlan: JoinPlan, innerTable: TableMeta, innerTableIdx: number, allTables: TableMeta[], indexCursor: number): JoinIndexCandidate | null;
129
+ /**
130
+ * Compiles a QueryPlan into an executable bytecode array.
131
+ */
132
+ export declare function compileQuery(plan: QueryPlan, options?: {
133
+ planner?: QueryPlanner;
134
+ }): Uint8Array;
135
+ export interface DisassembledInstruction {
136
+ addr: number;
137
+ opcode: string;
138
+ p1: string;
139
+ p2: string;
140
+ p3: string;
141
+ comment: string;
142
+ }
143
+ /**
144
+ * Disassembles binary bytecode into human-readable instructions.
145
+ */
146
+ export declare function disassembleBytecode(bytecode: Uint8Array, table?: TableMeta): DisassembledInstruction[];
147
+ /**
148
+ * Formats a list of disassembled instructions into an ASCII table string.
149
+ */
150
+ export declare function formatDisassembly(instructions: DisassembledInstruction[]): string;
151
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../../src/host/compiler/compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ import { DbRow } from '../../types/index.js';
2
+ export type BinaryOp = '+' | '-' | '*' | '/' | '%' | '=' | '!=' | '<' | '<=' | '>' | '>=';
3
+ export type ExprNode = {
4
+ type: 'col';
5
+ name: string;
6
+ } | {
7
+ type: 'literal';
8
+ value: number | string | boolean | null;
9
+ } | {
10
+ type: 'binary';
11
+ op: BinaryOp;
12
+ left: ExprNode;
13
+ right: ExprNode;
14
+ } | {
15
+ type: 'fn';
16
+ name: string;
17
+ args: ExprNode[];
18
+ };
19
+ export interface ParsedSelectExpr {
20
+ expr: ExprNode;
21
+ alias: string;
22
+ }
23
+ export declare const BUILTIN_AGGREGATES: Set<string>;
24
+ export declare const BUILTIN_SCALARS: Set<string>;
25
+ export declare function isAggregateFunction(name: string): boolean;
26
+ export declare function isBuiltinScalarFunction(name: string): boolean;
27
+ export declare function isBuiltinFunction(name: string): boolean;
28
+ export declare function validateClause(expr: ExprNode, clause: 'select' | 'where' | 'having' | 'orderBy'): void;
29
+ /**
30
+ * Parses a raw SQL expression string into an AST ExprNode.
31
+ */
32
+ export declare function parseExpression(sql: string): ExprNode;
33
+ /**
34
+ * Derives a human-friendly default alias if no explicit `AS alias` is provided.
35
+ */
36
+ export declare function deriveDefaultAlias(expr: ExprNode): string;
37
+ /**
38
+ * Parses a select clause item string (e.g. "abs(salary) as abs_salary" or "name").
39
+ */
40
+ export declare function parseSelectExpr(raw: string): ParsedSelectExpr;
41
+ export declare class ExpressionBuilder {
42
+ readonly node: ExprNode;
43
+ constructor(node: ExprNode);
44
+ add(other: ExprNode | ExpressionBuilder | number | string): ExpressionBuilder;
45
+ sub(other: ExprNode | ExpressionBuilder | number | string): ExpressionBuilder;
46
+ mul(other: ExprNode | ExpressionBuilder | number | string): ExpressionBuilder;
47
+ div(other: ExprNode | ExpressionBuilder | number | string): ExpressionBuilder;
48
+ mod(other: ExprNode | ExpressionBuilder | number | string): ExpressionBuilder;
49
+ eq(other: ExprNode | ExpressionBuilder | number | string | boolean | null): ExpressionBuilder;
50
+ ne(other: ExprNode | ExpressionBuilder | number | string | boolean | null): ExpressionBuilder;
51
+ lt(other: ExprNode | ExpressionBuilder | number | string): ExpressionBuilder;
52
+ lte(other: ExprNode | ExpressionBuilder | number | string): ExpressionBuilder;
53
+ gt(other: ExprNode | ExpressionBuilder | number | string): ExpressionBuilder;
54
+ gte(other: ExprNode | ExpressionBuilder | number | string): ExpressionBuilder;
55
+ as(alias: string): ParsedSelectExpr;
56
+ }
57
+ export declare function col(name: string): ExpressionBuilder;
58
+ export declare function exp(sqlStr: string): ExpressionBuilder;
59
+ export declare const sql: typeof exp;
60
+ export interface FnNamespace {
61
+ (name: string, ...args: (ExprNode | ExpressionBuilder | number | string)[]): ExpressionBuilder;
62
+ upper(expr: ExprNode | ExpressionBuilder | string): ExpressionBuilder;
63
+ lower(expr: ExprNode | ExpressionBuilder | string): ExpressionBuilder;
64
+ length(expr: ExprNode | ExpressionBuilder | string): ExpressionBuilder;
65
+ substr(expr: ExprNode | ExpressionBuilder | string, start: number | ExprNode | ExpressionBuilder, len?: number | ExprNode | ExpressionBuilder): ExpressionBuilder;
66
+ trim(expr: ExprNode | ExpressionBuilder | string): ExpressionBuilder;
67
+ abs(expr: ExprNode | ExpressionBuilder | number): ExpressionBuilder;
68
+ round(expr: ExprNode | ExpressionBuilder | number): ExpressionBuilder;
69
+ floor(expr: ExprNode | ExpressionBuilder | number): ExpressionBuilder;
70
+ ceil(expr: ExprNode | ExpressionBuilder | number): ExpressionBuilder;
71
+ count(expr?: ExprNode | ExpressionBuilder | string): ExpressionBuilder;
72
+ sum(expr: ExprNode | ExpressionBuilder | string): ExpressionBuilder;
73
+ avg(expr: ExprNode | ExpressionBuilder | string): ExpressionBuilder;
74
+ min(expr: ExprNode | ExpressionBuilder | string): ExpressionBuilder;
75
+ max(expr: ExprNode | ExpressionBuilder | string): ExpressionBuilder;
76
+ concat(...exprs: (ExprNode | ExpressionBuilder | string)[]): ExpressionBuilder;
77
+ coalesce(...exprs: (ExprNode | ExpressionBuilder | string | null)[]): ExpressionBuilder;
78
+ }
79
+ export declare const fn: FnNamespace;
80
+ /**
81
+ * Evaluates an ExprNode AST against a database row.
82
+ * Used for fallback projection and post-processing.
83
+ */
84
+ export declare function evalExprNode(expr: ExprNode, row: DbRow, udfs?: Map<string, {
85
+ call: (...args: any[]) => any;
86
+ }> | Record<string, (...args: any[]) => any> | ((name: string) => ((...args: any[]) => any) | undefined)): any;
87
+ //# sourceMappingURL=expr_parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expr_parser.d.ts","sourceRoot":"","sources":["../../../src/host/compiler/expr_parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './compiler.js';
2
+ export * from './expr_parser.js';
3
+ export * from './planner/index.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/host/compiler/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { QueryPlan } from '../compiler.js';
2
+ import { QueryPlanner, OptimizedPlanResult } from './types.js';
3
+ export interface CostBasedPlannerOptions {
4
+ indexSeekCost?: number;
5
+ indexNextCost?: number;
6
+ rowEvalCost?: number;
7
+ }
8
+ /**
9
+ * CostBasedPlanner unifies WHERE filter optimization and JOIN planning:
10
+ * - Detects contradictions and prunes redundant/subsumed WHERE conditions.
11
+ * - Infers transitive filters across join boundaries.
12
+ * - Evaluates join permutations with Dynamic Programming to minimize total cost.
13
+ */
14
+ export declare class CostBasedPlanner implements QueryPlanner {
15
+ readonly name = "cost";
16
+ private indexSeekCost;
17
+ private indexNextCost;
18
+ private rowEvalCost;
19
+ constructor(options?: CostBasedPlannerOptions);
20
+ optimize(plan: QueryPlan): OptimizedPlanResult;
21
+ private evaluateJoinStep;
22
+ }
23
+ //# sourceMappingURL=cost.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cost.d.ts","sourceRoot":"","sources":["../../../../src/host/compiler/planner/cost.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EAIV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,mBAAmB,EAapB,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACnD,QAAQ,CAAC,IAAI,UAAU;IACvB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,CAAC,EAAE,uBAAuB;IAM7C,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB;IAuX9C,OAAO,CAAC,gBAAgB;CAyHzB"}
@@ -0,0 +1,16 @@
1
+ import { TableMeta } from '../../../types/index.js';
2
+ import { QueryPlan } from '../compiler.js';
3
+ import { QueryPlanner, OptimizedPlanResult } from './types.js';
4
+ export type TableOrderComparator = (a: TableMeta, b: TableMeta) => number;
5
+ export type CustomOrderSpec = string[] | TableOrderComparator;
6
+ /**
7
+ * CustomOrderPlanner executes joins according to an explicit table order or custom comparator.
8
+ * Join conditions and projections are automatically reconstructed to match the custom table order.
9
+ */
10
+ export declare class CustomOrderPlanner implements QueryPlanner {
11
+ readonly name = "custom-order";
12
+ private orderSpec?;
13
+ constructor(orderSpec?: CustomOrderSpec);
14
+ optimize(plan: QueryPlan): OptimizedPlanResult;
15
+ }
16
+ //# sourceMappingURL=custom_order.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom_order.d.ts","sourceRoot":"","sources":["../../../../src/host/compiler/planner/custom_order.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EACL,SAAS,EAKV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,mBAAmB,EAMpB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,KAAK,MAAM,CAAC;AAC1E,MAAM,MAAM,eAAe,GAAG,MAAM,EAAE,GAAG,oBAAoB,CAAC;AAE9D;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IACrD,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAkB;gBAExB,SAAS,CAAC,EAAE,eAAe;IAIvC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB;CAkJ/C"}
@@ -0,0 +1,11 @@
1
+ import { QueryPlan } from '../compiler.js';
2
+ import { QueryPlanner, OptimizedPlanResult } from './types.js';
3
+ /**
4
+ * HeuristicPlanner performs greedy nearest-neighbor join ordering.
5
+ * It is fast (O(N^2)), lightweight, and handles common join patterns without full DP enumeration.
6
+ */
7
+ export declare class HeuristicPlanner implements QueryPlanner {
8
+ readonly name = "heuristic";
9
+ optimize(plan: QueryPlan): OptimizedPlanResult;
10
+ }
11
+ //# sourceMappingURL=heuristic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heuristic.d.ts","sourceRoot":"","sources":["../../../../src/host/compiler/planner/heuristic.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EAIV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,mBAAmB,EAWpB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,YAAY;IACnD,QAAQ,CAAC,IAAI,eAAe;IAE5B,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB;CAyQ/C"}
@@ -0,0 +1,34 @@
1
+ import { QueryPlan } from '../compiler.js';
2
+ import { QueryPlanner, OptimizedPlanResult } from './types.js';
3
+ import { CostBasedPlanner } from './cost.js';
4
+ import { HeuristicPlanner } from './heuristic.js';
5
+ import { NoOpPlanner } from './noop.js';
6
+ export * from './types.js';
7
+ export * from './cost.js';
8
+ export * from './heuristic.js';
9
+ export * from './noop.js';
10
+ export * from './custom_order.js';
11
+ export * from './where_optimizer.js';
12
+ /**
13
+ * CustomPlanner allows supplying a custom optimization function.
14
+ */
15
+ export declare class CustomPlanner implements QueryPlanner {
16
+ private fn;
17
+ readonly name = "custom";
18
+ constructor(fn: (plan: QueryPlan) => OptimizedPlanResult);
19
+ optimize(plan: QueryPlan): OptimizedPlanResult;
20
+ }
21
+ export declare const CustomQueryPlanner: typeof CustomPlanner;
22
+ export declare const DefaultQueryPlanner: typeof CostBasedPlanner;
23
+ export declare const CostBasedQueryPlanner: typeof CostBasedPlanner;
24
+ export declare const HeuristicQueryPlanner: typeof HeuristicPlanner;
25
+ export declare const NoOpQueryPlanner: typeof NoOpPlanner;
26
+ /**
27
+ * Resolves a QueryPlanner instance, defaulting to CostBasedPlanner.
28
+ */
29
+ export declare function resolveQueryPlanner(planner?: QueryPlanner | null): QueryPlanner;
30
+ /**
31
+ * Optimizes a complete QueryPlan using the resolved QueryPlanner.
32
+ */
33
+ export declare function optimizeQueryPlan(plan: QueryPlan, planner?: QueryPlanner | null): OptimizedPlanResult;
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/host/compiler/planner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,YAAY,EACZ,mBAAmB,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AAErC;;GAEG;AACH,qBAAa,aAAc,YAAW,YAAY;IAEpC,OAAO,CAAC,EAAE;IADtB,QAAQ,CAAC,IAAI,YAAY;gBACL,EAAE,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,mBAAmB;IAChE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB;CAG/C;AAED,eAAO,MAAM,kBAAkB,sBAAgB,CAAC;AAChD,eAAO,MAAM,mBAAmB,yBAAmB,CAAC;AACpD,eAAO,MAAM,qBAAqB,yBAAmB,CAAC;AACtD,eAAO,MAAM,qBAAqB,yBAAmB,CAAC;AACtD,eAAO,MAAM,gBAAgB,oBAAc,CAAC;AAI5C;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,GAC5B,YAAY,CAEd;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,SAAS,EACf,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,GAC5B,mBAAmB,CAGrB"}
@@ -0,0 +1,11 @@
1
+ import { QueryPlan } from '../compiler.js';
2
+ import { QueryPlanner, OptimizedPlanResult } from './types.js';
3
+ /**
4
+ * NoOpPlanner preserves the exact declared query join order (straight join).
5
+ * It still partitions single-table filters for early pushdown without reordering tables.
6
+ */
7
+ export declare class NoOpPlanner implements QueryPlanner {
8
+ readonly name = "noop";
9
+ optimize(plan: QueryPlan): OptimizedPlanResult;
10
+ }
11
+ //# sourceMappingURL=noop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noop.d.ts","sourceRoot":"","sources":["../../../../src/host/compiler/planner/noop.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EAKV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,mBAAmB,EAIpB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,qBAAa,WAAY,YAAW,YAAY;IAC9C,QAAQ,CAAC,IAAI,UAAU;IAEvB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,mBAAmB;CA0E/C"}