@typed-sql/mysql 2.0.0 → 2.1.0

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 (89) hide show
  1. package/CHANGELOG.md +129 -0
  2. package/README.md +12 -0
  3. package/dist/packages/mysql/src/bulk.d.ts.map +1 -1
  4. package/dist/packages/mysql/src/bulk.js +9 -3
  5. package/dist/packages/mysql/src/bulk.js.map +1 -1
  6. package/dist/packages/mysql/src/capabilities.d.ts +30 -0
  7. package/dist/packages/mysql/src/capabilities.d.ts.map +1 -0
  8. package/dist/packages/mysql/src/capabilities.js +233 -0
  9. package/dist/packages/mysql/src/capabilities.js.map +1 -0
  10. package/dist/packages/mysql/src/catalog/generated/26.7.d.ts +4 -0
  11. package/dist/packages/mysql/src/catalog/generated/26.7.d.ts.map +1 -0
  12. package/dist/packages/mysql/src/catalog/generated/26.7.js +3 -0
  13. package/dist/packages/mysql/src/catalog/generated/26.7.js.map +1 -0
  14. package/dist/packages/mysql/src/catalog/generated/8.4.d.ts +4 -0
  15. package/dist/packages/mysql/src/catalog/generated/8.4.d.ts.map +1 -0
  16. package/dist/packages/mysql/src/catalog/generated/8.4.js +3 -0
  17. package/dist/packages/mysql/src/catalog/generated/8.4.js.map +1 -0
  18. package/dist/packages/mysql/src/catalog/generated/9.7.d.ts +4 -0
  19. package/dist/packages/mysql/src/catalog/generated/9.7.d.ts.map +1 -0
  20. package/dist/packages/mysql/src/catalog/generated/9.7.js +3 -0
  21. package/dist/packages/mysql/src/catalog/generated/9.7.js.map +1 -0
  22. package/dist/packages/mysql/src/catalog/index.d.ts +15 -0
  23. package/dist/packages/mysql/src/catalog/index.d.ts.map +1 -0
  24. package/dist/packages/mysql/src/catalog/index.js +129 -0
  25. package/dist/packages/mysql/src/catalog/index.js.map +1 -0
  26. package/dist/packages/mysql/src/catalog/types.d.ts +50 -0
  27. package/dist/packages/mysql/src/catalog/types.d.ts.map +1 -0
  28. package/dist/packages/mysql/src/catalog/types.js +2 -0
  29. package/dist/packages/mysql/src/catalog/types.js.map +1 -0
  30. package/dist/packages/mysql/src/index.d.ts +9 -1
  31. package/dist/packages/mysql/src/index.d.ts.map +1 -1
  32. package/dist/packages/mysql/src/index.js +37 -15
  33. package/dist/packages/mysql/src/index.js.map +1 -1
  34. package/dist/packages/mysql/src/mysql2.d.ts +9 -1
  35. package/dist/packages/mysql/src/mysql2.d.ts.map +1 -1
  36. package/dist/packages/mysql/src/mysql2.js +86 -3
  37. package/dist/packages/mysql/src/mysql2.js.map +1 -1
  38. package/dist/packages/mysql/src/parser/index.d.ts +8 -0
  39. package/dist/packages/mysql/src/parser/index.d.ts.map +1 -0
  40. package/dist/packages/mysql/src/parser/index.js +4 -0
  41. package/dist/packages/mysql/src/parser/index.js.map +1 -0
  42. package/dist/packages/mysql/src/parser/parser.d.ts +14 -0
  43. package/dist/packages/mysql/src/parser/parser.d.ts.map +1 -0
  44. package/dist/packages/mysql/src/parser/parser.js +1276 -0
  45. package/dist/packages/mysql/src/parser/parser.js.map +1 -0
  46. package/dist/packages/mysql/src/parser/tokenizer.d.ts +18 -0
  47. package/dist/packages/mysql/src/parser/tokenizer.d.ts.map +1 -0
  48. package/dist/packages/mysql/src/parser/tokenizer.js +385 -0
  49. package/dist/packages/mysql/src/parser/tokenizer.js.map +1 -0
  50. package/dist/packages/mysql/src/parser/types.d.ts +313 -0
  51. package/dist/packages/mysql/src/parser/types.d.ts.map +1 -0
  52. package/dist/packages/mysql/src/parser/types.js +9 -0
  53. package/dist/packages/mysql/src/parser/types.js.map +1 -0
  54. package/dist/packages/mysql/src/parser/walk.d.ts +13 -0
  55. package/dist/packages/mysql/src/parser/walk.d.ts.map +1 -0
  56. package/dist/packages/mysql/src/parser/walk.js +190 -0
  57. package/dist/packages/mysql/src/parser/walk.js.map +1 -0
  58. package/dist/packages/mysql/src/prepared.d.ts +6 -3
  59. package/dist/packages/mysql/src/prepared.d.ts.map +1 -1
  60. package/dist/packages/mysql/src/prepared.js +15 -14
  61. package/dist/packages/mysql/src/prepared.js.map +1 -1
  62. package/dist/packages/mysql/src/provider.d.ts +21 -5
  63. package/dist/packages/mysql/src/provider.d.ts.map +1 -1
  64. package/dist/packages/mysql/src/provider.js +647 -44
  65. package/dist/packages/mysql/src/provider.js.map +1 -1
  66. package/dist/packages/mysql/src/resolver.d.ts +5 -1
  67. package/dist/packages/mysql/src/resolver.d.ts.map +1 -1
  68. package/dist/packages/mysql/src/resolver.js +1207 -95
  69. package/dist/packages/mysql/src/resolver.js.map +1 -1
  70. package/dist/packages/mysql/src/routing.d.ts.map +1 -1
  71. package/dist/packages/mysql/src/routing.js +3 -2
  72. package/dist/packages/mysql/src/routing.js.map +1 -1
  73. package/dist/packages/mysql/src/runtime.d.ts +33 -0
  74. package/dist/packages/mysql/src/runtime.d.ts.map +1 -1
  75. package/dist/packages/mysql/src/runtime.js +166 -12
  76. package/dist/packages/mysql/src/runtime.js.map +1 -1
  77. package/dist/packages/mysql/src/semantics.d.ts +1 -1
  78. package/dist/packages/mysql/src/semantics.d.ts.map +1 -1
  79. package/dist/packages/mysql/src/semantics.js +27 -3
  80. package/dist/packages/mysql/src/semantics.js.map +1 -1
  81. package/dist/packages/mysql/src/support.d.ts +43 -0
  82. package/dist/packages/mysql/src/support.d.ts.map +1 -0
  83. package/dist/packages/mysql/src/support.js +102 -0
  84. package/dist/packages/mysql/src/support.js.map +1 -0
  85. package/dist/packages/mysql/src/type-policy.d.ts +2 -0
  86. package/dist/packages/mysql/src/type-policy.d.ts.map +1 -1
  87. package/dist/packages/mysql/src/type-policy.js +24 -50
  88. package/dist/packages/mysql/src/type-policy.js.map +1 -1
  89. package/package.json +8 -5
