@quereus/quereus 0.6.3 → 0.6.5

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 (146) hide show
  1. package/README.md +20 -2
  2. package/dist/src/common/logger.d.ts +59 -0
  3. package/dist/src/common/logger.d.ts.map +1 -1
  4. package/dist/src/common/logger.js +68 -0
  5. package/dist/src/common/logger.js.map +1 -1
  6. package/dist/src/func/builtins/datetime.d.ts.map +1 -1
  7. package/dist/src/func/builtins/datetime.js +10 -5
  8. package/dist/src/func/builtins/datetime.js.map +1 -1
  9. package/dist/src/index.d.ts +5 -6
  10. package/dist/src/index.d.ts.map +1 -1
  11. package/dist/src/index.js +4 -4
  12. package/dist/src/index.js.map +1 -1
  13. package/dist/src/planner/building/constraint-builder.d.ts.map +1 -1
  14. package/dist/src/planner/building/constraint-builder.js +4 -0
  15. package/dist/src/planner/building/constraint-builder.js.map +1 -1
  16. package/dist/src/planner/building/delete.d.ts.map +1 -1
  17. package/dist/src/planner/building/delete.js +2 -1
  18. package/dist/src/planner/building/delete.js.map +1 -1
  19. package/dist/src/planner/building/insert.d.ts.map +1 -1
  20. package/dist/src/planner/building/insert.js +4 -1
  21. package/dist/src/planner/building/insert.js.map +1 -1
  22. package/dist/src/planner/building/update.d.ts.map +1 -1
  23. package/dist/src/planner/building/update.js +4 -2
  24. package/dist/src/planner/building/update.js.map +1 -1
  25. package/dist/src/planner/nodes/dml-executor-node.d.ts +8 -2
  26. package/dist/src/planner/nodes/dml-executor-node.d.ts.map +1 -1
  27. package/dist/src/planner/nodes/dml-executor-node.js +11 -2
  28. package/dist/src/planner/nodes/dml-executor-node.js.map +1 -1
  29. package/dist/src/planner/validation/determinism-validator.d.ts +29 -0
  30. package/dist/src/planner/validation/determinism-validator.d.ts.map +1 -0
  31. package/dist/src/planner/validation/determinism-validator.js +47 -0
  32. package/dist/src/planner/validation/determinism-validator.js.map +1 -0
  33. package/dist/src/runtime/emit/add-constraint.d.ts.map +1 -1
  34. package/dist/src/runtime/emit/add-constraint.js +3 -0
  35. package/dist/src/runtime/emit/add-constraint.js.map +1 -1
  36. package/dist/src/runtime/emit/dml-executor.d.ts.map +1 -1
  37. package/dist/src/runtime/emit/dml-executor.js +84 -8
  38. package/dist/src/runtime/emit/dml-executor.js.map +1 -1
  39. package/dist/src/runtime/types.d.ts +1 -0
  40. package/dist/src/runtime/types.d.ts.map +1 -1
  41. package/dist/src/runtime/types.js.map +1 -1
  42. package/dist/src/schema/manager.d.ts.map +1 -1
  43. package/dist/src/schema/manager.js +41 -0
  44. package/dist/src/schema/manager.js.map +1 -1
  45. package/dist/src/util/ast-stringify.d.ts.map +1 -1
  46. package/dist/src/util/ast-stringify.js +14 -1
  47. package/dist/src/util/ast-stringify.js.map +1 -1
  48. package/dist/src/util/mutation-statement.d.ts +16 -0
  49. package/dist/src/util/mutation-statement.d.ts.map +1 -0
  50. package/dist/src/util/mutation-statement.js +92 -0
  51. package/dist/src/util/mutation-statement.js.map +1 -0
  52. package/dist/src/util/plugin-helper.d.ts +45 -0
  53. package/dist/src/util/plugin-helper.d.ts.map +1 -0
  54. package/dist/src/util/plugin-helper.js +85 -0
  55. package/dist/src/util/plugin-helper.js.map +1 -0
  56. package/dist/src/util/sql-literal.d.ts +11 -0
  57. package/dist/src/util/sql-literal.d.ts.map +1 -0
  58. package/dist/src/util/sql-literal.js +18 -0
  59. package/dist/src/util/sql-literal.js.map +1 -0
  60. package/dist/src/vtab/memory/table.d.ts +1 -2
  61. package/dist/src/vtab/memory/table.d.ts.map +1 -1
  62. package/dist/src/vtab/memory/table.js +3 -3
  63. package/dist/src/vtab/memory/table.js.map +1 -1
  64. package/dist/src/vtab/table.d.ts +23 -5
  65. package/dist/src/vtab/table.d.ts.map +1 -1
  66. package/dist/src/vtab/table.js +6 -0
  67. package/dist/src/vtab/table.js.map +1 -1
  68. package/package.json +4 -2
  69. package/src/common/logger.ts +75 -1
  70. package/src/func/builtins/datetime.ts +10 -5
  71. package/src/index.ts +13 -16
  72. package/src/planner/building/constraint-builder.ts +5 -0
  73. package/src/planner/building/delete.ts +5 -1
  74. package/src/planner/building/insert.ts +8 -1
  75. package/src/planner/building/update.ts +10 -2
  76. package/src/planner/nodes/dml-executor-node.ts +8 -2
  77. package/src/planner/validation/determinism-validator.ts +76 -0
  78. package/src/runtime/emit/add-constraint.ts +3 -0
  79. package/src/runtime/emit/dml-executor.ts +105 -9
  80. package/src/runtime/types.ts +3 -0
  81. package/src/schema/manager.ts +45 -0
  82. package/src/util/ast-stringify.ts +24 -1
  83. package/src/util/hash.ts +90 -90
  84. package/src/util/mutation-statement.ts +129 -0
  85. package/src/util/plugin-helper.ts +110 -0
  86. package/src/util/sql-literal.ts +22 -0
  87. package/src/vtab/memory/table.ts +3 -8
  88. package/src/vtab/table.ts +25 -10
  89. package/dist/src/config/loader.d.ts +0 -41
  90. package/dist/src/config/loader.d.ts.map +0 -1
  91. package/dist/src/config/loader.js +0 -102
  92. package/dist/src/config/loader.js.map +0 -1
  93. package/dist/src/planner/nodes/physical-access-nodes.d.ts +0 -83
  94. package/dist/src/planner/nodes/physical-access-nodes.d.ts.map +0 -1
  95. package/dist/src/planner/nodes/physical-access-nodes.js +0 -226
  96. package/dist/src/planner/nodes/physical-access-nodes.js.map +0 -1
  97. package/dist/src/planner/nodes/scan.d.ts +0 -27
  98. package/dist/src/planner/nodes/scan.d.ts.map +0 -1
  99. package/dist/src/planner/nodes/scan.js +0 -78
  100. package/dist/src/planner/nodes/scan.js.map +0 -1
  101. package/dist/src/planner/nodes/update-executor-node.d.ts +0 -24
  102. package/dist/src/planner/nodes/update-executor-node.d.ts.map +0 -1
  103. package/dist/src/planner/nodes/update-executor-node.js +0 -57
  104. package/dist/src/planner/nodes/update-executor-node.js.map +0 -1
  105. package/dist/src/planner/physical-utils.d.ts +0 -36
  106. package/dist/src/planner/physical-utils.d.ts.map +0 -1
  107. package/dist/src/planner/physical-utils.js +0 -122
  108. package/dist/src/planner/physical-utils.js.map +0 -1
  109. package/dist/src/planner/rules/physical/rule-filter-optimization.d.ts +0 -11
  110. package/dist/src/planner/rules/physical/rule-filter-optimization.d.ts.map +0 -1
  111. package/dist/src/planner/rules/physical/rule-filter-optimization.js +0 -49
  112. package/dist/src/planner/rules/physical/rule-filter-optimization.js.map +0 -1
  113. package/dist/src/planner/rules/physical/rule-mark-physical.d.ts +0 -11
  114. package/dist/src/planner/rules/physical/rule-mark-physical.d.ts.map +0 -1
  115. package/dist/src/planner/rules/physical/rule-mark-physical.js +0 -29
  116. package/dist/src/planner/rules/physical/rule-mark-physical.js.map +0 -1
  117. package/dist/src/planner/rules/physical/rule-project-optimization.d.ts +0 -11
  118. package/dist/src/planner/rules/physical/rule-project-optimization.d.ts.map +0 -1
  119. package/dist/src/planner/rules/physical/rule-project-optimization.js +0 -44
  120. package/dist/src/planner/rules/physical/rule-project-optimization.js.map +0 -1
  121. package/dist/src/planner/rules/physical/rule-sort-optimization.d.ts +0 -11
  122. package/dist/src/planner/rules/physical/rule-sort-optimization.d.ts.map +0 -1
  123. package/dist/src/planner/rules/physical/rule-sort-optimization.js +0 -53
  124. package/dist/src/planner/rules/physical/rule-sort-optimization.js.map +0 -1
  125. package/dist/src/planner/rules/rewrite/rule-constant-folding.d.ts +0 -11
  126. package/dist/src/planner/rules/rewrite/rule-constant-folding.d.ts.map +0 -1
  127. package/dist/src/planner/rules/rewrite/rule-constant-folding.js +0 -59
  128. package/dist/src/planner/rules/rewrite/rule-constant-folding.js.map +0 -1
  129. package/dist/src/planner/util/deferred-constraint.d.ts +0 -14
  130. package/dist/src/planner/util/deferred-constraint.d.ts.map +0 -1
  131. package/dist/src/planner/util/deferred-constraint.js +0 -85
  132. package/dist/src/planner/util/deferred-constraint.js.map +0 -1
  133. package/dist/src/runtime/emit/table-reference.d.ts +0 -5
  134. package/dist/src/runtime/emit/table-reference.d.ts.map +0 -1
  135. package/dist/src/runtime/emit/table-reference.js +0 -67
  136. package/dist/src/runtime/emit/table-reference.js.map +0 -1
  137. package/dist/src/runtime/emit/update-executor.d.ts +0 -5
  138. package/dist/src/runtime/emit/update-executor.d.ts.map +0 -1
  139. package/dist/src/runtime/emit/update-executor.js +0 -54
  140. package/dist/src/runtime/emit/update-executor.js.map +0 -1
  141. package/dist/src/util/plugin-loader.d.ts +0 -52
  142. package/dist/src/util/plugin-loader.d.ts.map +0 -1
  143. package/dist/src/util/plugin-loader.js +0 -307
  144. package/dist/src/util/plugin-loader.js.map +0 -1
  145. package/src/config/loader.ts +0 -140
  146. package/src/util/plugin-loader.ts +0 -387
