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,50 @@
|
|
|
1
|
+
import type { SyncIPageStorage } from "../types.js";
|
|
2
|
+
import type { ISyncFileHandle } from "./file-handle.js";
|
|
3
|
+
export declare class WalStorage implements SyncIPageStorage {
|
|
4
|
+
private readonly main;
|
|
5
|
+
private readonly walHandle;
|
|
6
|
+
private readonly checkpointThreshold;
|
|
7
|
+
/** Committed WAL pages: pageNo → decoded value. */
|
|
8
|
+
private walIndex;
|
|
9
|
+
/** Frames buffered during current uncommitted batch (between writePage calls and flush). */
|
|
10
|
+
private pendingFrames;
|
|
11
|
+
/** Current write position in WAL file. */
|
|
12
|
+
private walOffset;
|
|
13
|
+
/** Next transaction id to assign. */
|
|
14
|
+
private currentTxId;
|
|
15
|
+
/** Committed nextPageId (from the latest commit record or main DB). */
|
|
16
|
+
private nextPageId;
|
|
17
|
+
/** Number of committed data frames in the WAL (for auto-checkpoint). */
|
|
18
|
+
private walFrameCount;
|
|
19
|
+
/** WAL epoch — incremented on each checkpoint. */
|
|
20
|
+
private epoch;
|
|
21
|
+
constructor(main: SyncIPageStorage, walHandle: ISyncFileHandle, checkpointThreshold?: number);
|
|
22
|
+
open(): Promise<void>;
|
|
23
|
+
close(): void;
|
|
24
|
+
/** Returns committed data only. Pending (unflushed) writes are not visible. */
|
|
25
|
+
readPage<T>(pageNo: number): T | null;
|
|
26
|
+
writePage(pageNo: number, value: unknown): void;
|
|
27
|
+
getNextPageId(): number;
|
|
28
|
+
writeHeader(nextPageId: number): void;
|
|
29
|
+
flush(): void;
|
|
30
|
+
getEpoch(): number;
|
|
31
|
+
checkpoint(): void;
|
|
32
|
+
/** Check if WAL has changed and catch up. Returns set of changed page numbers, or null if nothing changed. */
|
|
33
|
+
catchUp(): Set<number> | null;
|
|
34
|
+
private resetAfterCheckpoint;
|
|
35
|
+
private recover;
|
|
36
|
+
private readAndVerifyHeader;
|
|
37
|
+
/** Read epoch directly from WAL file header (for catch-up checks). */
|
|
38
|
+
private readEpochFromFile;
|
|
39
|
+
/**
|
|
40
|
+
* Read frames from startOffset to endOffset.
|
|
41
|
+
* Only advances walOffset to the end of the last valid commit record.
|
|
42
|
+
* Updates walIndex, nextPageId, currentTxId, walFrameCount.
|
|
43
|
+
* Returns set of committed page numbers.
|
|
44
|
+
*/
|
|
45
|
+
private readFramesFrom;
|
|
46
|
+
/** Build a single buffer containing all data frames + commit record. */
|
|
47
|
+
private buildCommitBuffer;
|
|
48
|
+
private initWalHeader;
|
|
49
|
+
private computeChecksum;
|
|
50
|
+
}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export type LogicalType = 'INTEGER' | 'BIGINT' | 'REAL' | 'TEXT' | 'BLOB' | 'BOOLEAN' | 'JSON' | 'NULL' | 'ANY';
|
|
2
|
+
export type JsonValue = {
|
|
3
|
+
[key: string]: JsonValue;
|
|
4
|
+
} | JsonValue[] | string | number | boolean | null;
|
|
5
|
+
export type Value = string | number | boolean | null | JsonValue | Uint8Array;
|
|
6
|
+
export type JsonPathSegment = {
|
|
7
|
+
type: 'field';
|
|
8
|
+
name: string;
|
|
9
|
+
} | {
|
|
10
|
+
type: 'index';
|
|
11
|
+
value: number;
|
|
12
|
+
};
|
|
13
|
+
export interface ColumnDef {
|
|
14
|
+
name: string;
|
|
15
|
+
type: LogicalType;
|
|
16
|
+
nullable: boolean;
|
|
17
|
+
primaryKey: boolean;
|
|
18
|
+
unique: boolean;
|
|
19
|
+
autoIncrement: boolean;
|
|
20
|
+
defaultValue: Value;
|
|
21
|
+
}
|
|
22
|
+
export interface TableSchema {
|
|
23
|
+
name: string;
|
|
24
|
+
columns: ColumnDef[];
|
|
25
|
+
autoIncrementSeq?: number;
|
|
26
|
+
metaPageNo?: number;
|
|
27
|
+
}
|
|
28
|
+
export type IndexOperatorType = 'NOT' | 'IS_NULL' | 'IS_NOT_NULL' | 'NEGATE' | 'IN' | 'NOT_IN' | 'ADD' | 'SUBTRACT' | 'MULTIPLY' | 'DIVIDE' | 'MOD' | 'CONCAT';
|
|
29
|
+
export interface IndexCaseCheck {
|
|
30
|
+
when: IndexExpression;
|
|
31
|
+
then: IndexExpression;
|
|
32
|
+
}
|
|
33
|
+
export type IndexComparisonType = 'EQUAL' | 'NOT_EQUAL' | 'LESS' | 'GREATER' | 'LESS_EQUAL' | 'GREATER_EQUAL';
|
|
34
|
+
export type IndexExpression = {
|
|
35
|
+
type: 'column';
|
|
36
|
+
name: string;
|
|
37
|
+
returnType: LogicalType;
|
|
38
|
+
} | {
|
|
39
|
+
type: 'json_access';
|
|
40
|
+
column: string;
|
|
41
|
+
path: JsonPathSegment[];
|
|
42
|
+
returnType: LogicalType;
|
|
43
|
+
} | {
|
|
44
|
+
type: 'function';
|
|
45
|
+
name: string;
|
|
46
|
+
args: IndexExpression[];
|
|
47
|
+
returnType: LogicalType;
|
|
48
|
+
} | {
|
|
49
|
+
type: 'cast';
|
|
50
|
+
child: IndexExpression;
|
|
51
|
+
castType: LogicalType;
|
|
52
|
+
returnType: LogicalType;
|
|
53
|
+
} | {
|
|
54
|
+
type: 'operator';
|
|
55
|
+
operatorType: IndexOperatorType;
|
|
56
|
+
args: IndexExpression[];
|
|
57
|
+
returnType: LogicalType;
|
|
58
|
+
} | {
|
|
59
|
+
type: 'comparison';
|
|
60
|
+
comparisonType: IndexComparisonType;
|
|
61
|
+
left: IndexExpression;
|
|
62
|
+
right: IndexExpression;
|
|
63
|
+
returnType: LogicalType;
|
|
64
|
+
} | {
|
|
65
|
+
type: 'case';
|
|
66
|
+
checks: IndexCaseCheck[];
|
|
67
|
+
elseExpr: IndexExpression | null;
|
|
68
|
+
returnType: LogicalType;
|
|
69
|
+
} | {
|
|
70
|
+
type: 'constant';
|
|
71
|
+
value: string | number | boolean | null;
|
|
72
|
+
returnType: LogicalType;
|
|
73
|
+
};
|
|
74
|
+
export interface IndexDef {
|
|
75
|
+
name: string;
|
|
76
|
+
tableName: string;
|
|
77
|
+
expressions: IndexExpression[];
|
|
78
|
+
unique: boolean;
|
|
79
|
+
metaPageNo?: number;
|
|
80
|
+
}
|
|
81
|
+
export interface CatalogData {
|
|
82
|
+
version: number;
|
|
83
|
+
tables: TableSchema[];
|
|
84
|
+
indexes: IndexDef[];
|
|
85
|
+
}
|
|
86
|
+
export type RowId = number;
|
|
87
|
+
export type Row = Record<string, Value>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Result } from "../engine/index.js";
|
|
2
|
+
import type { CatalogData, Value } from "../types.js";
|
|
3
|
+
import type { RequestPayload } from "./protocol.js";
|
|
4
|
+
export declare class RemotePreparedStatement {
|
|
5
|
+
private readonly connection;
|
|
6
|
+
readonly stmtId: number;
|
|
7
|
+
constructor(connection: Connection, stmtId: number);
|
|
8
|
+
run(params?: Value[]): Promise<Result>;
|
|
9
|
+
free(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export declare class Connection {
|
|
12
|
+
private readonly engine;
|
|
13
|
+
readonly sessionId: string;
|
|
14
|
+
constructor(engine: WorkerEngine, sessionId: string);
|
|
15
|
+
exec(sql: string, params?: Value[]): Promise<Result[]>;
|
|
16
|
+
prepare(sql: string): Promise<RemotePreparedStatement>;
|
|
17
|
+
/** @internal used by RemotePreparedStatement */
|
|
18
|
+
run(stmtId: number, params: Value[]): Promise<Result>;
|
|
19
|
+
/** @internal used by RemotePreparedStatement */
|
|
20
|
+
freeStmt(stmtId: number): Promise<void>;
|
|
21
|
+
getSchema(): Promise<CatalogData>;
|
|
22
|
+
disconnect(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
export declare class WorkerEngine {
|
|
25
|
+
private readonly worker;
|
|
26
|
+
private readonly pending;
|
|
27
|
+
private seq;
|
|
28
|
+
constructor(workerUrl: string | URL);
|
|
29
|
+
open(dbName: string): Promise<void>;
|
|
30
|
+
close(): Promise<void>;
|
|
31
|
+
connect(): Promise<Connection>;
|
|
32
|
+
/** @internal */
|
|
33
|
+
rpc<T = {
|
|
34
|
+
ok: true;
|
|
35
|
+
}>(payload: RequestPayload): Promise<T>;
|
|
36
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { WorkerEngine, Connection, RemotePreparedStatement } from './client.js';
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Result } from "../engine/index.js";
|
|
2
|
+
import type { CatalogData } from "../store/types.js";
|
|
3
|
+
import type { Value } from "../types.js";
|
|
4
|
+
export type RequestPayload = {
|
|
5
|
+
type: "open";
|
|
6
|
+
dbName: string;
|
|
7
|
+
} | {
|
|
8
|
+
type: "close";
|
|
9
|
+
} | {
|
|
10
|
+
type: "connect";
|
|
11
|
+
} | {
|
|
12
|
+
type: "disconnect";
|
|
13
|
+
sessionId: string;
|
|
14
|
+
} | {
|
|
15
|
+
type: "disconnect-all";
|
|
16
|
+
} | {
|
|
17
|
+
type: "exec";
|
|
18
|
+
sessionId: string;
|
|
19
|
+
sql: string;
|
|
20
|
+
params?: Value[];
|
|
21
|
+
} | {
|
|
22
|
+
type: "prepare";
|
|
23
|
+
sessionId: string;
|
|
24
|
+
sql: string;
|
|
25
|
+
} | {
|
|
26
|
+
type: "run";
|
|
27
|
+
sessionId: string;
|
|
28
|
+
stmtId: number;
|
|
29
|
+
params?: Value[];
|
|
30
|
+
} | {
|
|
31
|
+
type: "free";
|
|
32
|
+
sessionId: string;
|
|
33
|
+
stmtId: number;
|
|
34
|
+
} | {
|
|
35
|
+
type: "schema";
|
|
36
|
+
sessionId: string;
|
|
37
|
+
};
|
|
38
|
+
export type RequestMessage = {
|
|
39
|
+
id: number;
|
|
40
|
+
} & RequestPayload;
|
|
41
|
+
export type ResponseMessage = {
|
|
42
|
+
id: number;
|
|
43
|
+
ok: true;
|
|
44
|
+
} | {
|
|
45
|
+
id: number;
|
|
46
|
+
results: Result[];
|
|
47
|
+
} | {
|
|
48
|
+
id: number;
|
|
49
|
+
sessionId: string;
|
|
50
|
+
} | {
|
|
51
|
+
id: number;
|
|
52
|
+
stmtId: number;
|
|
53
|
+
} | {
|
|
54
|
+
id: number;
|
|
55
|
+
schema: CatalogData;
|
|
56
|
+
} | {
|
|
57
|
+
id: number;
|
|
58
|
+
error: string;
|
|
59
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "opfsql",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "Lightweight SQL engine in TypeScript. ~40 KB gzipped, zero native deps. Runs in browser workers via OPFS.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": ["dist", "README.md", "LICENSE"],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"test": "vitest run",
|
|
17
|
+
"test:watch": "vitest",
|
|
18
|
+
"test:e2e": "npx playwright test --config test/e2e/infra/config.ts",
|
|
19
|
+
"build": "cp ../README.md ./README.md && cp ../LICENSE ./LICENSE && esbuild src/index.ts --bundle --format=esm --outfile=dist/index.js --external:cbor-x --minify && tsc --emitDeclarationOnly --outDir dist"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"sql",
|
|
23
|
+
"opfs",
|
|
24
|
+
"indexeddb",
|
|
25
|
+
"browser",
|
|
26
|
+
"database",
|
|
27
|
+
"sqlite",
|
|
28
|
+
"in-browser",
|
|
29
|
+
"worker",
|
|
30
|
+
"typescript"
|
|
31
|
+
],
|
|
32
|
+
"author": "talerok",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"homepage": "https://github.com/talerok/opfsql#readme",
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "git+https://github.com/talerok/opfsql.git",
|
|
38
|
+
"directory": "opfsql-lib"
|
|
39
|
+
},
|
|
40
|
+
"bugs": {
|
|
41
|
+
"url": "https://github.com/talerok/opfsql/issues"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@playwright/test": "^1.52.0",
|
|
45
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
46
|
+
"esbuild": "^0.28.0",
|
|
47
|
+
"opfs-mock": "^2.6.0",
|
|
48
|
+
"typescript": "^5.7.0",
|
|
49
|
+
"vite": "^6.0.0",
|
|
50
|
+
"vitest": "^3.0.0"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"cbor-x": "^1.6.4"
|
|
54
|
+
}
|
|
55
|
+
}
|