@quereus/quereus 0.4.11 → 0.5.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 (128) hide show
  1. package/README.md +40 -16
  2. package/dist/src/core/database.d.ts +18 -0
  3. package/dist/src/core/database.d.ts.map +1 -1
  4. package/dist/src/core/database.js +22 -0
  5. package/dist/src/core/database.js.map +1 -1
  6. package/dist/src/func/builtins/conversion.d.ts +51 -0
  7. package/dist/src/func/builtins/conversion.d.ts.map +1 -0
  8. package/dist/src/func/builtins/conversion.js +152 -0
  9. package/dist/src/func/builtins/conversion.js.map +1 -0
  10. package/dist/src/func/builtins/index.d.ts.map +1 -1
  11. package/dist/src/func/builtins/index.js +20 -1
  12. package/dist/src/func/builtins/index.js.map +1 -1
  13. package/dist/src/func/builtins/json.d.ts +1 -0
  14. package/dist/src/func/builtins/json.d.ts.map +1 -1
  15. package/dist/src/func/builtins/json.js +100 -0
  16. package/dist/src/func/builtins/json.js.map +1 -1
  17. package/dist/src/func/builtins/schema.js +1 -1
  18. package/dist/src/func/builtins/schema.js.map +1 -1
  19. package/dist/src/index.d.ts +8 -1
  20. package/dist/src/index.d.ts.map +1 -1
  21. package/dist/src/index.js +6 -0
  22. package/dist/src/index.js.map +1 -1
  23. package/dist/src/runtime/emit/binary.d.ts.map +1 -1
  24. package/dist/src/runtime/emit/binary.js +6 -2
  25. package/dist/src/runtime/emit/binary.js.map +1 -1
  26. package/dist/src/runtime/emit/constraint-check.d.ts.map +1 -1
  27. package/dist/src/runtime/emit/constraint-check.js +8 -1
  28. package/dist/src/runtime/emit/constraint-check.js.map +1 -1
  29. package/dist/src/runtime/emit/insert.d.ts.map +1 -1
  30. package/dist/src/runtime/emit/insert.js +4 -24
  31. package/dist/src/runtime/emit/insert.js.map +1 -1
  32. package/dist/src/runtime/emit/scalar-function.d.ts +9 -0
  33. package/dist/src/runtime/emit/scalar-function.d.ts.map +1 -1
  34. package/dist/src/runtime/emit/scalar-function.js +23 -1
  35. package/dist/src/runtime/emit/scalar-function.js.map +1 -1
  36. package/dist/src/runtime/emit/unary.d.ts.map +1 -1
  37. package/dist/src/runtime/emit/unary.js +3 -1
  38. package/dist/src/runtime/emit/unary.js.map +1 -1
  39. package/dist/src/schema/column.d.ts +4 -1
  40. package/dist/src/schema/column.d.ts.map +1 -1
  41. package/dist/src/schema/column.js +3 -0
  42. package/dist/src/schema/column.js.map +1 -1
  43. package/dist/src/schema/function.d.ts +15 -0
  44. package/dist/src/schema/function.d.ts.map +1 -1
  45. package/dist/src/schema/function.js.map +1 -1
  46. package/dist/src/schema/table.d.ts.map +1 -1
  47. package/dist/src/schema/table.js +10 -1
  48. package/dist/src/schema/table.js.map +1 -1
  49. package/dist/src/types/builtin-types.d.ts +37 -0
  50. package/dist/src/types/builtin-types.d.ts.map +1 -0
  51. package/dist/src/types/builtin-types.js +359 -0
  52. package/dist/src/types/builtin-types.js.map +1 -0
  53. package/dist/src/types/index.d.ts +7 -0
  54. package/dist/src/types/index.d.ts.map +1 -0
  55. package/dist/src/types/index.js +13 -0
  56. package/dist/src/types/index.js.map +1 -0
  57. package/dist/src/types/json-type.d.ts +8 -0
  58. package/dist/src/types/json-type.d.ts.map +1 -0
  59. package/dist/src/types/json-type.js +143 -0
  60. package/dist/src/types/json-type.js.map +1 -0
  61. package/dist/src/types/logical-type.d.ts +52 -0
  62. package/dist/src/types/logical-type.d.ts.map +1 -0
  63. package/dist/src/types/logical-type.js +34 -0
  64. package/dist/src/types/logical-type.js.map +1 -0
  65. package/dist/src/types/plugin-interface.d.ts +9 -0
  66. package/dist/src/types/plugin-interface.d.ts.map +1 -0
  67. package/dist/src/types/plugin-interface.js +2 -0
  68. package/dist/src/types/plugin-interface.js.map +1 -0
  69. package/dist/src/types/registry.d.ts +72 -0
  70. package/dist/src/types/registry.d.ts.map +1 -0
  71. package/dist/src/types/registry.js +168 -0
  72. package/dist/src/types/registry.js.map +1 -0
  73. package/dist/src/types/temporal-types.d.ts +17 -0
  74. package/dist/src/types/temporal-types.d.ts.map +1 -0
  75. package/dist/src/types/temporal-types.js +178 -0
  76. package/dist/src/types/temporal-types.js.map +1 -0
  77. package/dist/src/types/validation.d.ts +52 -0
  78. package/dist/src/types/validation.d.ts.map +1 -0
  79. package/dist/src/types/validation.js +96 -0
  80. package/dist/src/types/validation.js.map +1 -0
  81. package/dist/src/util/comparison.d.ts +24 -5
  82. package/dist/src/util/comparison.d.ts.map +1 -1
  83. package/dist/src/util/comparison.js +71 -9
  84. package/dist/src/util/comparison.js.map +1 -1
  85. package/dist/src/util/plugin-loader.d.ts.map +1 -1
  86. package/dist/src/util/plugin-loader.js +17 -0
  87. package/dist/src/util/plugin-loader.js.map +1 -1
  88. package/dist/src/vtab/manifest.d.ts +4 -0
  89. package/dist/src/vtab/manifest.d.ts.map +1 -1
  90. package/dist/src/vtab/memory/index.d.ts +1 -0
  91. package/dist/src/vtab/memory/index.d.ts.map +1 -1
  92. package/dist/src/vtab/memory/index.js +15 -4
  93. package/dist/src/vtab/memory/index.js.map +1 -1
  94. package/dist/src/vtab/memory/layer/manager.d.ts.map +1 -1
  95. package/dist/src/vtab/memory/layer/manager.js +20 -2
  96. package/dist/src/vtab/memory/layer/manager.js.map +1 -1
  97. package/dist/src/vtab/memory/utils/primary-key.d.ts.map +1 -1
  98. package/dist/src/vtab/memory/utils/primary-key.js +17 -12
  99. package/dist/src/vtab/memory/utils/primary-key.js.map +1 -1
  100. package/package.json +5 -4
  101. package/src/core/database.ts +24 -0
  102. package/src/func/builtins/conversion.ts +201 -0
  103. package/src/func/builtins/index.ts +20 -1
  104. package/src/func/builtins/json.ts +121 -0
  105. package/src/func/builtins/schema.ts +1 -1
  106. package/src/index.ts +35 -0
  107. package/src/runtime/emit/binary.ts +8 -2
  108. package/src/runtime/emit/constraint-check.ts +9 -1
  109. package/src/runtime/emit/insert.ts +4 -16
  110. package/src/runtime/emit/scalar-function.ts +27 -1
  111. package/src/runtime/emit/unary.ts +4 -1
  112. package/src/schema/column.ts +8 -1
  113. package/src/schema/function.ts +18 -0
  114. package/src/schema/table.ts +411 -398
  115. package/src/types/builtin-types.ts +350 -0
  116. package/src/types/index.ts +17 -0
  117. package/src/types/json-type.ts +152 -0
  118. package/src/types/logical-type.ts +75 -0
  119. package/src/types/plugin-interface.ts +10 -0
  120. package/src/types/registry.ts +200 -0
  121. package/src/types/temporal-types.ts +167 -0
  122. package/src/types/validation.ts +120 -0
  123. package/src/util/comparison.ts +87 -14
  124. package/src/util/plugin-loader.ts +19 -0
  125. package/src/vtab/manifest.ts +7 -1
  126. package/src/vtab/memory/index.ts +191 -178
  127. package/src/vtab/memory/layer/manager.ts +28 -2
  128. package/src/vtab/memory/utils/primary-key.ts +19 -14
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logical-type.js","sourceRoot":"","sources":["../../../src/types/logical-type.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,CAAN,IAAY,YAOX;AAPD,WAAY,YAAY;IACvB,+CAAQ,CAAA;IACR,qDAAW,CAAA;IACX,+CAAQ,CAAA;IACR,+CAAQ,CAAA;IACR,+CAAQ,CAAA;IACR,qDAAW,CAAA;AACZ,CAAC,EAPW,YAAY,KAAZ,YAAY,QAOvB;AAwCD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAe;IAC9C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC;IAC3E,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,OAAO,CAAC;IAC3D,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC;IACxD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC,OAAO,CAAC;IAC5D,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC;IAC1D,OAAO,YAAY,CAAC,IAAI,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { LogicalType } from './logical-type.js';
2
+ /**
3
+ * Type plugin registration info
4
+ */
5
+ export interface TypePluginInfo {
6
+ name: string;
7
+ definition: LogicalType;
8
+ }
9
+ //# sourceMappingURL=plugin-interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-interface.d.ts","sourceRoot":"","sources":["../../../src/types/plugin-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,WAAW,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=plugin-interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-interface.js","sourceRoot":"","sources":["../../../src/types/plugin-interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ import type { LogicalType } from './logical-type.js';
2
+ /**
3
+ * Global type registry that maps type names to logical type definitions.
4
+ */
5
+ declare class TypeRegistry {
6
+ private types;
7
+ constructor();
8
+ /**
9
+ * Register a new logical type.
10
+ * @param type The logical type to register
11
+ */
12
+ registerType(type: LogicalType): void;
13
+ /**
14
+ * Get a logical type by name.
15
+ * @param name The type name (case-insensitive)
16
+ * @returns The logical type, or undefined if not found
17
+ */
18
+ getType(name: string): LogicalType | undefined;
19
+ /**
20
+ * Get a logical type by name, with fallback to BLOB if not found.
21
+ * This matches SQLite's behavior where unknown types default to BLOB affinity.
22
+ * @param name The type name (case-insensitive)
23
+ * @returns The logical type (defaults to BLOB if not found)
24
+ */
25
+ getTypeOrDefault(name: string | undefined): LogicalType;
26
+ /**
27
+ * Check if a type is registered.
28
+ * @param name The type name (case-insensitive)
29
+ * @returns True if the type is registered
30
+ */
31
+ hasType(name: string): boolean;
32
+ /**
33
+ * Get all registered type names.
34
+ * @returns Array of type names
35
+ */
36
+ getTypeNames(): string[];
37
+ /**
38
+ * Infer logical type from a type name string.
39
+ * This handles SQLite-style type affinity rules where type names can contain
40
+ * keywords like "INT", "CHAR", "REAL", etc.
41
+ *
42
+ * @param typeName The declared type name (e.g., "VARCHAR(100)", "UNSIGNED INT")
43
+ * @returns The inferred logical type
44
+ */
45
+ inferType(typeName: string | undefined): LogicalType;
46
+ }
47
+ export declare const typeRegistry: TypeRegistry;
48
+ /**
49
+ * Register a custom logical type.
50
+ * @param type The logical type to register
51
+ */
52
+ export declare function registerType(type: LogicalType): void;
53
+ /**
54
+ * Get a logical type by name.
55
+ * @param name The type name (case-insensitive)
56
+ * @returns The logical type, or undefined if not found
57
+ */
58
+ export declare function getType(name: string): LogicalType | undefined;
59
+ /**
60
+ * Get a logical type by name, with fallback to BLOB if not found.
61
+ * @param name The type name (case-insensitive)
62
+ * @returns The logical type (defaults to BLOB if not found)
63
+ */
64
+ export declare function getTypeOrDefault(name: string | undefined): LogicalType;
65
+ /**
66
+ * Infer logical type from a type name string.
67
+ * @param typeName The declared type name
68
+ * @returns The inferred logical type
69
+ */
70
+ export declare function inferType(typeName: string | undefined): LogicalType;
71
+ export {};
72
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/types/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAmBrD;;GAEG;AACH,cAAM,YAAY;IACjB,OAAO,CAAC,KAAK,CAAkC;;IAyC/C;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IASrC;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI9C;;;;;OAKG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW;IAKvD;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI9B;;;OAGG;IACH,YAAY,IAAI,MAAM,EAAE;IAIxB;;;;;;;OAOG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW;CAsCpD;AAGD,eAAO,MAAM,YAAY,cAAqB,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE7D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAEtE;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAEnE"}
@@ -0,0 +1,168 @@
1
+ import { NULL_TYPE, INTEGER_TYPE, REAL_TYPE, TEXT_TYPE, BLOB_TYPE, BOOLEAN_TYPE, NUMERIC_TYPE, ANY_TYPE, } from './builtin-types.js';
2
+ import { DATE_TYPE, TIME_TYPE, DATETIME_TYPE } from './temporal-types.js';
3
+ import { JSON_TYPE } from './json-type.js';
4
+ import { createLogger } from '../common/logger.js';
5
+ const log = createLogger('types:registry');
6
+ const warnLog = log.extend('warn');
7
+ const debugLog = log.extend('debug');
8
+ /**
9
+ * Global type registry that maps type names to logical type definitions.
10
+ */
11
+ class TypeRegistry {
12
+ types = new Map();
13
+ constructor() {
14
+ // Register built-in types
15
+ this.registerType(NULL_TYPE);
16
+ this.registerType(INTEGER_TYPE);
17
+ this.registerType(REAL_TYPE);
18
+ this.registerType(TEXT_TYPE);
19
+ this.registerType(BLOB_TYPE);
20
+ this.registerType(BOOLEAN_TYPE);
21
+ this.registerType(NUMERIC_TYPE);
22
+ this.registerType(ANY_TYPE);
23
+ this.registerType(DATE_TYPE);
24
+ this.registerType(TIME_TYPE);
25
+ this.registerType(DATETIME_TYPE);
26
+ this.registerType(JSON_TYPE);
27
+ // Register common aliases
28
+ this.types.set('INT', INTEGER_TYPE);
29
+ this.types.set('BIGINT', INTEGER_TYPE);
30
+ this.types.set('SMALLINT', INTEGER_TYPE);
31
+ this.types.set('TINYINT', INTEGER_TYPE);
32
+ this.types.set('MEDIUMINT', INTEGER_TYPE);
33
+ this.types.set('FLOAT', REAL_TYPE);
34
+ this.types.set('DOUBLE', REAL_TYPE);
35
+ this.types.set('DECIMAL', NUMERIC_TYPE);
36
+ this.types.set('VARCHAR', TEXT_TYPE);
37
+ this.types.set('CHAR', TEXT_TYPE);
38
+ this.types.set('CHARACTER', TEXT_TYPE);
39
+ this.types.set('CLOB', TEXT_TYPE);
40
+ this.types.set('STRING', TEXT_TYPE);
41
+ this.types.set('BOOL', BOOLEAN_TYPE);
42
+ this.types.set('BYTES', BLOB_TYPE);
43
+ this.types.set('BINARY', BLOB_TYPE);
44
+ this.types.set('VARBINARY', BLOB_TYPE);
45
+ }
46
+ /**
47
+ * Register a new logical type.
48
+ * @param type The logical type to register
49
+ */
50
+ registerType(type) {
51
+ const upperName = type.name.toUpperCase();
52
+ if (this.types.has(upperName)) {
53
+ warnLog(`Overwriting existing type: ${upperName}`);
54
+ }
55
+ this.types.set(upperName, type);
56
+ debugLog(`Registered type: ${upperName}`);
57
+ }
58
+ /**
59
+ * Get a logical type by name.
60
+ * @param name The type name (case-insensitive)
61
+ * @returns The logical type, or undefined if not found
62
+ */
63
+ getType(name) {
64
+ return this.types.get(name.toUpperCase());
65
+ }
66
+ /**
67
+ * Get a logical type by name, with fallback to BLOB if not found.
68
+ * This matches SQLite's behavior where unknown types default to BLOB affinity.
69
+ * @param name The type name (case-insensitive)
70
+ * @returns The logical type (defaults to BLOB if not found)
71
+ */
72
+ getTypeOrDefault(name) {
73
+ if (!name)
74
+ return BLOB_TYPE;
75
+ return this.getType(name) ?? BLOB_TYPE;
76
+ }
77
+ /**
78
+ * Check if a type is registered.
79
+ * @param name The type name (case-insensitive)
80
+ * @returns True if the type is registered
81
+ */
82
+ hasType(name) {
83
+ return this.types.has(name.toUpperCase());
84
+ }
85
+ /**
86
+ * Get all registered type names.
87
+ * @returns Array of type names
88
+ */
89
+ getTypeNames() {
90
+ return Array.from(this.types.keys());
91
+ }
92
+ /**
93
+ * Infer logical type from a type name string.
94
+ * This handles SQLite-style type affinity rules where type names can contain
95
+ * keywords like "INT", "CHAR", "REAL", etc.
96
+ *
97
+ * @param typeName The declared type name (e.g., "VARCHAR(100)", "UNSIGNED INT")
98
+ * @returns The inferred logical type
99
+ */
100
+ inferType(typeName) {
101
+ if (!typeName)
102
+ return BLOB_TYPE;
103
+ const upperName = typeName.toUpperCase();
104
+ // First try exact match
105
+ const exactMatch = this.types.get(upperName);
106
+ if (exactMatch)
107
+ return exactMatch;
108
+ // SQLite-style affinity rules
109
+ // INTEGER affinity: INT
110
+ if (upperName.includes('INT'))
111
+ return INTEGER_TYPE;
112
+ // TEXT affinity: CHAR, CLOB, TEXT
113
+ if (upperName.includes('CHAR') || upperName.includes('CLOB') || upperName.includes('TEXT')) {
114
+ return TEXT_TYPE;
115
+ }
116
+ // BLOB affinity: BLOB
117
+ if (upperName.includes('BLOB'))
118
+ return BLOB_TYPE;
119
+ // REAL affinity: REAL, FLOA, DOUB
120
+ if (upperName.includes('REAL') || upperName.includes('FLOA') || upperName.includes('DOUB')) {
121
+ return REAL_TYPE;
122
+ }
123
+ // BOOLEAN affinity: BOOL
124
+ if (upperName.includes('BOOL'))
125
+ return BOOLEAN_TYPE;
126
+ // NUMERIC affinity: everything else with NUMERIC, DECIMAL
127
+ if (upperName.includes('NUMERIC') || upperName.includes('DECIMAL')) {
128
+ return NUMERIC_TYPE;
129
+ }
130
+ // Default to BLOB (SQLite behavior)
131
+ debugLog(`Unknown type '${typeName}', defaulting to BLOB`);
132
+ return BLOB_TYPE;
133
+ }
134
+ }
135
+ // Global singleton instance
136
+ export const typeRegistry = new TypeRegistry();
137
+ /**
138
+ * Register a custom logical type.
139
+ * @param type The logical type to register
140
+ */
141
+ export function registerType(type) {
142
+ typeRegistry.registerType(type);
143
+ }
144
+ /**
145
+ * Get a logical type by name.
146
+ * @param name The type name (case-insensitive)
147
+ * @returns The logical type, or undefined if not found
148
+ */
149
+ export function getType(name) {
150
+ return typeRegistry.getType(name);
151
+ }
152
+ /**
153
+ * Get a logical type by name, with fallback to BLOB if not found.
154
+ * @param name The type name (case-insensitive)
155
+ * @returns The logical type (defaults to BLOB if not found)
156
+ */
157
+ export function getTypeOrDefault(name) {
158
+ return typeRegistry.getTypeOrDefault(name);
159
+ }
160
+ /**
161
+ * Infer logical type from a type name string.
162
+ * @param typeName The declared type name
163
+ * @returns The inferred logical type
164
+ */
165
+ export function inferType(typeName) {
166
+ return typeRegistry.inferType(typeName);
167
+ }
168
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/types/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type LogicalType } from './logical-type.js';
2
+ /**
3
+ * DATE type - stores ISO 8601 date strings (YYYY-MM-DD)
4
+ * Uses Temporal.PlainDate for validation and parsing
5
+ */
6
+ export declare const DATE_TYPE: LogicalType;
7
+ /**
8
+ * TIME type - stores ISO 8601 time strings (HH:MM:SS or HH:MM:SS.sss)
9
+ * Uses Temporal.PlainTime for validation and parsing
10
+ */
11
+ export declare const TIME_TYPE: LogicalType;
12
+ /**
13
+ * DATETIME type - stores ISO 8601 datetime strings (YYYY-MM-DDTHH:MM:SS or with timezone)
14
+ * Uses Temporal.PlainDateTime for validation and parsing
15
+ */
16
+ export declare const DATETIME_TYPE: LogicalType;
17
+ //# sourceMappingURL=temporal-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-types.d.ts","sourceRoot":"","sources":["../../../src/types/temporal-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGnE;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,WA2CvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,WA8CvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,WAyD3B,CAAC"}
@@ -0,0 +1,178 @@
1
+ import { PhysicalType } from './logical-type.js';
2
+ import { Temporal } from 'temporal-polyfill';
3
+ /**
4
+ * DATE type - stores ISO 8601 date strings (YYYY-MM-DD)
5
+ * Uses Temporal.PlainDate for validation and parsing
6
+ */
7
+ export const DATE_TYPE = {
8
+ name: 'DATE',
9
+ physicalType: PhysicalType.TEXT,
10
+ isTemporal: true,
11
+ validate: (v) => {
12
+ if (v === null)
13
+ return true;
14
+ if (typeof v !== 'string')
15
+ return false;
16
+ try {
17
+ Temporal.PlainDate.from(v);
18
+ return true;
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ },
24
+ parse: (v) => {
25
+ if (v === null)
26
+ return null;
27
+ if (typeof v === 'string') {
28
+ try {
29
+ const date = Temporal.PlainDate.from(v);
30
+ return date.toString(); // ISO 8601 format: YYYY-MM-DD
31
+ }
32
+ catch (e) {
33
+ throw new TypeError(`Cannot convert '${v}' to DATE: ${e instanceof Error ? e.message : String(e)}`);
34
+ }
35
+ }
36
+ if (typeof v === 'number') {
37
+ // Unix timestamp (milliseconds)
38
+ const instant = Temporal.Instant.fromEpochMilliseconds(v);
39
+ return instant.toZonedDateTimeISO('UTC').toPlainDate().toString();
40
+ }
41
+ throw new TypeError(`Cannot convert ${typeof v} to DATE`);
42
+ },
43
+ compare: (a, b) => {
44
+ if (a === null && b === null)
45
+ return 0;
46
+ if (a === null)
47
+ return -1;
48
+ if (b === null)
49
+ return 1;
50
+ // ISO 8601 dates can be compared lexicographically
51
+ return a.localeCompare(b);
52
+ },
53
+ supportedCollations: [],
54
+ };
55
+ /**
56
+ * TIME type - stores ISO 8601 time strings (HH:MM:SS or HH:MM:SS.sss)
57
+ * Uses Temporal.PlainTime for validation and parsing
58
+ */
59
+ export const TIME_TYPE = {
60
+ name: 'TIME',
61
+ physicalType: PhysicalType.TEXT,
62
+ isTemporal: true,
63
+ validate: (v) => {
64
+ if (v === null)
65
+ return true;
66
+ if (typeof v !== 'string')
67
+ return false;
68
+ try {
69
+ Temporal.PlainTime.from(v);
70
+ return true;
71
+ }
72
+ catch {
73
+ return false;
74
+ }
75
+ },
76
+ parse: (v) => {
77
+ if (v === null)
78
+ return null;
79
+ if (typeof v === 'string') {
80
+ try {
81
+ const time = Temporal.PlainTime.from(v);
82
+ return time.toString(); // ISO 8601 format: HH:MM:SS or HH:MM:SS.sss
83
+ }
84
+ catch (e) {
85
+ throw new TypeError(`Cannot convert '${v}' to TIME: ${e instanceof Error ? e.message : String(e)}`);
86
+ }
87
+ }
88
+ if (typeof v === 'number') {
89
+ // Seconds since midnight
90
+ const hours = Math.floor(v / 3600) % 24;
91
+ const minutes = Math.floor((v % 3600) / 60);
92
+ const seconds = v % 60;
93
+ const time = new Temporal.PlainTime(hours, minutes, seconds);
94
+ return time.toString();
95
+ }
96
+ throw new TypeError(`Cannot convert ${typeof v} to TIME`);
97
+ },
98
+ compare: (a, b) => {
99
+ if (a === null && b === null)
100
+ return 0;
101
+ if (a === null)
102
+ return -1;
103
+ if (b === null)
104
+ return 1;
105
+ // ISO 8601 times can be compared lexicographically
106
+ return a.localeCompare(b);
107
+ },
108
+ supportedCollations: [],
109
+ };
110
+ /**
111
+ * DATETIME type - stores ISO 8601 datetime strings (YYYY-MM-DDTHH:MM:SS or with timezone)
112
+ * Uses Temporal.PlainDateTime for validation and parsing
113
+ */
114
+ export const DATETIME_TYPE = {
115
+ name: 'DATETIME',
116
+ physicalType: PhysicalType.TEXT,
117
+ isTemporal: true,
118
+ validate: (v) => {
119
+ if (v === null)
120
+ return true;
121
+ if (typeof v !== 'string')
122
+ return false;
123
+ try {
124
+ // Try PlainDateTime first
125
+ Temporal.PlainDateTime.from(v);
126
+ return true;
127
+ }
128
+ catch {
129
+ try {
130
+ // Also accept ZonedDateTime
131
+ Temporal.ZonedDateTime.from(v);
132
+ return true;
133
+ }
134
+ catch {
135
+ return false;
136
+ }
137
+ }
138
+ },
139
+ parse: (v) => {
140
+ if (v === null)
141
+ return null;
142
+ if (typeof v === 'string') {
143
+ try {
144
+ // Try PlainDateTime first
145
+ const dt = Temporal.PlainDateTime.from(v);
146
+ return dt.toString(); // ISO 8601 format: YYYY-MM-DDTHH:MM:SS
147
+ }
148
+ catch {
149
+ try {
150
+ // Try ZonedDateTime
151
+ const zdt = Temporal.ZonedDateTime.from(v);
152
+ return zdt.toString(); // ISO 8601 with timezone
153
+ }
154
+ catch (e) {
155
+ throw new TypeError(`Cannot convert '${v}' to DATETIME: ${e instanceof Error ? e.message : String(e)}`);
156
+ }
157
+ }
158
+ }
159
+ if (typeof v === 'number') {
160
+ // Unix timestamp (milliseconds)
161
+ const instant = Temporal.Instant.fromEpochMilliseconds(v);
162
+ return instant.toZonedDateTimeISO('UTC').toString();
163
+ }
164
+ throw new TypeError(`Cannot convert ${typeof v} to DATETIME`);
165
+ },
166
+ compare: (a, b) => {
167
+ if (a === null && b === null)
168
+ return 0;
169
+ if (a === null)
170
+ return -1;
171
+ if (b === null)
172
+ return 1;
173
+ // ISO 8601 datetimes can be compared lexicographically
174
+ return a.localeCompare(b);
175
+ },
176
+ supportedCollations: [],
177
+ };
178
+ //# sourceMappingURL=temporal-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"temporal-types.js","sourceRoot":"","sources":["../../../src/types/temporal-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { SqlValue } from '../common/types.js';
2
+ import type { LogicalType } from './logical-type.js';
3
+ /**
4
+ * Validate a value against a logical type.
5
+ * Throws an error if the value is invalid.
6
+ *
7
+ * @param value The value to validate
8
+ * @param type The logical type to validate against
9
+ * @param columnName Optional column name for better error messages
10
+ * @returns The validated value
11
+ * @throws QuereusError if validation fails
12
+ */
13
+ export declare function validateValue(value: SqlValue, type: LogicalType, columnName?: string): SqlValue;
14
+ /**
15
+ * Parse/convert a value to match a logical type.
16
+ * This performs type conversion and normalization.
17
+ *
18
+ * @param value The value to parse
19
+ * @param type The logical type to convert to
20
+ * @param columnName Optional column name for better error messages
21
+ * @returns The parsed/converted value
22
+ * @throws QuereusError if conversion fails
23
+ */
24
+ export declare function parseValue(value: SqlValue, type: LogicalType, columnName?: string): SqlValue;
25
+ /**
26
+ * Validate and parse a value in one step.
27
+ * This is the main entry point for type checking at INSERT/UPDATE boundaries.
28
+ *
29
+ * @param value The value to validate and parse
30
+ * @param type The logical type
31
+ * @param columnName Optional column name for better error messages
32
+ * @returns The validated and parsed value
33
+ * @throws QuereusError if validation or parsing fails
34
+ */
35
+ export declare function validateAndParse(value: SqlValue, type: LogicalType, columnName?: string): SqlValue;
36
+ /**
37
+ * Check if a value is compatible with a logical type without throwing.
38
+ *
39
+ * @param value The value to check
40
+ * @param type The logical type
41
+ * @returns True if the value is valid for the type
42
+ */
43
+ export declare function isValidForType(value: SqlValue, type: LogicalType): boolean;
44
+ /**
45
+ * Try to parse a value, returning null if parsing fails.
46
+ *
47
+ * @param value The value to parse
48
+ * @param type The logical type
49
+ * @returns The parsed value, or null if parsing fails
50
+ */
51
+ export declare function tryParse(value: SqlValue, type: LogicalType): SqlValue | null;
52
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/types/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,WAAW,EACjB,UAAU,CAAC,EAAE,MAAM,GACjB,QAAQ,CAcV;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CACzB,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,WAAW,EACjB,UAAU,CAAC,EAAE,MAAM,GACjB,QAAQ,CAmBV;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,QAAQ,EACf,IAAI,EAAE,WAAW,EACjB,UAAU,CAAC,EAAE,MAAM,GACjB,QAAQ,CAMV;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAI1E;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,IAAI,CAM5E"}
@@ -0,0 +1,96 @@
1
+ import { StatusCode } from '../common/types.js';
2
+ import { QuereusError } from '../common/errors.js';
3
+ /**
4
+ * Validate a value against a logical type.
5
+ * Throws an error if the value is invalid.
6
+ *
7
+ * @param value The value to validate
8
+ * @param type The logical type to validate against
9
+ * @param columnName Optional column name for better error messages
10
+ * @returns The validated value
11
+ * @throws QuereusError if validation fails
12
+ */
13
+ export function validateValue(value, type, columnName) {
14
+ // NULL is always valid
15
+ if (value === null)
16
+ return null;
17
+ // Type-specific validation
18
+ if (type.validate && !type.validate(value)) {
19
+ const colInfo = columnName ? ` for column '${columnName}'` : '';
20
+ throw new QuereusError(`Type mismatch${colInfo}: expected ${type.name}, got ${typeof value}`, StatusCode.MISMATCH);
21
+ }
22
+ return value;
23
+ }
24
+ /**
25
+ * Parse/convert a value to match a logical type.
26
+ * This performs type conversion and normalization.
27
+ *
28
+ * @param value The value to parse
29
+ * @param type The logical type to convert to
30
+ * @param columnName Optional column name for better error messages
31
+ * @returns The parsed/converted value
32
+ * @throws QuereusError if conversion fails
33
+ */
34
+ export function parseValue(value, type, columnName) {
35
+ // NULL is always valid
36
+ if (value === null)
37
+ return null;
38
+ // Type-specific parsing
39
+ if (type.parse) {
40
+ try {
41
+ return type.parse(value);
42
+ }
43
+ catch (error) {
44
+ const colInfo = columnName ? ` for column '${columnName}'` : '';
45
+ const message = error instanceof Error ? error.message : String(error);
46
+ throw new QuereusError(`Type conversion failed${colInfo}: ${message}`, StatusCode.MISMATCH);
47
+ }
48
+ }
49
+ return value;
50
+ }
51
+ /**
52
+ * Validate and parse a value in one step.
53
+ * This is the main entry point for type checking at INSERT/UPDATE boundaries.
54
+ *
55
+ * @param value The value to validate and parse
56
+ * @param type The logical type
57
+ * @param columnName Optional column name for better error messages
58
+ * @returns The validated and parsed value
59
+ * @throws QuereusError if validation or parsing fails
60
+ */
61
+ export function validateAndParse(value, type, columnName) {
62
+ // Parse first (which may convert the value)
63
+ const parsed = parseValue(value, type, columnName);
64
+ // Then validate the parsed result
65
+ return validateValue(parsed, type, columnName);
66
+ }
67
+ /**
68
+ * Check if a value is compatible with a logical type without throwing.
69
+ *
70
+ * @param value The value to check
71
+ * @param type The logical type
72
+ * @returns True if the value is valid for the type
73
+ */
74
+ export function isValidForType(value, type) {
75
+ if (value === null)
76
+ return true;
77
+ if (!type.validate)
78
+ return true;
79
+ return type.validate(value);
80
+ }
81
+ /**
82
+ * Try to parse a value, returning null if parsing fails.
83
+ *
84
+ * @param value The value to parse
85
+ * @param type The logical type
86
+ * @returns The parsed value, or null if parsing fails
87
+ */
88
+ export function tryParse(value, type) {
89
+ try {
90
+ return parseValue(value, type);
91
+ }
92
+ catch {
93
+ return null;
94
+ }
95
+ }
96
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/types/validation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAC5B,KAAe,EACf,IAAiB,EACjB,UAAmB;IAEnB,uBAAuB;IACvB,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,2BAA2B;IAC3B,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,gBAAgB,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,YAAY,CACrB,gBAAgB,OAAO,cAAc,IAAI,CAAC,IAAI,SAAS,OAAO,KAAK,EAAE,EACrE,UAAU,CAAC,QAAQ,CACnB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CACzB,KAAe,EACf,IAAiB,EACjB,UAAmB;IAEnB,uBAAuB;IACvB,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,wBAAwB;IACxB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC;YACJ,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,gBAAgB,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,IAAI,YAAY,CACrB,yBAAyB,OAAO,KAAK,OAAO,EAAE,EAC9C,UAAU,CAAC,QAAQ,CACnB,CAAC;QACH,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC/B,KAAe,EACf,IAAiB,EACjB,UAAmB;IAEnB,4CAA4C;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;IAEnD,kCAAkC;IAClC,OAAO,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,KAAe,EAAE,IAAiB;IAChE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAe,EAAE,IAAiB;IAC1D,IAAI,CAAC;QACJ,OAAO,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC"}