@@ -0,0 +1,18 @@
1
+ import { expressionToString } from './ast-stringify.js';
2
+ /**
3
+ * Converts a SqlValue to its SQL literal string representation.
4
+ * This is used for mutation logging to create deterministic, replayable SQL statements.
5
+ * Uses the existing expressionToString function for consistency.
6
+ *
7
+ * @param value The value to convert to a SQL literal
8
+ * @returns SQL literal string representation
9
+ */
10
+ export function sqlValueToLiteral(value) {
11
+ // Create a literal expression AST node and use expressionToString
12
+ const literalExpr = {
13
+ type: 'literal',
14
+ value: value
15
+ };
16
+ return expressionToString(literalExpr);
17
+ }
18
+ //# sourceMappingURL=sql-literal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-literal.js","sourceRoot":"","sources":["../../../src/util/sql-literal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAe;IAChD,kEAAkE;IAClE,MAAM,WAAW,GAAoB;QACpC,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,KAAK;KACZ,CAAC;IAEF,OAAO,kBAAkB,CAAC,WAAW,CAAC,CAAC;AACxC,CAAC"}
@@ -5,7 +5,6 @@ import { type IndexSchema, type TableSchema } from '../../schema/table.js';
5
5
  import type { MemoryTableConnection } from './layer/connection.js';
