@quereus/quereus 0.6.12 → 0.7.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 (53) hide show
  1. package/dist/src/parser/lexer.d.ts +6 -0
  2. package/dist/src/parser/lexer.d.ts.map +1 -1
  3. package/dist/src/parser/lexer.js +33 -1
  4. package/dist/src/parser/lexer.js.map +1 -1
  5. package/dist/src/parser/parser.d.ts.map +1 -1
  6. package/dist/src/parser/parser.js +28 -24
  7. package/dist/src/parser/parser.js.map +1 -1
  8. package/dist/src/planner/building/select-aggregates.d.ts +6 -1
  9. package/dist/src/planner/building/select-aggregates.d.ts.map +1 -1
  10. package/dist/src/planner/building/select-aggregates.js +23 -4
  11. package/dist/src/planner/building/select-aggregates.js.map +1 -1
  12. package/dist/src/planner/building/select-modifiers.js +7 -2
  13. package/dist/src/planner/building/select-modifiers.js.map +1 -1
  14. package/dist/src/planner/building/select.d.ts.map +1 -1
  15. package/dist/src/planner/building/select.js +2 -2
  16. package/dist/src/planner/building/select.js.map +1 -1
  17. package/dist/src/planner/building/update.d.ts.map +1 -1
  18. package/dist/src/planner/building/update.js +8 -4
  19. package/dist/src/planner/building/update.js.map +1 -1
  20. package/dist/src/planner/nodes/join-node.d.ts.map +1 -1
  21. package/dist/src/planner/nodes/join-node.js +6 -1
  22. package/dist/src/planner/nodes/join-node.js.map +1 -1
  23. package/dist/src/planner/rules/access/rule-select-access-path.js +15 -2
  24. package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
  25. package/dist/src/schema/manager.d.ts +30 -0
  26. package/dist/src/schema/manager.d.ts.map +1 -1
  27. package/dist/src/schema/manager.js +205 -0
  28. package/dist/src/schema/manager.js.map +1 -1
  29. package/dist/src/vtab/best-access-plan.d.ts +2 -0
  30. package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
  31. package/dist/src/vtab/best-access-plan.js.map +1 -1
  32. package/dist/src/vtab/memory/layer/scan-plan.js +2 -2
  33. package/dist/src/vtab/memory/layer/scan-plan.js.map +1 -1
  34. package/dist/src/vtab/memory/module.d.ts +1 -1
  35. package/dist/src/vtab/memory/module.d.ts.map +1 -1
  36. package/dist/src/vtab/memory/module.js +2 -1
  37. package/dist/src/vtab/memory/module.js.map +1 -1
  38. package/dist/src/vtab/module.d.ts +2 -1
  39. package/dist/src/vtab/module.d.ts.map +1 -1
  40. package/package.json +1 -1
  41. package/src/parser/lexer.ts +806 -771
  42. package/src/parser/parser.ts +3352 -3347
  43. package/src/planner/building/select-aggregates.ts +30 -5
  44. package/src/planner/building/select-modifiers.ts +8 -2
  45. package/src/planner/building/select.ts +567 -560
  46. package/src/planner/building/update.ts +9 -5
  47. package/src/planner/nodes/join-node.ts +6 -1
  48. package/src/planner/rules/access/rule-select-access-path.ts +399 -384
  49. package/src/schema/manager.ts +235 -1
  50. package/src/vtab/best-access-plan.ts +2 -0
  51. package/src/vtab/memory/layer/scan-plan.ts +2 -2
  52. package/src/vtab/memory/module.ts +2 -1
  53. package/src/vtab/module.ts +162 -160
@@ -66,11 +66,9 @@ export function buildUpdateStmt(
66
66
  // Create a new planning context with the updated scope for WHERE clause resolution
67
67
  const updateCtx = { ...ctx, scope: tableScope };
68
68
 
69
- if (stmt.where) {
70
- const filterExpression = buildExpression(updateCtx, stmt.where);
71
- sourceNode = new FilterNode(updateCtx.scope, sourceNode, filterExpression);
72
- }
73
-
69
+ // IMPORTANT: Build assignments FIRST to ensure parameter indices match SQL text order.
70
+ // SQL: UPDATE t SET col = ?1 WHERE id = ?2
71
+ // The SET clause parameters must be resolved before WHERE clause parameters.
74
72
  const assignments: UpdateAssignment[] = stmt.assignments.map(assign => {
75
73
  // TODO: Validate assign.column against tableReference.tableSchema
76
74
  const targetColumn: AST.ColumnExpr = { type: 'column', name: assign.column, table: stmt.table.name, schema: stmt.table.schema };
@@ -80,6 +78,12 @@ export function buildUpdateStmt(
80
78
  };
81
79
  });
82
80
 
81
+ // Now build the WHERE filter (parameters here get indices after SET clause parameters)
82
+ if (stmt.where) {
83
+ const filterExpression = buildExpression(updateCtx, stmt.where);
84
+ sourceNode = new FilterNode(updateCtx.scope, sourceNode, filterExpression);
85
+ }
86
+
83
87
  // Create OLD/NEW attributes for UPDATE (used for both RETURNING and non-RETURNING paths)
84
88
  const oldAttributes = tableReference.tableSchema.columns.map((col) => ({
85
89
  id: PlanNode.nextAttrId(),
@@ -295,13 +295,18 @@ export class JoinNode extends PlanNode implements BinaryRelationalNode, JoinCapa
295
295
  }
296
296
 
297
297
  override getLogicalAttributes(): Record<string, unknown> {
298
- return {
298
+ const attrs: Record<string, unknown> = {
299
299
  joinType: this.joinType,
300
300
  hasCondition: !!this.condition,
301
301
  usingColumns: this.usingColumns,
302
302
  leftRows: this.left.estimatedRows,
303
303
  rightRows: this.right.estimatedRows
304
304
  };
305
+ // Expose unique keys computed by physical properties
306
+ if (this.physical?.uniqueKeys) {
307
+ attrs.uniqueKeys = this.physical.uniqueKeys;
308
+ }
309
+ return attrs;
305
310
  }
306
311
 
307
312
  public getJoinType(): JoinType {