@@ -0,0 +1,313 @@
1
+ export interface SourceRange {
2
+ readonly start: number;
3
+ readonly end: number;
4
+ readonly line: number;
5
+ readonly column: number;
6
+ }
7
+ export type TokenKind = "identifier" | "quoted-identifier" | "keyword" | "number" | "string" | "parameter" | "operator" | "punctuation" | "eof";
8
+ export interface Token {
9
+ readonly kind: TokenKind;
10
+ readonly text: string;
11
+ readonly value: string;
12
+ readonly range: SourceRange;
13
+ }
14
+ export interface Identifier {
15
+ readonly name: string;
16
+ readonly quoted: boolean;
17
+ readonly range: SourceRange;
18
+ }
19
+ export interface TypeName {
20
+ readonly name: string;
21
+ readonly range: SourceRange;
22
+ }
23
+ export interface ColumnExpression {
24
+ readonly kind: "column";
25
+ readonly relation?: Identifier;
26
+ readonly column: Identifier;
27
+ readonly range: SourceRange;
28
+ }
29
+ export interface StarExpression {
30
+ readonly kind: "star";
31
+ readonly relation?: Identifier;
32
+ readonly range: SourceRange;
33
+ }
34
+ export interface LiteralExpression {
35
+ readonly kind: "literal";
36
+ readonly value: string | number | boolean | null;
37
+ readonly characterSet?: Identifier;
38
+ readonly range: SourceRange;
39
+ }
40
+ export interface CollateExpression {
41
+ readonly kind: "collate";
42
+ readonly expression: Expression;
43
+ readonly collation: Identifier;
44
+ readonly range: SourceRange;
45
+ }
46
+ export interface ParameterExpression {
47
+ readonly kind: "parameter";
48
+ readonly index: number;
49
+ readonly range: SourceRange;
50
+ }
51
+ export interface ArrayExpression {
52
+ readonly kind: "array";
53
+ readonly elements: readonly Expression[];
54
+ readonly range: SourceRange;
55
+ }
56
+ export interface RowExpression {
57
+ readonly kind: "row";
58
+ readonly elements: readonly Expression[];
59
+ readonly range: SourceRange;
60
+ }
61
+ export interface CallExpression {
62
+ readonly kind: "call";
63
+ readonly name: Identifier;
64
+ readonly schema?: Identifier;
65
+ readonly arguments: readonly Expression[];
66
+ readonly distinct: boolean;
67
+ readonly filter?: Expression;
68
+ readonly over?: Identifier | WindowSpecification;
69
+ readonly range: SourceRange;
70
+ }
71
+ export interface CastExpression {
72
+ readonly kind: "cast";
73
+ readonly expression: Expression;
74
+ readonly databaseType: TypeName;
75
+ readonly syntax: "cast";
76
+ readonly range: SourceRange;
77
+ }
78
+ export interface BinaryExpression {
79
+ readonly kind: "binary";
80
+ readonly left: Expression;
81
+ readonly operator: string;
82
+ readonly right: Expression;
83
+ readonly range: SourceRange;
84
+ }
85
+ export interface UnaryExpression {
86
+ readonly kind: "unary";
87
+ readonly operator: string;
88
+ readonly expression: Expression;
89
+ readonly range: SourceRange;
90
+ }
91
+ export interface CaseBranch {
92
+ readonly when: Expression;
93
+ readonly then: Expression;
94
+ readonly range: SourceRange;
95
+ }
96
+ export interface CaseExpression {
97
+ readonly kind: "case";
98
+ readonly operand?: Expression;
99
+ readonly branches: readonly CaseBranch[];
100
+ readonly elseExpression?: Expression;
101
+ readonly range: SourceRange;
102
+ }
103
+ export interface SubqueryExpression {
104
+ readonly kind: "subquery";
105
+ readonly query: SelectStatement;
106
+ readonly range: SourceRange;
107
+ }
108
+ export interface ExistsExpression {
109
+ readonly kind: "exists";
110
+ readonly query: SelectStatement;
111
+ readonly range: SourceRange;
112
+ }
113
+ export interface InExpression {
114
+ readonly kind: "in";
115
+ readonly expression: Expression;
116
+ readonly values: readonly Expression[] | SelectStatement;
117
+ readonly negated: boolean;
118
+ readonly range: SourceRange;
119
+ }
120
+ export interface BetweenExpression {
121
+ readonly kind: "between";
122
+ readonly expression: Expression;
123
+ readonly lower: Expression;
124
+ readonly upper: Expression;
125
+ readonly negated: boolean;
126
+ readonly range: SourceRange;
127
+ }
128
+ export type Expression = ColumnExpression | StarExpression | LiteralExpression | CollateExpression | ParameterExpression | ArrayExpression | RowExpression | CallExpression | CastExpression | BinaryExpression | UnaryExpression | CaseExpression | SubqueryExpression | ExistsExpression | InExpression | BetweenExpression;
129
+ export interface SelectItem {
130
+ readonly expression: Expression;
131
+ readonly alias?: Identifier;
132
+ readonly range: SourceRange;
133
+ }
134
+ export interface NamedTableReference {
135
+ readonly kind: "table";
136
+ readonly name: Identifier;
137
+ readonly schema?: Identifier;
138
+ readonly partitions?: readonly Identifier[];
139
+ readonly alias?: Identifier;
140
+ readonly lateral: boolean;
141
+ readonly range: SourceRange;
142
+ }
143
+ export interface SubqueryTableReference {
144
+ readonly kind: "subquery";
145
+ readonly query: SelectStatement;
146
+ readonly alias: Identifier;
147
+ readonly lateral: boolean;
148
+ readonly name?: never;
149
+ readonly schema?: never;
150
+ readonly range: SourceRange;
151
+ }
152
+ export type TableReference = NamedTableReference | SubqueryTableReference;
153
+ export type JoinKind = "inner" | "left" | "right" | "full" | "cross";
154
+ export interface JoinClause {
155
+ readonly kind: JoinKind;
156
+ readonly table: TableReference;
157
+ readonly on?: Expression;
158
+ readonly using?: readonly Identifier[];
159
+ readonly range: SourceRange;
160
+ }
161
+ export interface OrderByItem {
162
+ readonly expression: Expression;
163
+ readonly direction?: "asc" | "desc";
164
+ readonly nulls?: "first" | "last";
165
+ readonly range: SourceRange;
166
+ }
167
+ export interface WindowSpecification {
168
+ readonly base?: Identifier;
169
+ readonly partitionBy: readonly Expression[];
170
+ readonly orderBy: readonly OrderByItem[];
171
+ readonly frame?: WindowFrame;
172
+ readonly range: SourceRange;
173
+ }
174
+ export type WindowFrameBoundary = {
175
+ readonly kind: "unbounded-preceding" | "current-row" | "unbounded-following";
176
+ readonly range: SourceRange;
177
+ } | {
178
+ readonly kind: "preceding" | "following";
179
+ readonly expression: Expression;
180
+ readonly range: SourceRange;
181
+ };
182
+ export interface WindowFrame {
183
+ readonly unit: "rows" | "range";
184
+ readonly start: WindowFrameBoundary;
185
+ readonly end?: WindowFrameBoundary;
186
+ readonly range: SourceRange;
187
+ }
188
+ export interface NamedWindow {
189
+ readonly name: Identifier;
190
+ readonly specification: WindowSpecification;
191
+ readonly range: SourceRange;
192
+ }
193
+ export interface CommonTableExpression {
194
+ readonly name: Identifier;
195
+ readonly columns: readonly Identifier[];
196
+ readonly statement: Statement;
197
+ readonly range: SourceRange;
198
+ }
199
+ export interface WithClause {
200
+ readonly recursive: boolean;
201
+ readonly queries: readonly CommonTableExpression[];
202
+ readonly range: SourceRange;
203
+ }
204
+ export interface SelectLockingClause {
205
+ readonly strength: "update" | "share";
206
+ readonly relations: readonly Identifier[];
207
+ readonly wait?: "nowait" | "skip-locked";
208
+ readonly range: SourceRange;
209
+ }
210
+ export interface CompoundSelect {
211
+ readonly operator: "union" | "intersect" | "except";
212
+ readonly all: boolean;
213
+ readonly statement: SelectStatement;
214
+ readonly range: SourceRange;
215
+ }
216
+ export interface SelectStatement {
217
+ readonly kind: "select";
218
+ readonly parenthesized?: true;
219
+ readonly queryValues?: ValuesClause;
220
+ readonly with?: WithClause;
221
+ readonly distinct: boolean;
222
+ readonly distinctOn: readonly Expression[];
223
+ readonly columns: readonly SelectItem[];
224
+ readonly from?: TableReference;
225
+ readonly joins: readonly JoinClause[];
226
+ readonly where?: Expression;
227
+ readonly groupBy: readonly Expression[];
228
+ readonly groupRollup?: true;
229
+ readonly having?: Expression;
230
+ readonly windows: readonly NamedWindow[];
231
+ readonly orderBy: readonly OrderByItem[];
232
+ readonly limit?: Expression;
233
+ readonly offset?: Expression;
234
+ readonly locking: readonly SelectLockingClause[];
235
+ readonly compounds: readonly CompoundSelect[];
236
+ readonly range: SourceRange;
237
+ }
238
+ export interface ValuesClause {
239
+ readonly kind: "values";
240
+ readonly rows: readonly (readonly Expression[])[];
241
+ readonly range: SourceRange;
242
+ }
243
+ export interface DefaultValuesClause {
244
+ readonly kind: "default-values";
245
+ readonly range: SourceRange;
246
+ }
247
+ export type DmlPriority = "low" | "delayed" | "high";
248
+ export interface InsertSetClause {
249
+ readonly kind: "set";
250
+ readonly assignments: readonly UpdateAssignment[];
251
+ readonly range: SourceRange;
252
+ }
253
+ export interface InsertStatement {
254
+ readonly kind: "insert";
255
+ readonly operation: "insert" | "replace";
256
+ readonly with?: WithClause;
257
+ readonly table: NamedTableReference;
258
+ readonly priority?: DmlPriority;
259
+ readonly ignore: boolean;
260
+ readonly columnList: boolean;
261
+ readonly columns: readonly Identifier[];
262
+ readonly source: ValuesClause | DefaultValuesClause | InsertSetClause | SelectStatement;
263
+ readonly rowAlias?: Identifier;
264
+ readonly columnAliases: readonly Identifier[];
265
+ readonly duplicateKey: readonly UpdateAssignment[];
266
+ readonly returning: readonly SelectItem[];
267
+ readonly range: SourceRange;
268
+ }
269
+ export interface UpdateAssignment {
270
+ readonly column: ColumnExpression;
271
+ readonly value: Expression;
272
+ readonly range: SourceRange;
273
+ }
274
+ export interface UpdateStatement {
275
+ readonly kind: "update";
276
+ readonly with?: WithClause;
277
+ readonly table: TableReference;
278
+ readonly priority?: "low";
279
+ readonly ignore: boolean;
280
+ readonly assignments: readonly UpdateAssignment[];
281
+ readonly joins: readonly JoinClause[];
282
+ readonly where?: Expression;
283
+ readonly orderBy: readonly OrderByItem[];
284
+ readonly limit?: Expression;
285
+ readonly returning: readonly SelectItem[];
286
+ readonly range: SourceRange;
287
+ }
288
+ export interface DeleteStatement {
289
+ readonly kind: "delete";
290
+ readonly with?: WithClause;
291
+ readonly table: TableReference;
292
+ readonly targets: readonly Identifier[];
293
+ readonly priority?: "low";
294
+ readonly quick: boolean;
295
+ readonly ignore: boolean;
296
+ readonly multiTable: boolean;
297
+ readonly joins: readonly JoinClause[];
298
+ readonly where?: Expression;
299
+ readonly orderBy: readonly OrderByItem[];
300
+ readonly limit?: Expression;
301
+ readonly returning: readonly SelectItem[];
302
+ readonly range: SourceRange;
303
+ }
304
+ export type Statement = SelectStatement | InsertStatement | UpdateStatement | DeleteStatement;
305
+ export interface SqlDiagnostic {
306
+ readonly code: string;
307
+ readonly message: string;
308
+ readonly range: SourceRange;
309
+ readonly severity: "error" | "warning" | "info";
310
+ readonly suggestion?: string;
311
+ }
312
+ export declare function mergeRanges(first: SourceRange, last: SourceRange): SourceRange;
313
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/parser/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export function mergeRanges(first, last) {
2
+ return {
3
+ start: first.start,
4
+ end: last.end,
5
+ line: first.line,
6
+ column: first.column,
7
+ };
8
+ }
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/parser/types.ts"],"names":[],"mappings":"AA4XA,MAAM,UAAU,WAAW,CAAC,KAAkB,EAAE,IAAiB;IAC/D,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;KACrB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Expression, Identifier, Statement, TableReference, TypeName } from "./types.js";
2
+ export interface SqlAstContext {
3
+ readonly ctes: readonly Identifier[];
4
+ }
5
+ export interface SqlAstVisitor {
6
+ readonly statement?: (statement: Statement) => void;
7
+ readonly table?: (table: TableReference, statement: Statement, context: SqlAstContext) => void;
8
+ readonly expression?: (expression: Expression, statement: Statement) => void;
9
+ readonly type?: (type: TypeName, statement: Statement) => void;
10
+ }
11
+ /** Walks syntax only. Dialect packages remain responsible for assigning semantics. */
12
+ export declare function walkStatement(statement: Statement, visitor: SqlAstVisitor): void;
13
+ //# sourceMappingURL=walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../../../../src/parser/walk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE9F,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC/F,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;IAC7E,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAC;CAChE;AA+JD,sFAAsF;AACtF,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CAEhF"}
@@ -0,0 +1,190 @@
1
+ function walkExpression(expression, statement, visitor, context) {
2
+ visitor.expression?.(expression, statement);
3
+ switch (expression.kind) {
4
+ case "array":
5
+ case "row":
6
+ for (const element of expression.elements)
7
+ walkExpression(element, statement, visitor, context);
8
+ break;
9
+ case "call":
10
+ for (const argument of expression.arguments)
11
+ walkExpression(argument, statement, visitor, context);
12
+ if (expression.filter !== undefined)
13
+ walkExpression(expression.filter, statement, visitor, context);
14
+ if (expression.over !== undefined && "partitionBy" in expression.over) {
15
+ for (const item of expression.over.partitionBy)
16
+ walkExpression(item, statement, visitor, context);
17
+ for (const item of expression.over.orderBy)
18
+ walkExpression(item.expression, statement, visitor, context);
19
+ for (const boundary of [expression.over.frame?.start, expression.over.frame?.end]) {
20
+ if (boundary?.kind === "preceding" || boundary?.kind === "following") {
21
+ walkExpression(boundary.expression, statement, visitor, context);
22
+ }
23
+ }
24
+ }
25
+ break;
26
+ case "cast":
27
+ walkExpression(expression.expression, statement, visitor, context);
28
+ visitor.type?.(expression.databaseType, statement);
29
+ break;
30
+ case "collate":
31
+ walkExpression(expression.expression, statement, visitor, context);
32
+ break;
33
+ case "binary":
34
+ walkExpression(expression.left, statement, visitor, context);
35
+ walkExpression(expression.right, statement, visitor, context);
36
+ break;
37
+ case "unary":
38
+ walkExpression(expression.expression, statement, visitor, context);
39
+ break;
40
+ case "case":
41
+ if (expression.operand !== undefined)
42
+ walkExpression(expression.operand, statement, visitor, context);
43
+ for (const branch of expression.branches) {
44
+ walkExpression(branch.when, statement, visitor, context);
45
+ walkExpression(branch.then, statement, visitor, context);
46
+ }
47
+ if (expression.elseExpression !== undefined)
48
+ walkExpression(expression.elseExpression, statement, visitor, context);
49
+ break;
50
+ case "subquery":
51
+ case "exists":
52
+ walkStatementWithContext(expression.query, visitor, context.ctes);
53
+ break;
54
+ case "in":
55
+ walkExpression(expression.expression, statement, visitor, context);
56
+ if ("kind" in expression.values)
57
+ walkStatementWithContext(expression.values, visitor, context.ctes);
58
+ else
59
+ for (const value of expression.values)
60
+ walkExpression(value, statement, visitor, context);
61
+ break;
62
+ case "between":
63
+ walkExpression(expression.expression, statement, visitor, context);
64
+ walkExpression(expression.lower, statement, visitor, context);
65
+ walkExpression(expression.upper, statement, visitor, context);
66
+ break;
67
+ case "column":
68
+ case "star":
69
+ case "literal":
70
+ case "parameter":
71
+ break;
72
+ }
73
+ }
74
+ function walkTable(table, statement, visitor, context) {
75
+ visitor.table?.(table, statement, context);
76
+ if (table.kind === "subquery")
77
+ walkStatementWithContext(table.query, visitor, context.ctes);
78
+ }
79
+ function walkStatementWithContext(statement, visitor, inheritedCtes) {
80
+ visitor.statement?.(statement);
81
+ const localCtes = [...inheritedCtes];
82
+ if (statement.with?.recursive)
83
+ localCtes.push(...statement.with.queries.map((query) => query.name));
84
+ for (const query of statement.with?.queries ?? []) {
85
+ walkStatementWithContext(query.statement, visitor, localCtes);
86
+ if (!statement.with?.recursive)
87
+ localCtes.push(query.name);
88
+ }
89
+ const context = Object.freeze({ ctes: Object.freeze(localCtes) });
90
+ if (statement.kind === "select") {
91
+ for (const row of statement.queryValues?.rows ?? []) {
92
+ for (const expression of row)
93
+ walkExpression(expression, statement, visitor, context);
94
+ }
95
+ if (statement.from !== undefined)
96
+ walkTable(statement.from, statement, visitor, context);
97
+ for (const join of statement.joins) {
98
+ walkTable(join.table, statement, visitor, context);
99
+ if (join.on !== undefined)
100
+ walkExpression(join.on, statement, visitor, context);
101
+ }
102
+ for (const item of statement.columns)
103
+ walkExpression(item.expression, statement, visitor, context);
104
+ if (statement.where !== undefined)
105
+ walkExpression(statement.where, statement, visitor, context);
106
+ for (const expression of statement.groupBy)
107
+ walkExpression(expression, statement, visitor, context);
108
+ if (statement.having !== undefined)
109
+ walkExpression(statement.having, statement, visitor, context);
110
+ for (const expression of statement.distinctOn)
111
+ walkExpression(expression, statement, visitor, context);
112
+ for (const window of statement.windows) {
113
+ for (const expression of window.specification.partitionBy)
114
+ walkExpression(expression, statement, visitor, context);
115
+ for (const item of window.specification.orderBy)
116
+ walkExpression(item.expression, statement, visitor, context);
117
+ for (const boundary of [window.specification.frame?.start, window.specification.frame?.end]) {
118
+ if (boundary?.kind === "preceding" || boundary?.kind === "following") {
119
+ walkExpression(boundary.expression, statement, visitor, context);
120
+ }
121
+ }
122
+ }
123
+ for (const item of statement.orderBy)
124
+ walkExpression(item.expression, statement, visitor, context);
125
+ if (statement.limit !== undefined)
126
+ walkExpression(statement.limit, statement, visitor, context);
127
+ if (statement.offset !== undefined)
128
+ walkExpression(statement.offset, statement, visitor, context);
129
+ for (const compound of statement.compounds)
130
+ walkStatementWithContext(compound.statement, visitor, context.ctes);
131
+ return;
132
+ }
133
+ walkTable(statement.table, statement, visitor, context);
134
+ if (statement.kind === "insert") {
135
+ if (statement.source.kind === "values") {
136
+ for (const row of statement.source.rows)
137
+ for (const expression of row)
138
+ walkExpression(expression, statement, visitor, context);
139
+ }
140
+ else if (statement.source.kind === "set") {
141
+ for (const assignment of statement.source.assignments) {
142
+ walkExpression(assignment.column, statement, visitor, context);
143
+ walkExpression(assignment.value, statement, visitor, context);
144
+ }
145
+ }
146
+ else if (statement.source.kind === "select")
147
+ walkStatementWithContext(statement.source, visitor, context.ctes);
148
+ for (const assignment of statement.duplicateKey) {
149
+ walkExpression(assignment.column, statement, visitor, context);
150
+ walkExpression(assignment.value, statement, visitor, context);
151
+ }
152
+ }
153
+ else if (statement.kind === "update") {
154
+ for (const assignment of statement.assignments) {
155
+ walkExpression(assignment.column, statement, visitor, context);
156
+ walkExpression(assignment.value, statement, visitor, context);
157
+ }
158
+ for (const join of statement.joins) {
159
+ walkTable(join.table, statement, visitor, context);
160
+ if (join.on !== undefined)
161
+ walkExpression(join.on, statement, visitor, context);
162
+ }
163
+ if (statement.where !== undefined)
164
+ walkExpression(statement.where, statement, visitor, context);
165
+ for (const item of statement.orderBy)
166
+ walkExpression(item.expression, statement, visitor, context);
167
+ if (statement.limit !== undefined)
168
+ walkExpression(statement.limit, statement, visitor, context);
169
+ }
170
+ else {
171
+ for (const join of statement.joins) {
172
+ walkTable(join.table, statement, visitor, context);
173
+ if (join.on !== undefined)
174
+ walkExpression(join.on, statement, visitor, context);
175
+ }
176
+ if (statement.where !== undefined)
177
+ walkExpression(statement.where, statement, visitor, context);
178
+ for (const item of statement.orderBy)
179
+ walkExpression(item.expression, statement, visitor, context);
180
+ if (statement.limit !== undefined)
181
+ walkExpression(statement.limit, statement, visitor, context);
182
+ }
183
+ for (const item of statement.returning)
184
+ walkExpression(item.expression, statement, visitor, context);
185
+ }
186
+ /** Walks syntax only. Dialect packages remain responsible for assigning semantics. */
187
+ export function walkStatement(statement, visitor) {
188
+ walkStatementWithContext(statement, visitor, []);
189
+ }
190
+ //# sourceMappingURL=walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../../../../src/parser/walk.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type Query, type QueryRenderSkeleton, type RenderedQuery, type SqlRenderer } from "@typed-sql/core";
1
+ import { PreparedQueryRenderCache, type Query, type RenderedQuery, type SqlRenderer } from "@typed-sql/core";
2
2
  export interface MySqlPreparedQueryFactory<Arguments extends readonly unknown[], Row, Params extends readonly unknown[]> {
3
3
  (...args: Arguments): Query<Row, Params>;
4
4
  readonly statementName: string;
@@ -8,13 +8,16 @@ export interface MySqlPreparedQueryMetadata {
8
8
  readonly rendered: RenderedQuery;
9
9
  }
10
10
  interface PreparedStatement {
11
- skeleton: QueryRenderSkeleton | undefined;
11
+ readonly variants: PreparedQueryRenderCache;
12
12
  }
13
13
  export interface MySqlPreparedQueryState {
14
+ readonly capacity: number;
15
+ readonly variantCapacity: number;
14
16
  readonly statements: Map<string, PreparedStatement>;
15
17
  readonly queries: WeakMap<object, MySqlPreparedQueryMetadata>;
16
18
  }
17
- export declare function createMySqlPreparedQueryState(): MySqlPreparedQueryState;
19
+ export declare const defaultMySqlPreparedStatementLimit = 16000;
20
+ export declare function createMySqlPreparedQueryState(capacity?: number, variantCapacity?: number): MySqlPreparedQueryState;
18
21
  export declare function prepareMySqlQuery<Arguments extends readonly unknown[], Row, Params extends readonly unknown[]>(state: MySqlPreparedQueryState, renderer: SqlRenderer, statementName: string, factory: (...args: Arguments) => Query<Row, Params>): MySqlPreparedQueryFactory<Arguments, Row, Params>;
19
22
  export {};
20
23
  //# sourceMappingURL=prepared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prepared.d.ts","sourceRoot":"","sources":["../../../../src/prepared.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,yBAAyB,CACxC,SAAS,SAAS,SAAS,OAAO,EAAE,EACpC,GAAG,EACH,MAAM,SAAS,SAAS,OAAO,EAAE;IAEjC,CAAC,GAAG,IAAI,EAAE,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED,UAAU,iBAAiB;IACzB,QAAQ,EAAE,mBAAmB,GAAG,SAAS,CAAC;CAC3C;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;CAC/D;AAED,wBAAgB,6BAA6B,IAAI,uBAAuB,CAKvE;AAQD,wBAAgB,iBAAiB,CAAC,SAAS,SAAS,SAAS,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,SAAS,SAAS,OAAO,EAAE,EAC5G,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,WAAW,EACrB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,SAAS,KAAK,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,GAClD,yBAAyB,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,CAwCnD"}
1
+ {"version":3,"file":"prepared.d.ts","sourceRoot":"","sources":["../../../../src/prepared.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,wBAAwB,EACxB,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,WAAW,EACjB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,yBAAyB,CACxC,SAAS,SAAS,SAAS,OAAO,EAAE,EACpC,GAAG,EACH,MAAM,SAAS,SAAS,OAAO,EAAE;IAEjC,CAAC,GAAG,IAAI,EAAE,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;CAC7C;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IACpD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;CAC/D;AAED,eAAO,MAAM,kCAAkC,QAAS,CAAC;AAEzD,wBAAgB,6BAA6B,CAC3C,QAAQ,SAAqC,EAC7C,eAAe,SAA4C,GAC1D,uBAAuB,CAWzB;AAQD,wBAAgB,iBAAiB,CAAC,SAAS,SAAS,SAAS,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,SAAS,SAAS,OAAO,EAAE,EAC5G,KAAK,EAAE,uBAAuB,EAC9B,QAAQ,EAAE,WAAW,EACrB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,SAAS,KAAK,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,GAClD,yBAAyB,CAAC,SAAS,EAAE,GAAG,EAAE,MAAM,CAAC,CAoCnD"}
@@ -1,6 +1,13 @@
1
- import { bindQueryRenderSkeleton, compileQueryRenderSkeleton, } from "@typed-sql/core";
2
- export function createMySqlPreparedQueryState() {
1
+ import { DEFAULT_MAX_PREPARED_CARDINALITY_VARIANTS, PreparedQueryRenderCache, } from "@typed-sql/core";
2
+ export const defaultMySqlPreparedStatementLimit = 16_000;
3
+ export function createMySqlPreparedQueryState(capacity = defaultMySqlPreparedStatementLimit, variantCapacity = DEFAULT_MAX_PREPARED_CARDINALITY_VARIANTS) {
4
+ if (!Number.isSafeInteger(capacity) || capacity <= 0) {
5
+ throw new RangeError("MySQL prepared statement limit must be a positive safe integer");
6
+ }
7
+ new PreparedQueryRenderCache(variantCapacity);
3
8
  return {
9
+ capacity,
10
+ variantCapacity,
4
11
  statements: new Map(),
5
12
  queries: new WeakMap(),
6
13
  };
@@ -15,7 +22,10 @@ export function prepareMySqlQuery(state, renderer, statementName, factory) {
15
22
  if (state.statements.has(statementName)) {
16
23
  throw new TypeError(`Prepared statement name ${JSON.stringify(statementName)} is already registered`);
17
24
  }
18
- const statement = { skeleton: undefined };
25
+ if (state.statements.size >= state.capacity) {
26
+ throw new RangeError(`MySQL prepared statement limit of ${state.capacity} has been reached; reuse an existing prepared factory or increase preparedStatementLimit`);
27
+ }
28
+ const statement = { variants: new PreparedQueryRenderCache(state.variantCapacity) };
19
29
  state.statements.set(statementName, statement);
20
30
  const prepared = (...args) => {
21
31
  const query = factory(...args);
@@ -24,17 +34,8 @@ export function prepareMySqlQuery(state, renderer, statementName, factory) {
24
34
  throw new TypeError(`A query cannot use both prepared statement ${JSON.stringify(existing.statementName)} and ${JSON.stringify(statementName)}`);
25
35
  }
26
36
  let rendered = existing?.rendered;
27
- const skeleton = statement.skeleton;
28
- if (rendered === undefined) {
29
- if (skeleton === undefined) {
30
- const compiled = compileQueryRenderSkeleton(query, renderer);
31
- statement.skeleton = compiled.skeleton;
32
- rendered = compiled.rendered;
33
- }
34
- else {
35
- rendered = bindQueryRenderSkeleton(query, skeleton);
36
- }
37
- }
37
+ if (rendered === undefined)
38
+ rendered = statement.variants.bind(query, renderer)?.rendered;
38
39
  if (rendered === undefined) {
39
40
  throw new TypeError(`Prepared statement ${JSON.stringify(statementName)} must always render the same SQL text and structure`);
40
41
  }