6
6
  import type { FilterInfo } from '../filter-info.js';
7
7
  import type { VirtualTableConnection } from '../connection.js';
8
- import type { ConflictResolution } from '../../common/constants.js';
9
8
  /**
10
9
  * Represents a connection-specific instance of an in-memory table using the layer-based MVCC model.
11
10
  * This class acts as a thin wrapper around the shared MemoryTableManager,
@@ -26,7 +25,7 @@ export declare class MemoryTable extends VirtualTable {
26
25
  getConnection(): VirtualTableConnection | undefined;
27
26
  query(filterInfo: FilterInfo): AsyncIterable<Row>;
28
27
  /** Performs mutation through the connection's transaction layer */
29
- update(operation: 'insert' | 'update' | 'delete', values: Row | undefined, oldKeyValues?: Row, onConflict?: ConflictResolution): Promise<Row | undefined>;
28
+ update(args: import('../table.js').UpdateArgs): Promise<Row | undefined>;
30
29
  /** Begins a transaction for this connection */
31
30
  begin(): Promise<void>;
32
31
  /** Commits this connection's transaction */
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../src/vtab/memory/table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAyB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIpE;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAuB5C,oDAAoD;IACpD,SAAS,IAAI,WAAW,GAAG,SAAS;IAKpC,8CAA8C;IAC9C,UAAU,IAAI,OAAO;IAKrB,2DAA2D;YAC7C,gBAAgB;IAsB9B,kFAAkF;IAClF,aAAa,CAAC,gBAAgB,EAAE,qBAAqB,GAAG,IAAI;IAK5D,mEAAmE;IACnE,gBAAgB,IAAI,sBAAsB;IAK1C,yEAAyE;IACzE,aAAa,IAAI,sBAAsB,GAAG,SAAS;IAQ5C,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC;IAoBxD,mEAAmE;IAC7D,MAAM,CACX,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACzC,MAAM,EAAE,GAAG,GAAG,SAAS,EACvB,YAAY,CAAC,EAAE,GAAG,EAClB,UAAU,CAAC,EAAE,kBAAkB,GAC7B,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAO3B,+CAA+C;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,4CAA4C;IACtC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7B,+CAA+C;IACzC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/B,+DAA+D;IACzD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,mDAAmD;IAC7C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,6CAA6C;IACvC,WAAW,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC9D,4DAA4D;IACtD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,WAAW,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOjD"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../src/vtab/memory/table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAyB,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAKpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAM/D;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAuB5C,oDAAoD;IACpD,SAAS,IAAI,WAAW,GAAG,SAAS;IAKpC,8CAA8C;IAC9C,UAAU,IAAI,OAAO;IAKrB,2DAA2D;YAC7C,gBAAgB;IAsB9B,kFAAkF;IAClF,aAAa,CAAC,gBAAgB,EAAE,qBAAqB,GAAG,IAAI;IAK5D,mEAAmE;IACnE,gBAAgB,IAAI,sBAAsB;IAK1C,yEAAyE;IACzE,aAAa,IAAI,sBAAsB,GAAG,SAAS;IAQ5C,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC;IAoBxD,mEAAmE;IAC7D,MAAM,CAAC,IAAI,EAAE,OAAO,aAAa,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAO9E,+CAA+C;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,4CAA4C;IACtC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAO7B,+CAA+C;IACzC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAO/B,+DAA+D;IACzD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,mDAAmD;IAC7C,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC,SAAS,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhD,OAAO,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOvD,6CAA6C;IACvC,WAAW,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmC9D,4DAA4D;IACtD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B,WAAW,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOjD"}
@@ -95,11 +95,11 @@ export class MemoryTable extends VirtualTable {
95
95
  }
96
96
  // Note: getBestAccessPlan is handled by the MemoryTableModule, not the table instance.
97
97
  /** Performs mutation through the connection's transaction layer */
