@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,124 @@
1
+ import { VmStatus, ColumnMeta } from '../../types/index.ts';
2
+ import { u32, i32, i64, f64 } from '../types.ts';
3
+ import { VmCursor, VmContext, VmKeyInfo, VmSorter, VmSorterEntry, VmAggBucket } from '../../shared/index.ts';
4
+ /**
5
+ * Returns the active cursor for cursor_idx (0..15), falling back to ctx.cursor.
6
+ */
7
+ export declare function get_cursor(ctx: VmContext, cursor_idx: number): VmCursor;
8
+ /**
9
+ * Resolves the byte offset in linear memory for a given page_id.
10
+ * If the buffer pool page-to-slot table is populated, maps via the resident slot.
11
+ * Otherwise falls back to standalone direct calculation: (page_id - 1) * PAGE_SIZE.
12
+ */
13
+ export declare function resolve_page_offset(view: DataView, page_id: number): number;
14
+ /**
15
+ * Three-Valued Logic (3VL) comparator for evaluation registers.
16
+ * If either value is null or undefined, returns is_unknown = true.
17
+ */
18
+ export declare function compare_3vl(val_a: any, val_b: any): {
19
+ result: number;
20
+ is_unknown: boolean;
21
+ };
22
+ /**
23
+ * @export_c
24
+ */
25
+ export declare function fnv1a_32_bytes(data: Uint8Array, len: u32): u32;
26
+ /**
27
+ * @export_c
28
+ */
29
+ export declare function sql_like_match_raw(str: string, str_len: u32, pattern: string, pat_len: u32): i32;
30
+ export interface Compare3VLResult {
31
+ result: i32;
32
+ is_unknown: i32;
33
+ }
34
+ /**
35
+ * @export_c
36
+ */
37
+ export declare function compare_3vl_int64(a: i64, a_null: i32, b: i64, b_null: i32): Compare3VLResult;
38
+ /**
39
+ * @export_c
40
+ */
41
+ export declare function compare_3vl_float64(a: f64, a_null: i32, b: f64, b_null: i32): Compare3VLResult;
42
+ /**
43
+ * @export_c
44
+ */
45
+ export declare function compare_3vl_bytes(a: Uint8Array, a_len: u32, a_null: i32, b: Uint8Array, b_len: u32, b_null: i32): Compare3VLResult;
46
+ /**
47
+ * Standard SQL LIKE pattern matcher supporting '%' (any sequence) and '_' (any single character).
48
+ * Case-insensitive for ASCII matching according to SQLite semantics.
49
+ */
50
+ export declare function sql_like_match(str: string, pattern: string): boolean;
51
+ /**
52
+ * Compares two sets of sort keys according to KeyInfo descriptor.
53
+ * Strictly adheres to SQLite NULL collation (NULL is smaller than any non-NULL value)
54
+ * and honors independent per-column ASC/DESC and NULLS_FIRST/NULLS_LAST.
55
+ */
56
+ export declare function compare_sorter_keys(keys_a: any[], keys_b: any[], key_info: VmKeyInfo): number;
57
+ /**
58
+ * Compares sort keys stored in contiguous registers against a target entry's keys.
59
+ * Avoids allocating an intermediate array for rejected Top-K candidates.
60
+ */
61
+ export declare function compare_registers_to_sorter_keys(registers: any[], start_reg: number, keys_b: any[], key_info: VmKeyInfo): number;
62
+ /**
63
+ * 32-bit FNV-1a hash over grouping key values.
64
+ * Returns non-zero uint32 (reserving 0 as empty bucket marker).
65
+ */
66
+ export declare function fnv1a_32(values: any[]): number;
67
+ /**
68
+ * Checks equality between two sets of grouping keys.
69
+ * In SQL GROUP BY: two NULLs in grouping columns are considered identical!
70
+ */
71
+ export declare function group_keys_match(keys_a: any[], keys_b: any[]): boolean;
72
+ /**
73
+ * Allocates and initializes an array of empty aggregate buckets.
74
+ */
75
+ export declare function create_agg_buckets(capacity: number): VmAggBucket[];
76
+ /**
77
+ * Sifts down an entry at index in a max-heap of top-K entries.
78
+ * The root (index 0) contains the worst entry (largest/latest in sorted order).
79
+ */
80
+ export declare function heap_sift_down(entries: VmSorterEntry[], index: number, length: number, key_info: VmKeyInfo): void;
81
+ /**
82
+ * Sorts sorter entries using collation keys and initializes readIdx at offset.
83
+ */
84
+ export declare function sort_sorter_entries(sorter: VmSorter): void;
85
+ /**
86
+ * Copies a contiguous slice of row bytes from linear memory.
87
+ */
88
+ export declare function copy_row_bytes(view: DataView, offset: number, length: number): Uint8Array;
89
+ /**
90
+ * Inserts or replaces a row entry into the in-arena sorter.
91
+ * Employs a Top-K bounded max-heap optimization when max_k > 0.
92
+ */
93
+ export declare function sorter_insert_row(ctx: VmContext, sorter: VmSorter, keys: any[], cursor_row_offset: number, row_len: number, view: DataView, max_k: number): VmStatus;
94
+ /**
95
+ * Serializes register values into a binary row based on the current query schema context.
96
+ *
97
+ * Responsibilities across the 3 branches:
98
+ * 1. Explicit Output Projection (`ctx.outputColumns`):
99
+ * Handles queries with transformed output schemas (e.g. GROUP BY aggregations,
100
+ * computed expressions, or column aliases) defined in `ctx.outputColumns`.
101
+ * 2. Physical Table Schema (`ctx.table.columns`):
102
+ * Handles standard row scans where the number of emitted registers
103
+ * matches the physical table schema in `ctx.table`.
104
+ * 3. Dynamic Runtime Type Inference (Fallback):
105
+ * Handles ad-hoc expressions, partial projections, or subqueries lacking
106
+ * pre-compiled schema metadata, inferring data types (INT32, FLOAT64, INT64, BLOB, TEXT)
107
+ * directly from register values.
108
+ */
109
+ export declare function serialize_result_registers(ctx: VmContext, start_reg: number, num_cols: number): Uint8Array;
110
+ /**
111
+ * Writes serialized row bytes into the 64KB Output Result Buffer.
112
+ * Prepends a 2-byte uint16 length prefix. Yields BUFFER_FULL on overflow.
113
+ */
114
+ export declare function emit_to_result_buffer(ctx: VmContext, view: DataView, row_bytes: Uint8Array, instr_pc: number): VmStatus;
115
+ /**
116
+ * Tests whether a column in the row is marked NULL in the null-bitmap.
117
+ */
118
+ export declare function row_is_null(view: DataView, null_bitmap_offset: number, col_idx: number): boolean;
119
+ /**
120
+ * Computes the byte offset of a fixed-width column within a row record,
121
+ * or the start of the variable-length offset table if target_col_idx == column_count.
122
+ */
123
+ export declare function compute_fixed_column_offset(view: DataView, null_bitmap_offset: number, null_bitmap_bytes: number, columns: ColumnMeta[], target_col_idx: number): number;
124
+ //# sourceMappingURL=vm.helpers.c.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vm.helpers.c.d.ts","sourceRoot":"","sources":["../../../src/core/js/vm.helpers.c.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Primitive C-compatible type aliases for the WebDB Core Engine.
3
+ * Used by the TypeScript-to-C Transpiler to emit exact C native types.
4
+ */
5
+ export type u8 = number;
6
+ export type u16 = number;
7
+ export type u32 = number;
8
+ export type i8 = number;
9
+ export type i16 = number;
10
+ export type i32 = number;
11
+ export type u64 = bigint;
12
+ export type i64 = bigint;
13
+ export type f64 = number;
14
+ export type byte_ptr = number;
15
+ export type c_bool = boolean | number;
16
+ export type const_u8_ptr = Uint8Array | number;
17
+ export type u8_ptr = Uint8Array | number;
18
+ export type const_char_ptr = string | number;
19
+ export type char_ptr = string | number;
20
+ /**
21
+ * Compile-time intrinsic helper.
22
+ * In TypeScript / Vitest execution, returns jsFallback.
23
+ * In C transpilation, the transpiler emits cCode verbatim instead of calling this function.
24
+ */
25
+ export declare function c_inline<T>(cCode: string, jsFallback: T): T;
26
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,EAAE,GAAG,MAAM,CAAC;AACxB,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AACzB,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AACzB,MAAM,MAAM,EAAE,GAAG,MAAM,CAAC;AACxB,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AACzB,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AACzB,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AACzB,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AACzB,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC;AACzB,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC9B,MAAM,MAAM,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AACtC,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;AAC/C,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;AACzC,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAC7C,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvC;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAE3D"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Embedded WebDB Core WebAssembly binary (Base64 encoded).
3
+ * Auto-generated by scripts/build_wasm.js. Do not edit manually.
4
+ */
5
+ export declare const WEBDB_CORE_WASM_BASE64 = "AGFzbQEAAAABcBFgAX8Bf2ACf38AYAJ/fwF/YAN/f38AYAN/f38Bf2AEf39/fwF/YAAAYAV/f39/fwF/YAN/f34Bf2ACf34Bf2ABfwBgBH9/f38AYAV/f39/fwBgBX9+f35/AGAFf3x/fH8AYAd/f39/f39/AGAAAX8CDwEDZW52Bm1lbW9yeQIAAgNIRwYAAAQAAwQDAgQFBAACAwcFAQECAwEAAQABAAEAAQABAAECAwAAAQABAQgJAQIAAAoAAQAAAAAAAwAAAgILDAACBQ0ODwUQBggBfwFBgIAECwfYDUwPX19zdGFja19wb2ludGVyAwAHaGV4X3ZhbAABEGNyb2NrZm9yZF9kZWNvZGUAAgt1dWlkX2VuY29kZQADBnN0cmxlbgAEC3V1aWRfZGVjb2RlAAULdWxpZF9lbmNvZGUABgt1bGlkX2RlY29kZQAHD3BhZ2VfdGFibGVfaGFzaAAIDnBhZ2VfdGFibGVfZ2V0AAkOcGFnZV90YWJsZV9zZXQAChFwYWdlX3RhYmxlX2RlbGV0ZQALGGJ1Zl9wb29sX2dldF9zbG90X29mZnNldAAMGmJ1Zl9wb29sX3JlYWRfc2xvdF90b19wYWdlAA0bYnVmX3Bvb2xfd3JpdGVfc2xvdF90b19wYWdlAA4aYnVmX3Bvb2xfZ2V0X3Jlc2lkZW50X3Nsb3QACRRidWZfcG9vbF9hc3NpZ25fc2xvdAAPFmJ1Zl9wb29sX3VuYXNzaWduX3Nsb3QAEBNidWZfcG9vbF9tYXJrX2RpcnR5ABEUYnVmX3Bvb2xfY2xlYXJfZGlydHkAEhFidWZfcG9vbF9pc19kaXJ0eQATCXBhZ2VfaW5pdAAUDnBhZ2VfaW5pdF9mcmVlABUNcGFnZV9nZXRfdHlwZQAWDXBhZ2Vfc2V0X3R5cGUAFxNwYWdlX2dldF9jZWxsX2NvdW50ABgTcGFnZV9zZXRfY2VsbF9jb3VudAAZHHBhZ2VfZ2V0X2NlbGxfY29udGVudF9vZmZzZXQAGhxwYWdlX3NldF9jZWxsX2NvbnRlbnRfb2Zmc2V0ABsVcGFnZV9nZXRfbmV4dF9wYWdlX2lkABwVcGFnZV9zZXRfbmV4dF9wYWdlX2lkAB0TcGFnZV9nZXRfZnJlZV9ieXRlcwAeE3BhZ2Vfc2V0X2ZyZWVfYnl0ZXMAHxFwYWdlX2dldF9jaGVja3N1bQAgEXBhZ2Vfc2V0X2NoZWNrc3VtACEUcGFnZV9nZXRfY2VsbF9vZmZzZXQAIhRwYWdlX3NldF9jZWxsX29mZnNldAAjHnBhZ2VfZ2V0X2NvbnRpZ3VvdXNfZnJlZV9zcGFjZQAkGXBhZ2VfZ2V0X3RvdGFsX2ZyZWVfc3BhY2UAJQxwYWdlX2NvbXBhY3QAJhNwYWdlX2dldF9yb3dfbGVuZ3RoACcPcGFnZV9kZWxldGVfcm93ACgScGFnZV9pbml0X2ludGVyaW9yACkccGFnZV9nZXRfcmlnaHRfY2hpbGRfcGFnZV9pZAAcHHBhZ2Vfc2V0X3JpZ2h0X2NoaWxkX3BhZ2VfaWQAHRlwYWdlX2luc2VydF9pbnRlcmlvcl9jZWxsACobcGFnZV9iaW5hcnlfc2VhcmNoX2ludGVyaW9yACsUcGFnZV9pbml0X2luZGV4X2xlYWYALA1jb21wdXRlX2NyYzMyAC0VY29tcHV0ZV9wYWdlX2NoZWNrc3VtAC4WY29tcHV0ZV9wYWdlMV9jaGVja3N1bQAvEmNhdGFsb2dfaW5pdF9wYWdlMQAwF2NhdGFsb2dfZ2V0X3RvdGFsX3BhZ2VzACAXY2F0YWxvZ19zZXRfdG90YWxfcGFnZXMAIRpjYXRhbG9nX2dldF9mcmVlX3BhZ2VfaGVhZAAxGmNhdGFsb2dfc2V0X2ZyZWVfcGFnZV9oZWFkADIaY2F0YWxvZ19nZXRfc2NoZW1hX3ZlcnNpb24AMyBjYXRhbG9nX2luY3JlbWVudF9zY2hlbWFfdmVyc2lvbgA0GmNhdGFsb2dfZ2V0X2NoYW5nZV9jb3VudGVyADUgY2F0YWxvZ19pbmNyZW1lbnRfY2hhbmdlX2NvdW50ZXIANh1jYXRhbG9nX3VwZGF0ZV9wYWdlMV9jaGVja3N1bQA3GmNhdGFsb2dfd3JpdGVfZml4ZWRfc3RyaW5nADgcY2F0YWxvZ19maW5kX2ZyZWVfdGFibGVfc2xvdAA5HGNhdGFsb2dfZmluZF9mcmVlX2luZGV4X3Nsb3QAOh9jYXRhbG9nX2RlbGV0ZV9pbmRleF9kZXNjcmlwdG9yADsfY2F0YWxvZ19kZWxldGVfdGFibGVfZGVzY3JpcHRvcgA8EWNhdGFsb2dfaW5pdF9wYWdlAD0Z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IABBBmooAAALDAAgAEEGaiABNgAACwoAIABBCmovAAALDAAgAEEKaiABOwAACwoAIABBDGooAAALDAAgAEEMaiABNgAACxAAIAAgAUEBdGpBEGovAAALEgAgACABQQF0akEQaiACOwAACx4AIABBBGovAAAgAEECai8AAEEBdGtBEGtB//8DcQsnACAAQQpqLwAAIABBBGovAAAgAEECai8AAEEBdGtqQRBrQf//A3EL0AEBBn8gAEECai8AACIFRQRAIABBCmpBADsAACAAQQRqQYAgOwAADwsgAUEAIAAgAUcbQQAgAUGAYE8bIgIgACkACDcACCACIAApAAA3AAAgAkEQaiEDIABBEGohBEGAICEBA0AgASAAIAQvAABqIgdBAWovAAAiBmshASAGBEAgAiABQf//A3FqIAcgBvwKAAALIAMgATsAACAEQQJqIQQgA0ECaiEDIAVBAWsiBQ0ACyACQQpqQQA7AAAgAkEEaiABOwAAIAAgAkGAIPwKAAALCgAgAEEBai8AAAt0AQN/IABBAmovAAAiAiABSwRAIAAgACABQQF0akEQaiIDLwAAakEBai8AACEEAkAgAkEBayICIAFGDQAgAiABa0EBdCIBRQ0AIAMgA0ECaiAB/AoAAAsgAEECaiACOwAAIABBCmoiACAALwAAIARqOwAACws1ACAAQQU7AAAgAEEMakEANgAAIABBCmpBADsAACAAQQZqIAE2AAAgAEECakGAgICAATYAAAtsAQV/IABBAmoiBS8AACIDQaICTQR/IABBBGoiBi8AAEEMayIEIABqIgcgATYAACAHQQRqIAI3AAAgACADQQF0Qf7/A3FqQRBqIAQ7AAAgBiAEOwAAIAUgA0EBaiIAOwAAIABB//8DcQVBfwsLhwEBBn8CQCAAQQJqLwAAIgIEQCAAQRBqIQcgAkEBayEDQX8hAgNAIAMgBWoiBEEBdiEGAkAgACAHIARB/v8HcWovAABqIgRBBGo1AAAgAVkEQCAGQQFrIQMgBCgAACECDAELIAZBAWohBQsgAyAFTw0ACyACQX9HDQELIABBBmooAAAhAgsgAgs1ACAAQQo7AAAgAEEMakEANgAAIABBCmpBADsAACAAQQZqIAE2AAAgAEECakGAgICAATYAAAu6AgEEf0HAkQQtAABFBEADQCACQcyJBGogBEEIdiID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";
6
+ export declare function getWebDbCoreWasmBytes(): Uint8Array;
7
+ //# sourceMappingURL=embedded_wasm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded_wasm.d.ts","sourceRoot":"","sources":["../../../src/core/wasm/embedded_wasm.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,sBAAsB,qhjBAAqhjB,CAAC;AAIzjjB,wBAAgB,qBAAqB,IAAI,UAAU,CAelD"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * WebDB WebAssembly Core Adapter
3
+ * Wraps compiled C WebAssembly exports with 1:1 API parity to the JS Core.
4
+ */
5
+ import * as jsCore from "../js/index.ts";
6
+ export interface WasmCoreExports {
7
+ instance: WebAssembly.Instance;
8
+ exports: Record<string, any>;
9
+ memory: WebAssembly.Memory;
10
+ page_init: (view: DataView, page_offset: number, page_type?: number, next_page_id?: number) => void;
11
+ page_init_free: (view: DataView, page_offset: number, next_free_page_id?: number) => void;
12
+ page_get_type: (view: DataView, page_offset: number) => number;
13
+ page_set_type: (view: DataView, page_offset: number, type: number) => void;
14
+ page_get_cell_count: (view: DataView, page_offset: number) => number;
15
+ page_set_cell_count: (view: DataView, page_offset: number, count: number) => void;
16
+ page_get_cell_content_offset: (view: DataView, page_offset: number) => number;
17
+ page_set_cell_content_offset: (view: DataView, page_offset: number, offset: number) => void;
18
+ page_get_next_page_id: (view: DataView, page_offset: number) => number;
19
+ page_set_next_page_id: (view: DataView, page_offset: number, next_page_id: number) => void;
20
+ page_get_free_bytes: (view: DataView, page_offset: number) => number;
21
+ page_set_free_bytes: (view: DataView, page_offset: number, free_bytes: number) => void;
22
+ page_get_checksum: (view: DataView, page_offset: number) => number;
23
+ page_set_checksum: (view: DataView, page_offset: number, checksum: number) => void;
24
+ page_get_cell_offset: (view: DataView, page_offset: number, slot_idx: number) => number;
25
+ page_set_cell_offset: (view: DataView, page_offset: number, slot_idx: number, cell_offset: number) => void;
26
+ page_get_contiguous_free_space: (view: DataView, page_offset: number) => number;
27
+ page_get_total_free_space: (view: DataView, page_offset: number) => number;
28
+ page_compact: (view: DataView, page_offset: number, scratchpad_offset?: number, replacement?: any) => void;
29
+ page_get_row_length: (view: DataView, row_offset: number) => number;
30
+ page_insert_row: (view: DataView, page_offset: number, row_bytes: Uint8Array, scratchpad_offset?: number) => number;
31
+ page_delete_row: (view: DataView, page_offset: number, cell_idx: number) => void;
32
+ page_update_row: (view: DataView, page_offset: number, cell_idx: number, new_row_bytes: Uint8Array, scratchpad_offset?: number) => boolean;
33
+ page_table_hash: (page_id: number, mask: number) => number;
34
+ page_table_get: (view: DataView, base_offset: number, bucket_count: number, page_id: number) => number;
35
+ page_table_set: (view: DataView, base_offset: number, bucket_count: number, page_id: number, slot_idx: number) => void;
36
+ page_table_delete: (view: DataView, base_offset: number, bucket_count: number, page_id: number) => boolean;
37
+ buf_pool_get_slot_offset: (slot_idx: number) => number;
38
+ buf_pool_read_slot_to_page: (view: DataView, slot_to_page_offset: number, slot_idx: number) => number;
39
+ buf_pool_write_slot_to_page: (view: DataView, slot_to_page_offset: number, slot_idx: number, page_id: number) => void;
40
+ buf_pool_get_resident_slot: (view: DataView, page_to_slot_offset: number, page_to_slot_buckets: number, page_id: number) => number;
41
+ buf_pool_assign_slot: (view: DataView, slot_to_page_offset: number, page_to_slot_offset: number, page_to_slot_buckets: number, slot_idx: number, page_id: number) => void;
42
+ buf_pool_unassign_slot: (view: DataView, slot_to_page_offset: number, page_to_slot_offset: number, page_to_slot_buckets: number, slot_idx: number) => void;
43
+ buf_pool_mark_dirty: (view: DataView | Uint8Array, dirty_mask_offset: number, slot_idx: number) => void;
44
+ buf_pool_clear_dirty: (view: DataView | Uint8Array, dirty_mask_offset: number, slot_idx: number) => void;
45
+ buf_pool_is_dirty: (view: DataView | Uint8Array, dirty_mask_offset: number, slot_idx: number) => boolean;
46
+ buf_pool_pin_slot: (pin_counts: Uint32Array, slot_idx: number) => void;
47
+ buf_pool_unpin_slot: (pin_counts: Uint32Array, slot_idx: number) => void;
48
+ buf_pool_is_pinned: (pin_counts: Uint32Array, slot_idx: number) => boolean;
49
+ buf_pool_find_victim: (buffer: ArrayBuffer, ref_bits: Uint8Array, pin_counts: Uint32Array, slot_to_page_offset: number, slot_count: number, current_clock_hand: number) => {
50
+ candidate_slot: number;
51
+ next_clock_hand: number;
52
+ };
53
+ buf_pool_select_eviction_victim: (buffer: ArrayBuffer, ref_bits: Uint8Array, pin_counts: Uint32Array, slot_to_page_offset: number, dirty_mask_offset: number, slot_count: number, current_clock_hand: number, page_id: number) => {
54
+ candidate_slot: number;
55
+ flush_page_id: number;
56
+ next_clock_hand: number;
57
+ };
58
+ catalog_init_page1: (view: DataView) => void;
59
+ catalog_read_page1_header: typeof jsCore.catalog_read_page1_header;
60
+ catalog_get_total_pages: (view: DataView) => number;
61
+ catalog_set_total_pages: (view: DataView, count: number) => void;
62
+ catalog_get_free_page_head: (view: DataView) => number;
63
+ catalog_set_free_page_head: (view: DataView, page_id: number) => void;
64
+ catalog_get_schema_version: (view: DataView) => number;
65
+ catalog_increment_schema_version: (view: DataView) => number;
66
+ catalog_get_change_counter: (view: DataView) => number;
67
+ catalog_increment_change_counter: (view: DataView) => number;
68
+ catalog_update_page1_checksum: (view: DataView) => number;
69
+ sql_like_match: (str: string, pattern: string) => boolean;
70
+ fnv1a_32: (values: any[]) => number;
71
+ compare_sorter_keys: typeof jsCore.compare_sorter_keys;
72
+ vm_step: typeof jsCore.vm_step;
73
+ }
74
+ export declare function createWasmCore(memory: WebAssembly.Memory, customBytes?: Uint8Array): WasmCoreExports;
75
+ //# sourceMappingURL=wasm_core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm_core.d.ts","sourceRoot":"","sources":["../../../src/core/wasm/wasm_core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './webdb.js';
2
+ export * from './query_builder.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/host/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,216 @@
1
+ import { DbRow, JoinType, TransactionOptions } from '../../types/index.js';
2
+ import { ComparisonOp, QueryFilter, SortKey, GroupKey, AggExpr, DisassembledInstruction } from '../compiler/compiler.js';
3
+ import { QueryPlanner } from '../compiler/planner/index.js';
4
+ import { ExprNode, ParsedSelectExpr, ExpressionBuilder } from '../compiler/expr_parser.js';
5
+ export type SelectFunction = 'count' | 'sum' | 'avg' | 'min' | 'max' | 'upper' | 'lower' | 'length' | 'substr' | 'trim' | 'round' | 'floor' | 'ceil' | 'abs';
6
+ export interface SelectColumnSpec {
7
+ col: string;
8
+ as: string;
9
+ }
10
+ export interface NormalizedSelectField {
11
+ sourceCol?: string;
12
+ alias: string;
13
+ fn?: SelectFunction | string;
14
+ args?: any[];
15
+ expr?: ExprNode;
16
+ }
17
+ export type SelectItem = string | SelectColumnSpec | Record<string, string> | ExpressionBuilder | ParsedSelectExpr;
18
+ export declare function parseFilterTarget(target: string | ExprNode | ExpressionBuilder): {
19
+ colName?: string;
20
+ expr?: ExprNode;
21
+ };
22
+ export type GroupByItem = string | ExprNode | ExpressionBuilder;
23
+ export declare function extractAggregatesFromExpr(expr: ExprNode): AggExpr[];
24
+ export declare function normalizeSelectItem(item: any): NormalizedSelectField[];
25
+ export interface ExplainOutput {
26
+ plan: {
27
+ table: string;
28
+ rootPageId: number;
29
+ scanType: 'TableScan' | 'IndexScan';
30
+ indexName?: string;
31
+ filters: QueryFilter[];
32
+ orderBy?: SortKey[];
33
+ groupBy?: (string | GroupKey)[];
34
+ aggregates?: AggExpr[];
35
+ having?: QueryFilter[];
36
+ select?: NormalizedSelectField[];
37
+ joins?: JoinClause[];
38
+ limit?: number;
39
+ offset?: number;
40
+ estimatedCost?: number;
41
+ estimatedRows?: number;
42
+ joinOrder?: string[];
43
+ isOrderSatisfied?: boolean;
44
+ sortCostAvoided?: number;
45
+ };
46
+ bytecodeSize: number;
47
+ instructions: DisassembledInstruction[];
48
+ assembly: string;
49
+ }
50
+ export interface JoinClause {
51
+ type: JoinType;
52
+ table: string;
53
+ leftCol: string;
54
+ op: ComparisonOp;
55
+ rightCol: string;
56
+ scanType?: 'TableScan' | 'IndexScan';
57
+ indexName?: string;
58
+ }
59
+ export interface QueryExecutionOptions {
60
+ limit: number | null;
61
+ offset: number | null;
62
+ sortCol: string | null;
63
+ sortDir: 'asc' | 'desc';
64
+ orderBy?: SortKey[];
65
+ groupBy?: (string | GroupKey)[];
66
+ aggregates?: AggExpr[];
67
+ having?: QueryFilter[];
68
+ select?: NormalizedSelectField[];
69
+ selectExprs?: ParsedSelectExpr[];
70
+ joins?: JoinClause[];
71
+ planner?: QueryPlanner;
72
+ }
73
+ export interface IDatabaseQueryExecutor {
74
+ explainQuery(tableName: string, filters: QueryFilter[], options?: {
75
+ orderBy?: SortKey[];
76
+ groupBy?: (string | GroupKey)[];
77
+ aggregates?: AggExpr[];
78
+ having?: QueryFilter[];
79
+ select?: NormalizedSelectField[];
80
+ selectExprs?: ParsedSelectExpr[];
81
+ joins?: JoinClause[];
82
+ limit?: number;
83
+ offset?: number;
84
+ planner?: QueryPlanner;
85
+ }): Promise<ExplainOutput>;
86
+ executeQuery(tableName: string, filters: QueryFilter[], options: QueryExecutionOptions): Promise<DbRow[]>;
87
+ executeUpdate?(tableName: string, filters: QueryFilter[], patch: Partial<DbRow>, options?: TransactionOptions): Promise<number>;
88
+ executeDelete?(tableName: string, filters: QueryFilter[], options?: TransactionOptions): Promise<number>;
89
+ }
90
+ export declare class QueryBuilder {
91
+ private db;
92
+ private tableName;
93
+ private filters;
94
+ private selectFields;
95
+ private limitCount;
96
+ private offsetCount;
97
+ private sortCol;
98
+ private sortDir;
99
+ private orderKeys;
100
+ private groupCols;
101
+ private groupKeys;
102
+ private aggExprs;
103
+ private havingFilters;
104
+ private joins;
105
+ private planner?;
106
+ withPlanner(planner: QueryPlanner): this;
107
+ constructor(db: IDatabaseQueryExecutor, tableName: string);
108
+ join(table: string, leftCol: string, rightCol: string): this;
109
+ join(table: string, leftCol: string, op: ComparisonOp, rightCol: string): this;
110
+ innerJoin(table: string, leftCol: string, rightCol: string): this;
111
+ innerJoin(table: string, leftCol: string, op: ComparisonOp, rightCol: string): this;
112
+ leftJoin(table: string, leftCol: string, rightCol: string): this;
113
+ leftJoin(table: string, leftCol: string, op: ComparisonOp, rightCol: string): this;
114
+ getJoins(): JoinClause[];
115
+ where(exprSql: string): this;
116
+ where(expr: ExprNode | ExpressionBuilder): this;
117
+ where(colOrExpr: string | ExprNode | ExpressionBuilder, op: ComparisonOp, value: any): this;
118
+ where(callback: (qb: QueryBuilder) => void): this;
119
+ orWhere(exprSql: string): this;
120
+ orWhere(expr: ExprNode | ExpressionBuilder): this;
121
+ orWhere(colOrExpr: string | ExprNode | ExpressionBuilder, op: ComparisonOp, value: any): this;
122
+ orWhere(callback: (qb: QueryBuilder) => void): this;
123
+ whereNot(exprSql: string): this;
124
+ whereNot(expr: ExprNode | ExpressionBuilder): this;
125
+ whereNot(colOrExpr: string | ExprNode | ExpressionBuilder, op: ComparisonOp, value: any): this;
126
+ whereNot(callback: (qb: QueryBuilder) => void): this;
127
+ orWhereNot(exprSql: string): this;
128
+ orWhereNot(expr: ExprNode | ExpressionBuilder): this;
129
+ orWhereNot(colOrExpr: string | ExprNode | ExpressionBuilder, op: ComparisonOp, value: any): this;
130
+ orWhereNot(callback: (qb: QueryBuilder) => void): this;
131
+ whereRaw(sqlStr: string): this;
132
+ orWhereRaw(sqlStr: string): this;
133
+ whereNull(colName: string): this;
134
+ whereNotNull(colName: string): this;
135
+ orWhereNull(colName: string): this;
136
+ orWhereNotNull(colName: string): this;
137
+ whereLike(colName: string, pattern: string): this;
138
+ whereNotLike(colName: string, pattern: string): this;
139
+ whereStartsWith(colName: string, prefix: string): this;
140
+ whereEndsWith(colName: string, suffix: string): this;
141
+ whereContains(colName: string, substring: string): this;
142
+ orWhereLike(colName: string, pattern: string): this;
143
+ orWhereNotLike(colName: string, pattern: string): this;
144
+ orWhereStartsWith(colName: string, prefix: string): this;
145
+ orWhereEndsWith(colName: string, suffix: string): this;
146
+ orWhereContains(colName: string, substring: string): this;
147
+ whereIn(colName: string, values: any[]): this;
148
+ whereNotIn(colName: string, values: any[]): this;
149
+ orWhereIn(colName: string, values: any[]): this;
150
+ orWhereNotIn(colName: string, values: any[]): this;
151
+ getFilters(): QueryFilter[];
152
+ getRootFilter(): QueryFilter | null;
153
+ private addOrFilter;
154
+ limit(count: number): this;
155
+ offset(count: number): this;
156
+ orderBy(colOrKeys: string | SortKey | SortKey[] | ExpressionBuilder | ExprNode, direction?: 'asc' | 'desc', nullOrder?: 'nulls_first' | 'nulls_last'): this;
157
+ groupBy(...columns: (GroupByItem | GroupByItem[])[]): this;
158
+ private addGroupByItem;
159
+ private registerAggregatesFromFilter;
160
+ having(exprSql: string): this;
161
+ having(expr: ExprNode | ExpressionBuilder): this;
162
+ having(colOrExpr: string | ExprNode | ExpressionBuilder, op: ComparisonOp, value: any): this;
163
+ having(callback: (qb: QueryBuilder) => void): this;
164
+ orHaving(exprSql: string): this;
165
+ orHaving(expr: ExprNode | ExpressionBuilder): this;
166
+ orHaving(colOrExpr: string | ExprNode | ExpressionBuilder, op: ComparisonOp, value: any): this;
167
+ orHaving(callback: (qb: QueryBuilder) => void): this;
168
+ havingNot(exprSql: string): this;
169
+ havingNot(expr: ExprNode | ExpressionBuilder): this;
170
+ havingNot(colOrExpr: string | ExprNode | ExpressionBuilder, op: ComparisonOp, value: any): this;
171
+ havingNot(callback: (qb: QueryBuilder) => void): this;
172
+ orHavingNot(exprSql: string): this;
173
+ orHavingNot(expr: ExprNode | ExpressionBuilder): this;
174
+ orHavingNot(colOrExpr: string | ExprNode | ExpressionBuilder, op: ComparisonOp, value: any): this;
175
+ orHavingNot(callback: (qb: QueryBuilder) => void): this;
176
+ havingRaw(sqlStr: string): this;
177
+ orHavingRaw(sqlStr: string): this;
178
+ havingNull(colOrExpr: string | ExprNode | ExpressionBuilder): this;
179
+ havingNotNull(colOrExpr: string | ExprNode | ExpressionBuilder): this;
180
+ orHavingNull(colOrExpr: string | ExprNode | ExpressionBuilder): this;
181
+ orHavingNotNull(colOrExpr: string | ExprNode | ExpressionBuilder): this;
182
+ getHavingFilters(): QueryFilter[];
183
+ getRootHavingFilter(): QueryFilter | null;
184
+ private addHavingOrFilter;
185
+ aggregate(aggregates: AggExpr[]): this;
186
+ count(colName?: string, alias?: string): this;
187
+ sum(colName: string, alias?: string): this;
188
+ avg(colName: string, alias?: string): this;
189
+ min(colName: string, alias?: string): this;
190
+ max(colName: string, alias?: string): this;
191
+ select(...columns: SelectItem[]): this;
192
+ select(columns: SelectItem[]): this;
193
+ select(columnsMap: Record<string, string>): this;
194
+ getSelectFields(): NormalizedSelectField[];
195
+ /**
196
+ * Post-processes raw VDBE result rows into projected output records according
197
+ * to select fields, expressions, aliases, and registered UDFs.
198
+ *
199
+ * ARCHITECTURAL LIMITATION NOTE:
200
+ * Everything handled exclusively within `projectRow` operates on client-side
201
+ * result rows after VM execution. Subqueries (e.g. derived tables `db.from(subquery)`
202
+ * or correlated scalar subqueries) compile and execute at the VDBE bytecode level,
203
+ * so client-side transformations performed solely in `projectRow` will not be
204
+ * available inside subqueries until scalar expressions are fully lowered into
205
+ * VDBE register opcodes in the compiler.
206
+ */
207
+ private projectRow;
208
+ explain(): Promise<ExplainOutput>;
209
+ private getOrderKeyValue;
210
+ private sortAggregatedRows;
211
+ toArray(): Promise<DbRow[]>;
212
+ first(): Promise<DbRow | null>;
213
+ update(patch: Partial<DbRow>, options?: TransactionOptions): Promise<number>;
214
+ delete(options?: TransactionOptions): Promise<number>;
215
+ }
216
+ //# sourceMappingURL=query_builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query_builder.d.ts","sourceRoot":"","sources":["../../../src/host/api/query_builder.ts"],"names":[],"mappings":"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"}