@quereus/quereus 0.5.2 → 0.6.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.
- package/README.md +5 -1
- package/dist/src/common/datatype.d.ts +4 -5
- package/dist/src/common/datatype.d.ts.map +1 -1
- package/dist/src/common/datatype.js.map +1 -1
- package/dist/src/common/type-inference.d.ts +3 -6
- package/dist/src/common/type-inference.d.ts.map +1 -1
- package/dist/src/common/type-inference.js +17 -22
- package/dist/src/common/type-inference.js.map +1 -1
- package/dist/src/core/param.d.ts.map +1 -1
- package/dist/src/core/param.js +3 -18
- package/dist/src/core/param.js.map +1 -1
- package/dist/src/func/builtins/aggregate.d.ts.map +1 -1
- package/dist/src/func/builtins/aggregate.js +24 -2
- package/dist/src/func/builtins/aggregate.js.map +1 -1
- package/dist/src/func/builtins/builtin-window-functions.js +10 -10
- package/dist/src/func/builtins/builtin-window-functions.js.map +1 -1
- package/dist/src/func/builtins/conversion.d.ts +10 -0
- package/dist/src/func/builtins/conversion.d.ts.map +1 -1
- package/dist/src/func/builtins/conversion.js +20 -1
- package/dist/src/func/builtins/conversion.js.map +1 -1
- package/dist/src/func/builtins/datetime.js +9 -9
- package/dist/src/func/builtins/datetime.js.map +1 -1
- package/dist/src/func/builtins/explain.js +53 -53
- package/dist/src/func/builtins/explain.js.map +1 -1
- package/dist/src/func/builtins/generation.js +2 -2
- package/dist/src/func/builtins/generation.js.map +1 -1
- package/dist/src/func/builtins/index.d.ts.map +1 -1
- package/dist/src/func/builtins/index.js +16 -1
- package/dist/src/func/builtins/index.js.map +1 -1
- package/dist/src/func/builtins/json-tvf.js +17 -17
- package/dist/src/func/builtins/json-tvf.js.map +1 -1
- package/dist/src/func/builtins/json.js +11 -11
- package/dist/src/func/builtins/json.js.map +1 -1
- package/dist/src/func/builtins/scalar.d.ts.map +1 -1
- package/dist/src/func/builtins/scalar.js +202 -13
- package/dist/src/func/builtins/scalar.js.map +1 -1
- package/dist/src/func/builtins/schema.js +18 -18
- package/dist/src/func/builtins/schema.js.map +1 -1
- package/dist/src/func/builtins/string.d.ts.map +1 -1
- package/dist/src/func/builtins/string.js +59 -50
- package/dist/src/func/builtins/string.js.map +1 -1
- package/dist/src/func/builtins/timespan.d.ts +45 -0
- package/dist/src/func/builtins/timespan.d.ts.map +1 -0
- package/dist/src/func/builtins/timespan.js +147 -0
- package/dist/src/func/builtins/timespan.js.map +1 -0
- package/dist/src/func/registration.d.ts +26 -0
- package/dist/src/func/registration.d.ts.map +1 -1
- package/dist/src/func/registration.js +9 -5
- package/dist/src/func/registration.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/parser/parser.js +2 -2
- package/dist/src/parser/parser.js.map +1 -1
- package/dist/src/planner/building/constraint-builder.js +2 -2
- package/dist/src/planner/building/constraint-builder.js.map +1 -1
- package/dist/src/planner/building/delete.js +3 -3
- package/dist/src/planner/building/delete.js.map +1 -1
- package/dist/src/planner/building/function-call.d.ts.map +1 -1
- package/dist/src/planner/building/function-call.js +24 -4
- package/dist/src/planner/building/function-call.js.map +1 -1
- package/dist/src/planner/building/insert.js +3 -3
- package/dist/src/planner/building/insert.js.map +1 -1
- package/dist/src/planner/building/select.d.ts.map +1 -1
- package/dist/src/planner/building/select.js +3 -2
- package/dist/src/planner/building/select.js.map +1 -1
- package/dist/src/planner/building/update.js +7 -7
- package/dist/src/planner/building/update.js.map +1 -1
- package/dist/src/planner/nodes/aggregate-function.d.ts +2 -1
- package/dist/src/planner/nodes/aggregate-function.d.ts.map +1 -1
- package/dist/src/planner/nodes/aggregate-function.js +10 -3
- package/dist/src/planner/nodes/aggregate-function.js.map +1 -1
- package/dist/src/planner/nodes/cte-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/cte-node.js +2 -2
- package/dist/src/planner/nodes/cte-node.js.map +1 -1
- package/dist/src/planner/nodes/declarative-schema.js +3 -3
- package/dist/src/planner/nodes/declarative-schema.js.map +1 -1
- package/dist/src/planner/nodes/function.d.ts +2 -1
- package/dist/src/planner/nodes/function.d.ts.map +1 -1
- package/dist/src/planner/nodes/function.js +6 -3
- package/dist/src/planner/nodes/function.js.map +1 -1
- package/dist/src/planner/nodes/insert-node.js +1 -1
- package/dist/src/planner/nodes/insert-node.js.map +1 -1
- package/dist/src/planner/nodes/pragma.d.ts +1 -1
- package/dist/src/planner/nodes/pragma.d.ts.map +1 -1
- package/dist/src/planner/nodes/pragma.js +3 -3
- package/dist/src/planner/nodes/pragma.js.map +1 -1
- package/dist/src/planner/nodes/reference.js +1 -1
- package/dist/src/planner/nodes/reference.js.map +1 -1
- package/dist/src/planner/nodes/scalar.d.ts.map +1 -1
- package/dist/src/planner/nodes/scalar.js +55 -101
- package/dist/src/planner/nodes/scalar.js.map +1 -1
- package/dist/src/planner/nodes/sequencing-node.js +2 -2
- package/dist/src/planner/nodes/sequencing-node.js.map +1 -1
- package/dist/src/planner/nodes/sink-node.js +2 -2
- package/dist/src/planner/nodes/sink-node.js.map +1 -1
- package/dist/src/planner/nodes/subquery.d.ts.map +1 -1
- package/dist/src/planner/nodes/subquery.js +4 -7
- package/dist/src/planner/nodes/subquery.js.map +1 -1
- package/dist/src/planner/nodes/view-reference-node.d.ts.map +1 -1
- package/dist/src/planner/nodes/view-reference-node.js +2 -2
- package/dist/src/planner/nodes/view-reference-node.js.map +1 -1
- package/dist/src/planner/nodes/window-function.js +3 -3
- package/dist/src/planner/nodes/window-function.js.map +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js +1 -1
- package/dist/src/planner/rules/access/rule-select-access-path.js.map +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js +1 -1
- package/dist/src/planner/rules/retrieve/rule-grow-retrieve.js.map +1 -1
- package/dist/src/planner/scopes/global.js +3 -3
- package/dist/src/planner/scopes/global.js.map +1 -1
- package/dist/src/planner/scopes/param.d.ts.map +1 -1
- package/dist/src/planner/scopes/param.js +2 -2
- package/dist/src/planner/scopes/param.js.map +1 -1
- package/dist/src/planner/type-utils.d.ts +2 -12
- package/dist/src/planner/type-utils.d.ts.map +1 -1
- package/dist/src/planner/type-utils.js +6 -21
- package/dist/src/planner/type-utils.js.map +1 -1
- package/dist/src/runtime/emit/between.js +2 -2
- package/dist/src/runtime/emit/between.js.map +1 -1
- package/dist/src/runtime/emit/binary.d.ts.map +1 -1
- package/dist/src/runtime/emit/binary.js +66 -30
- package/dist/src/runtime/emit/binary.js.map +1 -1
- package/dist/src/runtime/emit/subquery.js +8 -8
- package/dist/src/runtime/emit/subquery.js.map +1 -1
- package/dist/src/runtime/emit/temporal-arithmetic.d.ts +33 -0
- package/dist/src/runtime/emit/temporal-arithmetic.d.ts.map +1 -0
- package/dist/src/runtime/emit/temporal-arithmetic.js +269 -0
- package/dist/src/runtime/emit/temporal-arithmetic.js.map +1 -0
- package/dist/src/runtime/emit/unary.d.ts.map +1 -1
- package/dist/src/runtime/emit/unary.js +16 -4
- package/dist/src/runtime/emit/unary.js.map +1 -1
- package/dist/src/schema/catalog.js +3 -3
- package/dist/src/schema/catalog.js.map +1 -1
- package/dist/src/schema/column.d.ts +0 -3
- package/dist/src/schema/column.d.ts.map +1 -1
- package/dist/src/schema/column.js +0 -2
- package/dist/src/schema/column.js.map +1 -1
- package/dist/src/schema/function.d.ts +29 -1
- package/dist/src/schema/function.d.ts.map +1 -1
- package/dist/src/schema/function.js.map +1 -1
- package/dist/src/schema/table.d.ts +3 -3
- package/dist/src/schema/table.d.ts.map +1 -1
- package/dist/src/schema/table.js +4 -6
- package/dist/src/schema/table.js.map +1 -1
- package/dist/src/types/index.d.ts +1 -1
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js +1 -1
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/types/registry.d.ts.map +1 -1
- package/dist/src/types/registry.js +5 -1
- package/dist/src/types/registry.js.map +1 -1
- package/dist/src/types/temporal-types.d.ts +5 -0
- package/dist/src/types/temporal-types.d.ts.map +1 -1
- package/dist/src/types/temporal-types.js +122 -0
- package/dist/src/types/temporal-types.js.map +1 -1
- package/dist/src/util/plan-formatter.d.ts.map +1 -1
- package/dist/src/util/plan-formatter.js +1 -5
- package/dist/src/util/plan-formatter.js.map +1 -1
- package/dist/src/util/row-descriptor.js +2 -2
- package/dist/src/util/row-descriptor.js.map +1 -1
- package/dist/src/vtab/best-access-plan.d.ts +4 -3
- package/dist/src/vtab/best-access-plan.d.ts.map +1 -1
- package/dist/src/vtab/best-access-plan.js.map +1 -1
- package/dist/src/vtab/memory/module.js +1 -1
- package/dist/src/vtab/memory/module.js.map +1 -1
- package/package.json +1 -1
- package/src/common/datatype.ts +4 -5
- package/src/common/type-inference.ts +13 -22
- package/src/core/param.ts +4 -11
- package/src/func/builtins/aggregate.ts +24 -2
- package/src/func/builtins/builtin-window-functions.ts +10 -10
- package/src/func/builtins/conversion.ts +26 -1
- package/src/func/builtins/datetime.ts +9 -9
- package/src/func/builtins/explain.ts +53 -53
- package/src/func/builtins/generation.ts +2 -2
- package/src/func/builtins/index.ts +20 -1
- package/src/func/builtins/json-tvf.ts +17 -17
- package/src/func/builtins/json.ts +11 -11
- package/src/func/builtins/scalar.ts +205 -14
- package/src/func/builtins/schema.ts +18 -18
- package/src/func/builtins/string.ts +93 -80
- package/src/func/builtins/timespan.ts +179 -0
- package/src/func/registration.ts +35 -5
- package/src/index.ts +2 -1
- package/src/parser/parser.ts +2 -2
- package/src/planner/building/constraint-builder.ts +2 -2
- package/src/planner/building/delete.ts +3 -3
- package/src/planner/building/function-call.ts +44 -3
- package/src/planner/building/insert.ts +3 -3
- package/src/planner/building/select.ts +3 -2
- package/src/planner/building/update.ts +7 -7
- package/src/planner/nodes/aggregate-function.ts +13 -3
- package/src/planner/nodes/cte-node.ts +2 -2
- package/src/planner/nodes/declarative-schema.ts +3 -3
- package/src/planner/nodes/function.ts +8 -3
- package/src/planner/nodes/insert-node.ts +1 -1
- package/src/planner/nodes/pragma.ts +4 -3
- package/src/planner/nodes/reference.ts +1 -1
- package/src/planner/nodes/scalar.ts +54 -102
- package/src/planner/nodes/sequencing-node.ts +2 -2
- package/src/planner/nodes/sink-node.ts +2 -2
- package/src/planner/nodes/subquery.ts +5 -7
- package/src/planner/nodes/view-reference-node.ts +2 -2
- package/src/planner/nodes/window-function.ts +3 -3
- package/src/planner/rules/access/rule-select-access-path.ts +1 -1
- package/src/planner/rules/retrieve/rule-grow-retrieve.ts +1 -1
- package/src/planner/scopes/global.ts +3 -3
- package/src/planner/scopes/param.ts +2 -2
- package/src/planner/type-utils.ts +6 -14
- package/src/runtime/emit/between.ts +2 -2
- package/src/runtime/emit/binary.ts +74 -30
- package/src/runtime/emit/subquery.ts +8 -8
- package/src/runtime/emit/temporal-arithmetic.ts +302 -0
- package/src/runtime/emit/unary.ts +17 -4
- package/src/schema/catalog.ts +3 -3
- package/src/schema/column.ts +0 -3
- package/src/schema/function.ts +29 -1
- package/src/schema/table.ts +5 -7
- package/src/types/index.ts +1 -1
- package/src/types/registry.ts +5 -1
- package/src/types/temporal-types.ts +123 -0
- package/src/util/plan-formatter.ts +1 -4
- package/src/util/row-descriptor.ts +2 -2
- package/src/vtab/best-access-plan.ts +4 -3
- package/src/vtab/memory/module.ts +1 -1
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { StatusCode } from "../../common/types.js";
|
|
2
|
+
import { QuereusError } from "../../common/errors.js";
|
|
3
|
+
import { emitPlanNode } from "../emitters.js";
|
|
4
|
+
import { Temporal } from 'temporal-polyfill';
|
|
5
|
+
import { TIMESPAN_TYPE } from "../../types/temporal-types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Check if a value is a date string (YYYY-MM-DD format)
|
|
8
|
+
*/
|
|
9
|
+
function isDateValue(v) {
|
|
10
|
+
if (typeof v !== 'string')
|
|
11
|
+
return false;
|
|
12
|
+
// Simple check for ISO 8601 date format
|
|
13
|
+
return /^\d{4}-\d{2}-\d{2}$/.test(v);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Check if a value is a time string (HH:MM:SS format)
|
|
17
|
+
*/
|
|
18
|
+
function isTimeValue(v) {
|
|
19
|
+
if (typeof v !== 'string')
|
|
20
|
+
return false;
|
|
21
|
+
// Simple check for ISO 8601 time format
|
|
22
|
+
return /^\d{2}:\d{2}:\d{2}/.test(v);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if a value is a datetime string (ISO 8601 format)
|
|
26
|
+
*/
|
|
27
|
+
function isDateTimeValue(v) {
|
|
28
|
+
if (typeof v !== 'string')
|
|
29
|
+
return false;
|
|
30
|
+
// Check for ISO 8601 datetime format (with T separator)
|
|
31
|
+
return v.includes('T') && /^\d{4}-\d{2}-\d{2}T/.test(v);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Check if a value is a timespan/duration string (ISO 8601 duration format)
|
|
35
|
+
*/
|
|
36
|
+
function isTimespanValue(v) {
|
|
37
|
+
if (typeof v !== 'string')
|
|
38
|
+
return false;
|
|
39
|
+
// ISO 8601 duration starts with P (or -P for negative)
|
|
40
|
+
return v.startsWith('P') || v.startsWith('-P');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Try to perform temporal arithmetic on two values.
|
|
44
|
+
* Returns the result if successful, or undefined if the values are not temporal types.
|
|
45
|
+
* Throws QuereusError if the operation is invalid.
|
|
46
|
+
*/
|
|
47
|
+
export function tryTemporalArithmetic(operator, v1, v2) {
|
|
48
|
+
if (v1 === null || v2 === null)
|
|
49
|
+
return null;
|
|
50
|
+
// Detect types at runtime
|
|
51
|
+
const isV1Date = isDateValue(v1);
|
|
52
|
+
const isV1Time = isTimeValue(v1);
|
|
53
|
+
const isV1DateTime = isDateTimeValue(v1);
|
|
54
|
+
const isV1Timespan = isTimespanValue(v1);
|
|
55
|
+
const isV2Date = isDateValue(v2);
|
|
56
|
+
const isV2Time = isTimeValue(v2);
|
|
57
|
+
const isV2DateTime = isDateTimeValue(v2);
|
|
58
|
+
const isV2Timespan = isTimespanValue(v2);
|
|
59
|
+
// If neither operand is temporal, return undefined to signal non-temporal operation
|
|
60
|
+
const isV1Temporal = isV1Date || isV1Time || isV1DateTime || isV1Timespan;
|
|
61
|
+
const isV2Temporal = isV2Date || isV2Time || isV2DateTime || isV2Timespan;
|
|
62
|
+
if (!isV1Temporal && !isV2Temporal) {
|
|
63
|
+
return undefined;
|
|
64
|
+
}
|
|
65
|
+
try {
|
|
66
|
+
// DATE/DATETIME - DATE/DATETIME → TIMESPAN
|
|
67
|
+
if (operator === '-' &&
|
|
68
|
+
(isV1Date || isV1DateTime) &&
|
|
69
|
+
(isV2Date || isV2DateTime)) {
|
|
70
|
+
// Parse both values as dates
|
|
71
|
+
const date1 = isV1DateTime
|
|
72
|
+
? Temporal.PlainDateTime.from(v1).toPlainDate()
|
|
73
|
+
: Temporal.PlainDate.from(v1);
|
|
74
|
+
const date2 = isV2DateTime
|
|
75
|
+
? Temporal.PlainDateTime.from(v2).toPlainDate()
|
|
76
|
+
: Temporal.PlainDate.from(v2);
|
|
77
|
+
const duration = date1.since(date2);
|
|
78
|
+
return duration.toString();
|
|
79
|
+
}
|
|
80
|
+
// TIME - TIME → TIMESPAN
|
|
81
|
+
if (operator === '-' && isV1Time && isV2Time) {
|
|
82
|
+
const time1 = Temporal.PlainTime.from(v1);
|
|
83
|
+
const time2 = Temporal.PlainTime.from(v2);
|
|
84
|
+
const duration = time1.since(time2);
|
|
85
|
+
return duration.toString();
|
|
86
|
+
}
|
|
87
|
+
// DATE + TIMESPAN → DATE
|
|
88
|
+
if (operator === '+' && isV1Date && isV2Timespan) {
|
|
89
|
+
const date = Temporal.PlainDate.from(v1);
|
|
90
|
+
const duration = Temporal.Duration.from(v2);
|
|
91
|
+
const result = date.add(duration);
|
|
92
|
+
return result.toString();
|
|
93
|
+
}
|
|
94
|
+
// TIMESPAN + DATE → DATE (commutative)
|
|
95
|
+
if (operator === '+' && isV1Timespan && isV2Date) {
|
|
96
|
+
const duration = Temporal.Duration.from(v1);
|
|
97
|
+
const date = Temporal.PlainDate.from(v2);
|
|
98
|
+
const result = date.add(duration);
|
|
99
|
+
return result.toString();
|
|
100
|
+
}
|
|
101
|
+
// DATE - TIMESPAN → DATE
|
|
102
|
+
if (operator === '-' && isV1Date && isV2Timespan) {
|
|
103
|
+
const date = Temporal.PlainDate.from(v1);
|
|
104
|
+
const duration = Temporal.Duration.from(v2);
|
|
105
|
+
const result = date.subtract(duration);
|
|
106
|
+
return result.toString();
|
|
107
|
+
}
|
|
108
|
+
// DATETIME + TIMESPAN → DATETIME
|
|
109
|
+
if (operator === '+' && isV1DateTime && isV2Timespan) {
|
|
110
|
+
const dt = Temporal.PlainDateTime.from(v1);
|
|
111
|
+
const duration = Temporal.Duration.from(v2);
|
|
112
|
+
const result = dt.add(duration);
|
|
113
|
+
return result.toString();
|
|
114
|
+
}
|
|
115
|
+
// TIMESPAN + DATETIME → DATETIME (commutative)
|
|
116
|
+
if (operator === '+' && isV1Timespan && isV2DateTime) {
|
|
117
|
+
const duration = Temporal.Duration.from(v1);
|
|
118
|
+
const dt = Temporal.PlainDateTime.from(v2);
|
|
119
|
+
const result = dt.add(duration);
|
|
120
|
+
return result.toString();
|
|
121
|
+
}
|
|
122
|
+
// DATETIME - TIMESPAN → DATETIME
|
|
123
|
+
if (operator === '-' && isV1DateTime && isV2Timespan) {
|
|
124
|
+
const dt = Temporal.PlainDateTime.from(v1);
|
|
125
|
+
const duration = Temporal.Duration.from(v2);
|
|
126
|
+
const result = dt.subtract(duration);
|
|
127
|
+
return result.toString();
|
|
128
|
+
}
|
|
129
|
+
// TIME + TIMESPAN → TIME
|
|
130
|
+
if (operator === '+' && isV1Time && isV2Timespan) {
|
|
131
|
+
const time = Temporal.PlainTime.from(v1);
|
|
132
|
+
const duration = Temporal.Duration.from(v2);
|
|
133
|
+
const result = time.add(duration);
|
|
134
|
+
return result.toString();
|
|
135
|
+
}
|
|
136
|
+
// TIMESPAN + TIME → TIME (commutative)
|
|
137
|
+
if (operator === '+' && isV1Timespan && isV2Time) {
|
|
138
|
+
const duration = Temporal.Duration.from(v1);
|
|
139
|
+
const time = Temporal.PlainTime.from(v2);
|
|
140
|
+
const result = time.add(duration);
|
|
141
|
+
return result.toString();
|
|
142
|
+
}
|
|
143
|
+
// TIME - TIMESPAN → TIME
|
|
144
|
+
if (operator === '-' && isV1Time && isV2Timespan) {
|
|
145
|
+
const time = Temporal.PlainTime.from(v1);
|
|
146
|
+
const duration = Temporal.Duration.from(v2);
|
|
147
|
+
const result = time.subtract(duration);
|
|
148
|
+
return result.toString();
|
|
149
|
+
}
|
|
150
|
+
// TIMESPAN + TIMESPAN → TIMESPAN
|
|
151
|
+
if (operator === '+' && isV1Timespan && isV2Timespan) {
|
|
152
|
+
const d1 = Temporal.Duration.from(v1);
|
|
153
|
+
const d2 = Temporal.Duration.from(v2);
|
|
154
|
+
const result = d1.add(d2);
|
|
155
|
+
return result.toString();
|
|
156
|
+
}
|
|
157
|
+
// TIMESPAN - TIMESPAN → TIMESPAN
|
|
158
|
+
if (operator === '-' && isV1Timespan && isV2Timespan) {
|
|
159
|
+
const d1 = Temporal.Duration.from(v1);
|
|
160
|
+
const d2 = Temporal.Duration.from(v2);
|
|
161
|
+
const result = d1.subtract(d2);
|
|
162
|
+
return result.toString();
|
|
163
|
+
}
|
|
164
|
+
// TIMESPAN * NUMBER → TIMESPAN
|
|
165
|
+
if (operator === '*' && isV1Timespan && typeof v2 === 'number') {
|
|
166
|
+
const duration = Temporal.Duration.from(v1);
|
|
167
|
+
// Convert to seconds, multiply, convert back
|
|
168
|
+
const totalSeconds = duration.total({ unit: 'seconds' });
|
|
169
|
+
const newDuration = Temporal.Duration.from({ seconds: totalSeconds * v2 });
|
|
170
|
+
return newDuration.toString();
|
|
171
|
+
}
|
|
172
|
+
// NUMBER * TIMESPAN → TIMESPAN (commutative)
|
|
173
|
+
if (operator === '*' && typeof v1 === 'number' && isV2Timespan) {
|
|
174
|
+
const duration = Temporal.Duration.from(v2);
|
|
175
|
+
const totalSeconds = duration.total({ unit: 'seconds' });
|
|
176
|
+
const newDuration = Temporal.Duration.from({ seconds: totalSeconds * v1 });
|
|
177
|
+
return newDuration.toString();
|
|
178
|
+
}
|
|
179
|
+
// TIMESPAN / NUMBER → TIMESPAN
|
|
180
|
+
if (operator === '/' && isV1Timespan && typeof v2 === 'number') {
|
|
181
|
+
if (v2 === 0)
|
|
182
|
+
return null;
|
|
183
|
+
const duration = Temporal.Duration.from(v1);
|
|
184
|
+
const totalSeconds = duration.total({ unit: 'seconds' });
|
|
185
|
+
const newDuration = Temporal.Duration.from({ seconds: totalSeconds / v2 });
|
|
186
|
+
return newDuration.toString();
|
|
187
|
+
}
|
|
188
|
+
// TIMESPAN / TIMESPAN → NUMBER (ratio)
|
|
189
|
+
if (operator === '/' && isV1Timespan && isV2Timespan) {
|
|
190
|
+
const d1 = Temporal.Duration.from(v1);
|
|
191
|
+
const d2 = Temporal.Duration.from(v2);
|
|
192
|
+
const total1 = d1.total({ unit: 'seconds' });
|
|
193
|
+
const total2 = d2.total({ unit: 'seconds' });
|
|
194
|
+
if (total2 === 0)
|
|
195
|
+
return null;
|
|
196
|
+
return total1 / total2;
|
|
197
|
+
}
|
|
198
|
+
// If we get here, the operation is not supported
|
|
199
|
+
throw new QuereusError(`Unsupported temporal operation`, StatusCode.UNSUPPORTED);
|
|
200
|
+
}
|
|
201
|
+
catch (e) {
|
|
202
|
+
// Invalid temporal operation - return null
|
|
203
|
+
if (e instanceof QuereusError)
|
|
204
|
+
throw e;
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Emit temporal arithmetic operations
|
|
210
|
+
* Handles operations between temporal types (DATE, TIME, DATETIME, TIMESPAN)
|
|
211
|
+
*/
|
|
212
|
+
export function emitTemporalArithmetic(plan, ctx) {
|
|
213
|
+
const operator = plan.expression.operator;
|
|
214
|
+
function run(ctx, v1, v2) {
|
|
215
|
+
return tryTemporalArithmetic(operator, v1, v2) ?? null;
|
|
216
|
+
}
|
|
217
|
+
const leftExpr = emitPlanNode(plan.left, ctx);
|
|
218
|
+
const rightExpr = emitPlanNode(plan.right, ctx);
|
|
219
|
+
return {
|
|
220
|
+
params: [leftExpr, rightExpr],
|
|
221
|
+
run: run,
|
|
222
|
+
note: `${operator}(temporal)`
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Attempts to perform temporal comparison. Returns undefined if not a temporal comparison.
|
|
227
|
+
* This allows the caller to fall back to standard comparison logic.
|
|
228
|
+
*
|
|
229
|
+
* Temporal types that need special comparison logic (beyond lexicographic string comparison):
|
|
230
|
+
* - TIMESPAN: Durations need to be compared semantically, not lexicographically
|
|
231
|
+
* (e.g., "PT30M" > "PT1H" lexicographically, but 30 minutes < 1 hour semantically)
|
|
232
|
+
*
|
|
233
|
+
* Note: DATE, TIME, and DATETIME use ISO 8601 format which compares correctly lexicographically,
|
|
234
|
+
* so they don't need special handling here.
|
|
235
|
+
*
|
|
236
|
+
* @param operator The comparison operator (=, !=, <, <=, >, >=)
|
|
237
|
+
* @param v1 First value
|
|
238
|
+
* @param v2 Second value
|
|
239
|
+
* @returns Comparison result (boolean) if temporal comparison, undefined otherwise
|
|
240
|
+
*/
|
|
241
|
+
export function tryTemporalComparison(operator, v1, v2) {
|
|
242
|
+
// Check if both values are timespans
|
|
243
|
+
// Timespans are the only temporal type that needs special comparison logic
|
|
244
|
+
// because ISO 8601 duration strings don't compare correctly lexicographically
|
|
245
|
+
if (!isTimespanValue(v1) || !isTimespanValue(v2)) {
|
|
246
|
+
return undefined;
|
|
247
|
+
}
|
|
248
|
+
// Use the TIMESPAN_TYPE's compare function
|
|
249
|
+
const cmp = TIMESPAN_TYPE.compare(v1, v2);
|
|
250
|
+
switch (operator) {
|
|
251
|
+
case '=':
|
|
252
|
+
case '==':
|
|
253
|
+
return cmp === 0;
|
|
254
|
+
case '!=':
|
|
255
|
+
case '<>':
|
|
256
|
+
return cmp !== 0;
|
|
257
|
+
case '<':
|
|
258
|
+
return cmp < 0;
|
|
259
|
+
case '<=':
|
|
260
|
+
return cmp <= 0;
|
|
261
|
+
case '>':
|
|
262
|
+
return cmp > 0;
|
|
263
|
+
case '>=':
|
|
264
|
+
return cmp >= 0;
|
|
265
|
+
default:
|
|
266
|
+
return undefined;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=temporal-arithmetic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"temporal-arithmetic.js","sourceRoot":"","sources":["../../../../src/runtime/emit/temporal-arithmetic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unary.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/unary.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAkC,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"unary.d.ts","sourceRoot":"","sources":["../../../../src/runtime/emit/unary.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAkC,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAI9D,wBAAgB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,eAAe,GAAG,WAAW,CA0FhF"}
|
|
@@ -2,6 +2,7 @@ import { StatusCode } from "../../common/types.js";
|
|
|
2
2
|
import { QuereusError } from "../../common/errors.js";
|
|
3
3
|
import { emitPlanNode } from "../emitters.js";
|
|
4
4
|
import { isTruthy } from "../../util/comparison.js";
|
|
5
|
+
import { Temporal } from 'temporal-polyfill';
|
|
5
6
|
export function emitUnaryOp(plan, ctx) {
|
|
6
7
|
// Select the operation function at emit time
|
|
7
8
|
let run;
|
|
@@ -11,22 +12,22 @@ export function emitUnaryOp(plan, ctx) {
|
|
|
11
12
|
switch (operator) {
|
|
12
13
|
case 'NOT':
|
|
13
14
|
run = (ctx, operand) => {
|
|
14
|
-
// SQL NOT: NULL -> NULL,
|
|
15
|
+
// SQL NOT: NULL -> NULL, false -> true, true -> false
|
|
15
16
|
if (operand === null)
|
|
16
17
|
return null;
|
|
17
|
-
return isTruthy(operand)
|
|
18
|
+
return !isTruthy(operand);
|
|
18
19
|
};
|
|
19
20
|
note = 'NOT';
|
|
20
21
|
break;
|
|
21
22
|
case 'IS NULL':
|
|
22
23
|
run = (ctx, operand) => {
|
|
23
|
-
return operand === null
|
|
24
|
+
return operand === null;
|
|
24
25
|
};
|
|
25
26
|
note = 'IS NULL';
|
|
26
27
|
break;
|
|
27
28
|
case 'IS NOT NULL':
|
|
28
29
|
run = (ctx, operand) => {
|
|
29
|
-
return operand !== null
|
|
30
|
+
return operand !== null;
|
|
30
31
|
};
|
|
31
32
|
note = 'IS NOT NULL';
|
|
32
33
|
break;
|
|
@@ -34,6 +35,17 @@ export function emitUnaryOp(plan, ctx) {
|
|
|
34
35
|
run = (ctx, operand) => {
|
|
35
36
|
if (operand === null)
|
|
36
37
|
return null;
|
|
38
|
+
// Check if it's a timespan (ISO 8601 duration string)
|
|
39
|
+
if (typeof operand === 'string' && (operand.startsWith('P') || operand.startsWith('-P'))) {
|
|
40
|
+
try {
|
|
41
|
+
const duration = Temporal.Duration.from(operand);
|
|
42
|
+
return duration.negated().toString();
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Not a valid duration, fall through to numeric handling
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// Numeric negation
|
|
37
49
|
if (typeof operand === 'number')
|
|
38
50
|
return -operand;
|
|
39
51
|
if (typeof operand === 'bigint')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unary.js","sourceRoot":"","sources":["../../../../src/runtime/emit/unary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"unary.js","sourceRoot":"","sources":["../../../../src/runtime/emit/unary.ts"],"names":[],"mappings":"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"}
|
|
@@ -54,7 +54,7 @@ function tableSchemaToCatalog(tableSchema) {
|
|
|
54
54
|
const ddl = generateTableDDL(tableSchema);
|
|
55
55
|
const columns = tableSchema.columns.map(col => ({
|
|
56
56
|
name: col.name,
|
|
57
|
-
type: col.
|
|
57
|
+
type: col.logicalType.name,
|
|
58
58
|
notNull: col.notNull,
|
|
59
59
|
primaryKey: col.primaryKey
|
|
60
60
|
}));
|
|
@@ -109,8 +109,8 @@ function generateTableDDL(tableSchema) {
|
|
|
109
109
|
const columnDefs = [];
|
|
110
110
|
for (const col of tableSchema.columns) {
|
|
111
111
|
let colDef = `"${col.name}"`;
|
|
112
|
-
if (col.
|
|
113
|
-
colDef += ` ${col.
|
|
112
|
+
if (col.logicalType) {
|
|
113
|
+
colDef += ` ${col.logicalType.name}`;
|
|
114
114
|
}
|
|
115
115
|
if (col.notNull) {
|
|
116
116
|
colDef += ' NOT NULL';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/schema/catalog.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAoCxG;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,EAAY,EAAE,aAAqB,MAAM;IAC7E,MAAM,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,CAAC,MAAM,EAAE,CAAC;QACb,OAAO;YACN,UAAU;YACV,MAAM,EAAE,EAAE;YACV,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,EAAE;SACd,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,MAAM,OAAO,GAAmB,EAAE,CAAC;IACnC,MAAM,UAAU,GAAuB,EAAE,CAAC;IAE1C,iBAAiB;IACjB,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAC;YAE/C,iCAAiC;YACjC,IAAI,WAAW,CAAC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3D,KAAK,MAAM,WAAW,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;oBAC/C,OAAO,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,WAAW,CAAC,IAAI;wBACtB,SAAS,EAAE,WAAW,CAAC,IAAI;wBAC3B,GAAG,EAAE,gBAAgB,CAAC,WAAW,EAAE,WAAW,CAAC;qBAC/C,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,gBAAgB;IAChB,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,qBAAqB;IACrB,KAAK,MAAM,eAAe,IAAI,MAAM,CAAC,gBAAgB,EAAE,EAAE,CAAC;QACzD,UAAU,CAAC,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO;QACN,UAAU;QACV,MAAM;QACN,KAAK;QACL,OAAO;QACP,UAAU;KACV,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,WAAwB;IACrD,0CAA0C;IAC1C,MAAM,GAAG,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAE1C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,IAAI,EAAE,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/schema/catalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { SqlDataType } from '../common/types.js';
|
|
2
1
|
import type { Expression } from '../parser/ast.js';
|
|
3
2
|
import type { LogicalType } from '../types/logical-type.js';
|
|
4
3
|
/**
|
|
@@ -9,8 +8,6 @@ export interface ColumnSchema {
|
|
|
9
8
|
name: string;
|
|
10
9
|
/** Logical type definition */
|
|
11
10
|
logicalType: LogicalType;
|
|
12
|
-
/** Data type affinity (TEXT, INTEGER, REAL, BLOB, NUMERIC) - kept for backward compatibility during transition */
|
|
13
|
-
affinity: SqlDataType;
|
|
14
11
|
/** Whether the column has a NOT NULL constraint */
|
|
15
12
|
notNull: boolean;
|
|
16
13
|
/** Whether the column is part of the primary key */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../src/schema/column.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../src/schema/column.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,WAAW,EAAE,WAAW,CAAC;IACzB,mDAAmD;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,oDAAoD;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,YAAY,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,sDAAsD;IACtD,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,GAAE,OAAc,GAAG,YAAY,CAcpG"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { SqlDataType } from '../common/types.js';
|
|
2
1
|
/**
|
|
3
2
|
* Creates a default ColumnSchema with basic properties
|
|
4
3
|
* Following Third Manifesto principles, columns default to NOT NULL unless explicitly specified otherwise
|
|
@@ -13,7 +12,6 @@ export function createDefaultColumnSchema(name, defaultNotNull = true) {
|
|
|
13
12
|
return {
|
|
14
13
|
name: name,
|
|
15
14
|
logicalType: TEXT_TYPE,
|
|
16
|
-
affinity: SqlDataType.TEXT,
|
|
17
15
|
notNull: defaultNotNull, // Third Manifesto: default to NOT NULL
|
|
18
16
|
primaryKey: false,
|
|
19
17
|
pkOrder: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column.js","sourceRoot":"","sources":["../../../src/schema/column.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"column.js","sourceRoot":"","sources":["../../../src/schema/column.ts"],"names":[],"mappings":"AA4BA;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,iBAA0B,IAAI;IACrF,yDAAyD;IACzD,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAE3D,OAAO;QACN,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,cAAc,EAAE,uCAAuC;QAChE,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,QAAQ,EAAE,mBAAmB;QACxC,SAAS,EAAE,KAAK;KAChB,CAAC;AACH,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type { MaybePromise, Row, SqlValue } from '../common/types.js';
|
|
1
|
+
import type { MaybePromise, Row, SqlValue, DeepReadonly } from '../common/types.js';
|
|
2
2
|
import { FunctionFlags } from '../common/constants.js';
|
|
3
3
|
import { SqlDataType } from '../common/types.js';
|
|
4
4
|
import type { Database } from '../core/database.js';
|
|
5
5
|
import type { BaseType, ScalarType, RelationType } from '../common/datatype.js';
|
|
6
6
|
import type { AggValue } from '../func/registration.js';
|
|
7
|
+
import type { LogicalType } from '../types/logical-type.js';
|
|
7
8
|
/**
|
|
8
9
|
* Type for a scalar function implementation.
|
|
9
10
|
*/
|
|
@@ -62,6 +63,21 @@ export interface ScalarFunctionSchema extends BaseFunctionSchema {
|
|
|
62
63
|
returnType: ScalarType;
|
|
63
64
|
/** Direct scalar function implementation */
|
|
64
65
|
implementation: ScalarFunc;
|
|
66
|
+
/**
|
|
67
|
+
* Optional type inference function for polymorphic functions.
|
|
68
|
+
* If provided, this function will be called at planning time to determine
|
|
69
|
+
* the return type based on the actual argument types.
|
|
70
|
+
* This allows functions like abs() to return INTEGER when given INTEGER,
|
|
71
|
+
* and REAL when given REAL.
|
|
72
|
+
*/
|
|
73
|
+
inferReturnType?: (argTypes: ReadonlyArray<DeepReadonly<LogicalType>>) => ScalarType;
|
|
74
|
+
/**
|
|
75
|
+
* Optional argument type validation function.
|
|
76
|
+
* If provided, this function will be called at planning time to validate
|
|
77
|
+
* that the argument types are acceptable for this function.
|
|
78
|
+
* Should return true if types are valid, false otherwise.
|
|
79
|
+
*/
|
|
80
|
+
validateArgTypes?: (argTypes: ReadonlyArray<DeepReadonly<LogicalType>>) => boolean;
|
|
65
81
|
}
|
|
66
82
|
/**
|
|
67
83
|
* Schema for table-valued functions that return rows.
|
|
@@ -84,6 +100,18 @@ export interface AggregateFunctionSchema extends BaseFunctionSchema {
|
|
|
84
100
|
finalizeFunction: AggregateFinalizer;
|
|
85
101
|
/** Initial accumulator value for aggregates */
|
|
86
102
|
initialValue?: AggValue;
|
|
103
|
+
/**
|
|
104
|
+
* Optional type inference function for polymorphic aggregate functions.
|
|
105
|
+
* If provided, this function will be called at planning time to determine
|
|
106
|
+
* the return type based on the actual argument types.
|
|
107
|
+
*/
|
|
108
|
+
inferReturnType?: (argTypes: ReadonlyArray<DeepReadonly<LogicalType>>) => ScalarType;
|
|
109
|
+
/**
|
|
110
|
+
* Optional argument type validation function.
|
|
111
|
+
* If provided, this function will be called at planning time to validate
|
|
112
|
+
* that the argument types are acceptable for this function.
|
|
113
|
+
*/
|
|
114
|
+
validateArgTypes?: (argTypes: ReadonlyArray<DeepReadonly<LogicalType>>) => boolean;
|
|
87
115
|
}
|
|
88
116
|
/**
|
|
89
117
|
* Schema for window functions (for future use).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/schema/function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/schema/function.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../src/schema/function.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../src/schema/function.ts"],"names":[],"mappings":"AAoJA;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAsB;IAC5D,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,QAAQ,IAAI,gBAAgB,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,cAAc,KAAK,UAAU,CAAC;AAC9H,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAsB;IACjE,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,UAAU,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAsB;IAC/D,OAAO,cAAc,IAAI,MAAM,IAAI,kBAAkB,IAAI,MAAM,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAsB;IAC5D,OAAO,gBAAgB,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;AACxJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,OAAe;IAC3D,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,OAAO,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -2,7 +2,7 @@ import type { ColumnSchema } from './column.js';
|
|
|
2
2
|
import type { AnyVirtualTableModule } from '../vtab/module.js';
|
|
3
3
|
import type { Expression } from '../parser/ast.js';
|
|
4
4
|
import { type ColumnDef, type TableConstraint } from '../parser/ast.js';
|
|
5
|
-
import { RowOp,
|
|
5
|
+
import { RowOp, type SqlValue } from '../common/types.js';
|
|
6
6
|
import type * as AST from '../parser/ast.js';
|
|
7
7
|
/**
|
|
8
8
|
* Represents the schema definition of a table (real or virtual).
|
|
@@ -75,8 +75,8 @@ export declare function columnDefToSchema(def: ColumnDef, defaultNotNull?: boole
|
|
|
75
75
|
export interface MutationContextDefinition {
|
|
76
76
|
/** Variable name */
|
|
77
77
|
name: string;
|
|
78
|
-
/**
|
|
79
|
-
|
|
78
|
+
/** Logical type of the variable */
|
|
79
|
+
logicalType: import('../types/logical-type.js').LogicalType;
|
|
80
80
|
/** Whether the variable is NOT NULL */
|
|
81
81
|
notNull: boolean;
|
|
82
82
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/schema/table.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/schema/table.ts"],"names":[],"mappings":"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"}
|
package/dist/src/schema/table.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { MemoryTableModule } from '../vtab/memory/module.js';
|
|
2
|
-
import {
|
|
3
|
-
import { SqlDataType, StatusCode } from '../common/types.js';
|
|
2
|
+
import { StatusCode } from '../common/types.js';
|
|
4
3
|
import { quereusError, QuereusError } from '../common/errors.js';
|
|
5
4
|
import { createLogger } from '../common/logger.js';
|
|
6
5
|
import { inferType } from '../types/registry.js';
|
|
@@ -41,7 +40,6 @@ export function columnDefToSchema(def, defaultNotNull = true) {
|
|
|
41
40
|
const schema = {
|
|
42
41
|
name: def.name,
|
|
43
42
|
logicalType: logicalType,
|
|
44
|
-
affinity: getAffinity(def.dataType), // Keep for backward compatibility during transition
|
|
45
43
|
notNull: defaultNotNull, // Default based on Third Manifesto principles
|
|
46
44
|
primaryKey: false,
|
|
47
45
|
pkOrder: 0,
|
|
@@ -103,7 +101,7 @@ export function columnDefToSchema(def, defaultNotNull = true) {
|
|
|
103
101
|
export function mutationContextVarToSchema(varDef, defaultNotNull = true) {
|
|
104
102
|
return {
|
|
105
103
|
name: varDef.name,
|
|
106
|
-
|
|
104
|
+
logicalType: inferType(varDef.dataType),
|
|
107
105
|
notNull: varDef.notNull !== undefined ? varDef.notNull : defaultNotNull,
|
|
108
106
|
};
|
|
109
107
|
}
|
|
@@ -261,8 +259,8 @@ function findColumnPKDefinition(columns) {
|
|
|
261
259
|
}
|
|
262
260
|
return Object.freeze(pkCols.map(col => ({
|
|
263
261
|
index: col.originalIndex,
|
|
264
|
-
desc: col.
|
|
265
|
-
autoIncrement: col.
|
|
262
|
+
desc: col.logicalType.name === 'INTEGER' && col.pkDirection === 'desc',
|
|
263
|
+
autoIncrement: col.logicalType.name === 'INTEGER',
|
|
266
264
|
collation: col.collation || 'BINARY'
|
|
267
265
|
})));
|
|
268
266
|
}
|