98
- async update(operation, values, oldKeyValues, onConflict) {
98
+ async update(args) {
99
99
  const conn = await this.ensureConnection();
100
100
  // Delegate mutation to the manager.
101
- // This assumes manager.performMutation will be updated to this signature and logic.
102
- return this.manager.performMutation(conn, operation, values, oldKeyValues, onConflict);
101
+ // Note: mutationStatement is ignored by memory table (could be logged if needed)
102
+ return this.manager.performMutation(conn, args.operation, args.values, args.oldKeyValues, args.onConflict);
103
103
  }
104
104
  /** Begins a transaction for this connection */
105
105
  async begin() {
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../../src/vtab/memory/table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../../src/vtab/memory/table.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,21 @@ import type { RowOp } from '../common/types.js';
8
8
  import type { ConflictResolution } from '../common/constants.js';
9
9
  import type { VirtualTableConnection } from './connection.js';
10
10
  import type { PlanNode } from '../planner/nodes/plan-node.js';
11
+ /**
12
+ * Arguments passed to VirtualTable.update() method.
13
+ */
14
+ export interface UpdateArgs {
15
+ /** The operation to perform (insert, update, delete) */
16
+ operation: RowOp;
17
+ /** For INSERT/UPDATE, the values to insert/update. For DELETE, undefined */
18
+ values: Row | undefined;
19
+ /** For UPDATE/DELETE, the old key values of the row to modify. Undefined for INSERT */
20
+ oldKeyValues?: Row;
21
+ /** Conflict resolution mode (defaults to ABORT if unspecified) */
22
+ onConflict?: ConflictResolution;
23
+ /** Optional: Deterministic SQL statement that reproduces this mutation (if logMutations is enabled) */
24
+ mutationStatement?: string;
25
+ }
11
26
  /**
12
27
  * Base class representing a virtual table instance.
13
28
  * Module implementations should subclass this to provide specific table behavior.
@@ -19,6 +34,12 @@ export declare abstract class VirtualTable {
19
34
  readonly schemaName: string;
20
35
  errorMessage?: string;
21
36
  tableSchema?: TableSchema;
37
+ /**
38
+ * When true, the update() method will receive a mutationStatement parameter
39
+ * containing a deterministic SQL statement that reproduces the mutation.
40
+ * This enables replication, audit logging, and change data capture.
41
+ */
42
+ wantStatements?: boolean;
22
43
  constructor(db: Database, module: AnyVirtualTableModule, schemaName: string, tableName: string);
23
44
  /**
24
45
  * Sets an error message for the VTable
@@ -51,14 +72,11 @@ export declare abstract class VirtualTable {
51
72
  executePlan?(db: Database, plan: PlanNode, ctx?: unknown): AsyncIterable<Row>;
52
73
  /**
53
74
  * Performs an INSERT, UPDATE, or DELETE operation
54
- * @param operation The operation to perform (insert, update, delete)
55
- * @param values For INSERT/UPDATE, the values to insert/update. For DELETE, undefined
56
- * @param oldKeyValues For UPDATE/DELETE, the old key values of the row to modify. Undefined for INSERT
57
- * @param onConflict Conflict resolution mode (defaults to ABORT if unspecified)
75
+ * @param args Arguments object containing operation details and optional mutation statement
58
76
  * @returns new row for INSERT/UPDATE, undefined for DELETE
59
77
  * @throws QuereusError or ConstraintError on failure
60
78
  */
61
- abstract update(operation: RowOp, values: Row | undefined, oldKeyValues?: Row, onConflict?: ConflictResolution): Promise<Row | undefined>;
79
+ abstract update(args: UpdateArgs): Promise<Row | undefined>;
62
80
  /**
63
81
  * (Optional) Creates a new connection for transaction support.
64
82
  * If implemented, this enables proper transaction isolation for this table.
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/vtab/table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/vtab/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,wDAAwD;IACxD,SAAS,EAAE,KAAK,CAAC;IACjB,4EAA4E;IAC5E,MAAM,EAAE,GAAG,GAAG,SAAS,CAAC;IACxB,uFAAuF;IACvF,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,kEAAkE;IAClE,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,uGAAuG;IACvG,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,8BAAsB,YAAY;IACjC,SAAgB,MAAM,EAAE,qBAAqB,CAAC;IAC9C,SAAgB,EAAE,EAAE,QAAQ,CAAC;IAC7B,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,UAAU,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,WAAW,CAAC;IAEjC;;;;OAIG;IACI,cAAc,CAAC,EAAE,OAAO,CAAC;gBAEpB,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAO9F;;;OAGG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAI5D;;;;OAIG;IACH,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAEpC;;;;;;OAMG;IACH,KAAK,CAAC,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC;IAElD;;;;;;;;OAQG;IACH,WAAW,CAAC,CACX,EAAE,EAAE,QAAQ,EACZ,IAAI,EAAE,QAAQ,EACd,GAAG,CAAC,EAAE,OAAO,GACX,aAAa,CAAC,GAAG,CAAC;IAErB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAE3D;;;;OAIG;IACH,gBAAgB,CAAC,IAAI,YAAY,CAAC,sBAAsB,CAAC;IAEzD;;;;OAIG;IACH,aAAa,CAAC,IAAI,sBAAsB,GAAG,SAAS;IAEpD;;OAEG;IACH,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAEvB;;OAEG;IACH,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAEtB;;OAEG;IACH,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAExB;;OAEG;IACH,QAAQ,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAE1B;;;OAGG;IACH,MAAM,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAEvC;;;OAGG;IACH,SAAS,CAAC,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAEjD;;;OAGG;IACH,OAAO,CAAC,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/C;;;OAGG;IACH,UAAU,CAAC,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAElD;;;;OAIG;IACH,WAAW,CAAC,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAEzD;;;OAGG;IACH,WAAW,CAAC,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAEnD;;;OAGG;IACH,SAAS,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAC5C"}
@@ -9,6 +9,12 @@ export class VirtualTable {
9
9
  schemaName;
10
10
  errorMessage;
11
11
  tableSchema;
12
+ /**
13
+ * When true, the update() method will receive a mutationStatement parameter
14
+ * containing a deterministic SQL statement that reproduces the mutation.
15
+ * This enables replication, audit logging, and change data capture.
16
+ */
17
+ wantStatements;
12
18
  constructor(db, module, schemaName, tableName) {
13
19
  this.db = db;
14
20
  this.module = module;
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/vtab/table.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,OAAgB,YAAY;IACjB,MAAM,CAAwB;IAC9B,EAAE,CAAW;IACb,SAAS,CAAS;IAClB,UAAU,CAAS;IAC5B,YAAY,CAAU;IACtB,WAAW,CAAe;IAEjC,YAAY,EAAY,EAAE,MAA6B,EAAE,UAAkB,EAAE,SAAiB;QAC7F,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACO,eAAe,CAAC,OAA2B;QACpD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;IAC7B,CAAC;CA6HD"}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/vtab/table.ts"],"names":[],"mappings":"AA2BA;;;GAGG;AACH,MAAM,OAAgB,YAAY;IACjB,MAAM,CAAwB;IAC9B,EAAE,CAAW;IACb,SAAS,CAAS;IAClB,UAAU,CAAS;IAC5B,YAAY,CAAU;IACtB,WAAW,CAAe;IAEjC;;;;OAIG;IACI,cAAc,CAAW;IAEhC,YAAY,EAAY,EAAE,MAA6B,EAAE,UAAkB,EAAE,SAAiB;QAC7F,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACO,eAAe,CAAC,OAA2B;QACpD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;IAC7B,CAAC;CAqHD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quereus/quereus",
3
- "version": "0.6.3",
3
+ "version": "0.6.5",
4
4
  "type": "module",
5
5
  "description": "Federated SQL query processor",
6
6
  "publisher": "Got Choices Foundation",
@@ -25,7 +25,7 @@
25
25
  }
26
26
  },
27
27
  "scripts": {
28
- "clean": "rm -rf dist",
28
+ "clean": "rimraf dist",
29
29
  "doc": "npx typedoc -out doc src",
30
30
  "build": "tsc",
31
31
  "lint": "eslint src/**/*.ts test/**/*.ts",
@@ -37,6 +37,7 @@
37
37
  "typecheck": "tsc --noEmit"
38
38
  },
39
39
  "devDependencies": {
40
+ "@quereus/plugin-loader": "*",
40
41
  "@types/chai": "^5.2.2",
41
42
  "@types/debug": "^4.1.12",
42
43
  "@types/mocha": "^10.0.10",
@@ -48,6 +49,7 @@
48
49
  "eslint-plugin-import": "^2.31.0",
49
50
  "fast-check": "^4.1.1",
50
51
  "mocha": "^11.5.0",
52
+ "rimraf": "^6.1.2",
51
53
  "ts-node": "^10.9.2",
52
54
  "tsc-alias": "^1.8.16",
53
55
  "typedoc": "^0.28.5",
@@ -19,5 +19,79 @@ const BASE_NAMESPACE = 'quereus';
19
19
  * @returns A debug instance.
20
20
  */
21
21
  export function createLogger(subNamespace: string): debug.Debugger {
22
- return debug(`${BASE_NAMESPACE}:${subNamespace}`);
22
+ return debug(`${BASE_NAMESPACE}:${subNamespace}`);
23
+ }
24
+
25
+ /**
26
+ * Enable Quereus debug logging programmatically.
27
+ *
28
+ * This is particularly useful in environments like React Native where
29
+ * environment variables are not available at runtime.
30
+ *
31
+ * @param pattern - Debug pattern to enable (default: 'quereus:*')
32
+ * Examples:
33
+ * - 'quereus:*' - all Quereus logs
34
+ * - 'quereus:vtab:*' - virtual table operations
35
+ * - 'quereus:vtab:memory' - memory table operations only
36
+ * - 'quereus:planner' - query planner logs
37
+ * - 'quereus:runtime' - VDBE execution (very verbose)
38
+ * - 'quereus:*,-quereus:runtime' - all except verbose runtime
39
+ * @param logFn - Optional custom log function. Defaults to console.log.
40
+ * Useful in environments where console.debug may be filtered.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * import { enableLogging } from '@quereus/quereus';
45
+ *
46
+ * // Enable all Quereus logs
47
+ * enableLogging();
48
+ *
49
+ * // Enable only memory table logs
50
+ * enableLogging('quereus:vtab:memory');
51
+ *
52
+ * // Enable all logs with custom output (e.g., React Native)
53
+ * enableLogging('quereus:*', console.log.bind(console));
54
+ * ```
55
+ */
56
+ export function enableLogging(
57
+ pattern: string = `${BASE_NAMESPACE}:*`,
58
+ logFn?: (...args: unknown[]) => void
59
+ ): void {
60
+ if (logFn) {
61
+ debug.log = logFn;
62
+ }
63
+ debug.enable(pattern);
64
+ }
65
+
66
+ /**
67
+ * Disable all Quereus debug logging.
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * import { disableLogging } from '@quereus/quereus';
72
+ *
73
+ * disableLogging();
74
+ * ```
75
+ */
76
+ export function disableLogging(): void {
77
+ debug.disable();
78
+ }
79
+
80
+ /**
81
+ * Check if logging is enabled for a specific namespace.
82
+ *
83
+ * @param namespace - The namespace to check (without 'quereus:' prefix)
84
+ * @returns true if logging is enabled for this namespace
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * import { isLoggingEnabled } from '@quereus/quereus';
89
+ *
90
+ * if (isLoggingEnabled('vtab:memory')) {
91
+ * // Perform expensive debug operations
92
+ * }
93
+ * ```
94
+ */
95
+ export function isLoggingEnabled(namespace: string): boolean {
96
+ return debug.enabled(`${BASE_NAMESPACE}:${namespace}`);
23
97
  }
@@ -309,8 +309,9 @@ function processDateTimeArgs(args: ReadonlyArray<SqlValue>): Temporal.ZonedDateT
309
309
  // --- Function Implementations --- //
310
310
 
311
311
  // date(timestring, modifier, ...)
312
+ // NOTE: Marked as non-deterministic because it accepts 'now' as a timestring
312
313
  export const dateFunc = createScalarFunction(
313
- { name: 'date', numArgs: -1, deterministic: true },
314
+ { name: 'date', numArgs: -1, deterministic: false },
314
315
  (...args: SqlValue[]): SqlValue => {
315
316
  const finalDt = processDateTimeArgs(args);
316
317
  if (!finalDt) return null;
@@ -319,8 +320,9 @@ export const dateFunc = createScalarFunction(
319
320
  );
320
321
 
321
322
  // time(timestring, modifier, ...)
323
+ // NOTE: Marked as non-deterministic because it accepts 'now' as a timestring
322
324
  export const timeFunc = createScalarFunction(
323
- { name: 'time', numArgs: -1, deterministic: true },
325
+ { name: 'time', numArgs: -1, deterministic: false },
324
326
  (...args: SqlValue[]): SqlValue => {
325
327
  const finalDt = processDateTimeArgs(args);
326
328
  if (!finalDt) return null;
@@ -329,8 +331,9 @@ export const timeFunc = createScalarFunction(
329
331
  );
330
332
 
331
333
  // datetime(timestring, modifier, ...)
334
+ // NOTE: Marked as non-deterministic because it accepts 'now' as a timestring
332
335
  export const datetimeFunc = createScalarFunction(
333
- { name: 'datetime', numArgs: -1, deterministic: true },
336
+ { name: 'datetime', numArgs: -1, deterministic: false },
334
337
  (...args: SqlValue[]): SqlValue => {
335
338
  const finalDt = processDateTimeArgs(args);
336
339
  if (!finalDt) return null;
@@ -341,8 +344,9 @@ export const datetimeFunc = createScalarFunction(
341
344
  );
342
345
 
343
346
  // julianday(timestring, modifier, ...)
347
+ // NOTE: Marked as non-deterministic because it accepts 'now' as a timestring
344
348
  export const juliandayFunc = createScalarFunction(
345
- { name: 'julianday', numArgs: -1, deterministic: true },
349
+ { name: 'julianday', numArgs: -1, deterministic: false },
346
350
  (...args: SqlValue[]): SqlValue => {
347
351
  const finalDt = processDateTimeArgs(args);
348
352
  if (!finalDt) return null;
@@ -352,8 +356,9 @@ export const juliandayFunc = createScalarFunction(
352
356
  );
353
357
 
354
358
  // strftime(format, timestring, modifier, ...)
359
+ // NOTE: Marked as non-deterministic because it accepts 'now' as a timestring
355
360
  export const strftimeFunc = createScalarFunction(
356
- { name: 'strftime', numArgs: -1, deterministic: true },
361
+ { name: 'strftime', numArgs: -1, deterministic: false },
357
362
  (format: SqlValue, ...timeArgs: SqlValue[]): SqlValue => {
358
363
  if (typeof format !== 'string') return null;
359
364
  const finalDt = processDateTimeArgs(timeArgs);
package/src/index.ts CHANGED
@@ -91,7 +91,6 @@ export { ParseError } from './parser/parser.js';
91
91
  export { SchemaManager } from './schema/manager.js';
92
92
  export type { TableSchema, IndexSchema as TableIndexSchema } from './schema/table.js';
93
93
  export type { ColumnSchema } from './schema/column.js';
94
- export type { FunctionSchema } from './schema/function.js';
95
94
 
96
95
  // Runtime utilities
97
96
  export { isAsyncIterable, asyncIterableToArray } from './runtime/utils.js';
@@ -107,17 +106,24 @@ export type {
107
106
  ScalarFunc,
108
107
  TableValuedFunc,
109
108
  AggregateReducer,
110
- AggregateFinalizer
109
+ AggregateFinalizer,
110
+ FunctionSchema
111
111
  } from './schema/function.js';
112
112
 
113
113
  // Utility functions
114
114
  export { Latches } from './util/latches.js';
115
115
 
116
+ // Plugin helper for static loading (React Native, etc.)
117
+ export { registerPlugin } from './util/plugin-helper.js';
118
+ export type { PluginFunction } from './util/plugin-helper.js';
119
+
116
120
  // Initialize runtime emitters (this ensures they are registered)
117
121
  import './runtime/register.js';
118
122
 
119
- // Re-export plugin system
120
- export { dynamicLoadModule, validatePluginUrl, loadPlugin } from './util/plugin-loader.js';
123
+ // Re-export virtual table framework
124
+ export type { VirtualTableModule } from './vtab/module.js';
125
+
126
+ // Re-export plugin manifest types (for plugin authors, but not the loader)
121
127
  export type {
122
128
  PluginManifest,
123
129
  PluginRecord,
@@ -129,18 +135,9 @@ export type {
129
135
  PluginRegistrations
130
136
  } from './vtab/manifest.js';
131
137
 
132
- // Re-export config system
133
- export {
134
- interpolateEnvVars,
135
- interpolateConfigEnvVars,
136
- loadPluginsFromConfig,
137
- validateConfig
138
- } from './config/loader.js';
139
- export type { QuoombConfig, PluginConfig } from './config/loader.js';
140
-
141
- // Re-export virtual table framework
142
- export type { VirtualTableModule } from './vtab/module.js';
143
-
144
138
  // Debug and development utilities
145
139
  export { serializePlanTree, formatPlanTree, formatPlanSummary, serializePlanTreeWithOptions } from './planner/debug.js';
146
140
  export type { PlanDisplayOptions } from './planner/debug.js';
141
+
142
+ // Logging control (for environments like React Native where env vars aren't available)
143
+ export { enableLogging, disableLogging, isLoggingEnabled } from './common/logger.js';
@@ -9,6 +9,7 @@ import { PlanNodeType } from '../nodes/plan-node-type.js';
9
9
  import { ColumnReferenceNode } from '../nodes/reference.js';
10
10
  import type { ScalarPlanNode } from '../nodes/plan-node.js';
11
11
  import * as AST from '../../parser/ast.js';
12
+ import { validateDeterministicConstraint } from '../validation/determinism-validator.js';
12
13
 
13
14
  /**
14
15
  * Determines if a constraint should be checked for the given operation
@@ -137,6 +138,10 @@ export function buildConstraintChecks(
137
138
  constraint.expr
138
139
  ) as ScalarPlanNode;
139
140
 
141
+ // Validate that the constraint expression is deterministic
142
+ const constraintName = constraint.name ?? `_check_${tableSchema.name}`;
143
+ validateDeterministicConstraint(expression, constraintName, tableSchema.name);
144
+
140
145
  // Heuristic: auto-defer if the expression contains a subquery
141
146
  // or references a different relation via attribute bindings (NEW/OLD already localized).
142
147
  const needsDeferred = containsSubquery(expression);
@@ -148,7 +148,11 @@ export function buildDeleteStmt(
148
148
  deleteCtx.scope,
149
149
  deleteNode,
150
150
  tableReference,
151
- 'delete'
151
+ 'delete',
152
+ undefined, // onConflict not used for DELETE
153
+ mutationContextValues.size > 0 ? mutationContextValues : undefined,
154
+ contextAttributes.length > 0 ? contextAttributes : undefined,
155
+ contextDescriptor
152
156
  );
153
157
 
154
158
  const resultNode: RelationalPlanNode = dmlExecutorNode;
@@ -22,6 +22,7 @@ import { ProjectNode, type Projection } from '../nodes/project-node.js';
22
22
  import { buildOldNewRowDescriptors } from '../../util/row-descriptor.js';
23
23
  import { DmlExecutorNode } from '../nodes/dml-executor-node.js';
24
24
  import { buildConstraintChecks } from './constraint-builder.js';
25
+ import { validateDeterministicDefault } from '../validation/determinism-validator.js';
25
26
 
26
27
  /**
27
28
  * Creates a uniform row expansion projection that maps any relational source
@@ -103,6 +104,9 @@ function createRowExpansionProjection(
103
104
  if (typeof tableColumn.defaultValue === 'object' && tableColumn.defaultValue !== null && 'type' in tableColumn.defaultValue) {
104
105
  // It's an AST.Expression - build it into a plan node with context scope
105
106
  defaultNode = buildExpression(defaultCtx, tableColumn.defaultValue as AST.Expression) as ScalarPlanNode;
107
+
108
+ // Validate that the default expression is deterministic
109
+ validateDeterministicDefault(defaultNode, tableColumn.name, tableSchema.name);
106
110
  } else {
107
111
  // Literal default value
108
112
  defaultNode = buildExpression(defaultCtx, { type: 'literal', value: tableColumn.defaultValue }) as ScalarPlanNode;
@@ -358,7 +362,10 @@ export function buildInsertStmt(
358
362
  constraintCheckNode,
359
363
  tableReference,
360
364
  'insert',
361
- stmt.onConflict
365
+ stmt.onConflict,
366
+ mutationContextValues.size > 0 ? mutationContextValues : undefined,
367
+ contextAttributes.length > 0 ? contextAttributes : undefined,
368
+ contextDescriptor
362
369
  );
363
370
 
364
371
  const resultNode: RelationalPlanNode = dmlExecutorNode;
@@ -270,7 +270,11 @@ export function buildUpdateStmt(
270
270
  updateCtx.scope,
271
271
  constraintCheckNode,
272
272
  tableReference,
273
- 'update'
273
+ 'update',
274
+ undefined, // onConflict not used for UPDATE
275
+ mutationContextValues.size > 0 ? mutationContextValues : undefined,
276
+ contextAttributes.length > 0 ? contextAttributes : undefined,
277
+ contextDescriptor
274
278
  );
275
279
 
276
280
  // Return the RETURNING results from the executed update
@@ -312,7 +316,11 @@ export function buildUpdateStmt(
312
316
  updateCtx.scope,
313
317
  constraintCheckNode,
314
318
  tableReference,
315
- 'update'
319
+ 'update',
320
+ undefined, // onConflict not used for UPDATE
321
+ mutationContextValues.size > 0 ? mutationContextValues : undefined,
322
+ contextAttributes.length > 0 ? contextAttributes : undefined,
323
+ contextDescriptor
316
324
  );
317
325
 
318
326
  return new SinkNode(updateCtx.scope, updateExecutorNode, 'update');
@@ -1,5 +1,5 @@
1
1
  import type { Scope } from '../scopes/scope.js';
2
- import { PlanNode, type RelationalPlanNode, type Attribute, type PhysicalProperties, isRelationalNode } from './plan-node.js';
2
+ import { PlanNode, type RelationalPlanNode, type Attribute, type PhysicalProperties, type ScalarPlanNode, type RowDescriptor, isRelationalNode } from './plan-node.js';
3
3
  import { PlanNodeType } from './plan-node-type.js';
4
4
  import type { TableReferenceNode } from './reference.js';
5
5
  import type { RelationType } from '../../common/datatype.js';
@@ -20,6 +20,9 @@ export class DmlExecutorNode extends PlanNode implements RelationalPlanNode {
20
20
  public readonly table: TableReferenceNode,
21
21
  public readonly operation: RowOp,
22
22
  public readonly onConflict?: ConflictResolution, // Used for INSERT operations
23
+ public readonly mutationContextValues?: Map<string, ScalarPlanNode>, // Mutation context value expressions
24
+ public readonly contextAttributes?: Attribute[], // Mutation context attributes
25
+ public readonly contextDescriptor?: RowDescriptor, // Mutation context row descriptor
23
26
  ) {
24
27
  super(scope);
25
28
  }
@@ -63,7 +66,10 @@ export class DmlExecutorNode extends PlanNode implements RelationalPlanNode {
63
66
  newSource as RelationalPlanNode,
64
67
  this.table,
65
68
  this.operation,
66
- this.onConflict
69
+ this.onConflict,
70
+ this.mutationContextValues,
71
+ this.contextAttributes,
72
+ this.contextDescriptor
67
73
  );
68
74
  }
69
75
 
@@ -0,0 +1,76 @@
1
+ import { QuereusError } from '../../common/errors.js';
2
+ import { StatusCode } from '../../common/types.js';
3
+ import type { ScalarPlanNode } from '../nodes/plan-node.js';
4
+ import { createLogger } from '../../common/logger.js';
5
+
6
+ const log = createLogger('planner:validation:determinism');
7
+
8
+ /**
9
+ * Validates that an expression is deterministic (suitable for constraints and defaults).
10
+ * Non-deterministic expressions must be passed via mutation context instead.
11
+ *
12
+ * @param expr The expression plan node to validate
13
+ * @param context Description of where the expression is used (e.g., "DEFAULT for column 'created_at'")
14
+ * @throws QuereusError if the expression is non-deterministic
15
+ */
16
+ export function validateDeterministicExpression(
17
+ expr: ScalarPlanNode,
18
+ context: string
19
+ ): void {
20
+ log('Validating determinism for: %s', context);
21
+
22
+ // Check physical properties - this will recursively check all child nodes
23
+ const physical = expr.physical;
24
+
25
+ if (physical.deterministic === false) {
26
+ log('Non-deterministic expression detected in %s: %s', context, expr.toString());
27
+
28
+ throw new QuereusError(
29
+ `Non-deterministic expression not allowed in ${context}. ` +
30
+ `Expression: ${expr.toString()}. ` +
31
+ `Use mutation context to pass non-deterministic values (e.g., WITH CONTEXT (timestamp = datetime('now'))).`,
32
+ StatusCode.ERROR
33
+ );
34
+ }
35
+
36
+ log('Expression is deterministic: %s', expr.toString());
37
+ }
38
+
39
+ /**
40
+ * Validates that a CHECK constraint expression is deterministic.
41
+ *
42
+ * @param expr The constraint expression plan node
43
+ * @param constraintName The name of the constraint (for error messages)
44
+ * @param tableName The name of the table (for error messages)
45
+ * @throws QuereusError if the expression is non-deterministic
46
+ */
47
+ export function validateDeterministicConstraint(
48
+ expr: ScalarPlanNode,
49
+ constraintName: string,
50
+ tableName: string
51
+ ): void {
52
+ validateDeterministicExpression(
53
+ expr,
54
+ `CHECK constraint '${constraintName}' on table '${tableName}'`
55
+ );
56
+ }
57
+
58
+ /**
59
+ * Validates that a DEFAULT expression is deterministic.
60
+ *
61
+ * @param expr The default value expression plan node
62
+ * @param columnName The name of the column (for error messages)
63
+ * @param tableName The name of the table (for error messages)
64
+ * @throws QuereusError if the expression is non-deterministic
65
+ */
66
+ export function validateDeterministicDefault(
67
+ expr: ScalarPlanNode,
68
+ columnName: string,
69
+ tableName: string
70
+ ): void {
71
+ validateDeterministicExpression(
72
+ expr,
73
+ `DEFAULT for column '${columnName}' in table '${tableName}'`
74
+ );
75
+ }
76
+
@@ -31,6 +31,9 @@ export function emitAddConstraint(plan: AddConstraintNode, _ctx: EmissionContext
31
31
  }
32
32
 
33
33
  // Create the constraint schema object
34
+ // Note: We don't validate determinism here because constraints may reference NEW/OLD
35
+ // which require special scoping. Determinism is validated at INSERT/UPDATE plan time
36
+ // in constraint-builder.ts when the constraint is actually checked.
34
37
  const constraintSchema: RowConstraintSchema = {
35
38
  name: constraint.name || `check_${tableSchema.checkConstraints.length}`,
36
39
  expr: constraint.expr,