kysely 0.9.2 → 0.9.6
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/dist/cjs/dialect/mysql/mysql-dialect.d.ts +11 -0
- package/dist/cjs/dialect/mysql/mysql-dialect.js +7 -0
- package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +13 -1
- package/dist/cjs/dialect/postgres/postgres-dialect.js +10 -0
- package/dist/cjs/dialect/postgres/postgres-driver.js +2 -2
- package/dist/cjs/dialect/postgres/postgres-query-compiler.js +1 -1
- package/dist/cjs/driver/runtime-driver.d.ts +3 -2
- package/dist/cjs/driver/runtime-driver.js +57 -4
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/kysely.d.ts +31 -9
- package/dist/cjs/kysely.js +25 -9
- package/dist/cjs/migration/migration.d.ts +32 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +9 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +61 -59
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -316
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.js +1 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/select-query-node.js +8 -0
- package/dist/cjs/operation-node/union-node.d.ts +16 -0
- package/dist/cjs/operation-node/union-node.js +19 -0
- package/dist/cjs/parser/insert-values-parser.d.ts +1 -1
- package/dist/cjs/parser/join-parser.d.ts +4 -4
- package/dist/cjs/parser/union-parser.d.ts +5 -0
- package/dist/cjs/parser/union-parser.js +13 -0
- package/dist/cjs/parser/value-parser.d.ts +1 -1
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +5 -116
- package/dist/cjs/plugin/camel-case/camel-case-transformer.d.ts +8 -0
- package/dist/cjs/plugin/camel-case/camel-case-transformer.js +19 -0
- package/dist/cjs/plugin/camel-case/camel-case.d.ts +15 -0
- package/dist/cjs/plugin/camel-case/camel-case.js +109 -0
- package/dist/cjs/plugin/kysely-plugin.d.ts +1 -1
- package/dist/cjs/query-builder/query-builder.d.ts +65 -1
- package/dist/cjs/query-builder/query-builder.js +83 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +5 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +18 -1
- package/dist/cjs/query-executor/default-query-executor.d.ts +1 -0
- package/dist/cjs/query-executor/default-query-executor.js +6 -0
- package/dist/cjs/query-executor/noop-query-executor.d.ts +1 -0
- package/dist/cjs/query-executor/noop-query-executor.js +3 -0
- package/dist/cjs/query-executor/query-executor.d.ts +9 -4
- package/dist/cjs/util/log.d.ts +19 -0
- package/dist/cjs/util/log.js +37 -0
- package/dist/cjs/util/random-string.js +6 -3
- package/dist/cjs/util/type-utils.d.ts +4 -4
- package/dist/esm/dialect/mysql/mysql-dialect.d.ts +11 -0
- package/dist/esm/dialect/mysql/mysql-dialect.js +7 -0
- package/dist/esm/dialect/mysql/mysql-driver.js +1 -1
- package/dist/esm/dialect/postgres/postgres-dialect.d.ts +13 -1
- package/dist/esm/dialect/postgres/postgres-dialect.js +10 -0
- package/dist/esm/dialect/postgres/postgres-driver.js +2 -2
- package/dist/esm/dialect/postgres/postgres-query-compiler.js +1 -1
- package/dist/esm/driver/runtime-driver.d.ts +3 -2
- package/dist/esm/driver/runtime-driver.js +57 -4
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/kysely.d.ts +31 -9
- package/dist/esm/kysely.js +25 -9
- package/dist/esm/migration/migration.d.ts +32 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +9 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +61 -59
- package/dist/esm/operation-node/operation-node-visitor.js +1 -316
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.js +1 -0
- package/dist/esm/operation-node/select-query-node.d.ts +3 -0
- package/dist/esm/operation-node/select-query-node.js +8 -0
- package/dist/esm/operation-node/union-node.d.ts +16 -0
- package/dist/esm/operation-node/union-node.js +16 -0
- package/dist/esm/parser/insert-values-parser.d.ts +1 -1
- package/dist/esm/parser/join-parser.d.ts +4 -4
- package/dist/esm/parser/union-parser.d.ts +5 -0
- package/dist/esm/parser/union-parser.js +9 -0
- package/dist/esm/parser/value-parser.d.ts +1 -1
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +4 -115
- package/dist/esm/plugin/camel-case/camel-case-transformer.d.ts +8 -0
- package/dist/esm/plugin/camel-case/camel-case-transformer.js +15 -0
- package/dist/esm/plugin/camel-case/camel-case.d.ts +15 -0
- package/dist/esm/plugin/camel-case/camel-case.js +104 -0
- package/dist/esm/plugin/kysely-plugin.d.ts +1 -1
- package/dist/esm/query-builder/query-builder.d.ts +65 -1
- package/dist/esm/query-builder/query-builder.js +83 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +5 -0
- package/dist/esm/query-compiler/default-query-compiler.js +18 -1
- package/dist/esm/query-executor/default-query-executor.d.ts +1 -0
- package/dist/esm/query-executor/default-query-executor.js +6 -0
- package/dist/esm/query-executor/noop-query-executor.d.ts +1 -0
- package/dist/esm/query-executor/noop-query-executor.js +3 -0
- package/dist/esm/query-executor/query-executor.d.ts +9 -4
- package/dist/esm/util/log.d.ts +19 -0
- package/dist/esm/util/log.js +33 -0
- package/dist/esm/util/random-string.js +6 -3
- package/dist/esm/util/type-utils.d.ts +4 -4
- package/package.json +1 -1
|
@@ -59,326 +59,11 @@ export class OperationNodeVisitor {
|
|
|
59
59
|
AddConstraintNode: this.visitAddConstraint.bind(this),
|
|
60
60
|
DropConstraintNode: this.visitDropConstraint.bind(this),
|
|
61
61
|
ForeignKeyConstraintNode: this.visitForeignKeyConstraint.bind(this),
|
|
62
|
+
UnionNode: this.visitUnion.bind(this),
|
|
62
63
|
};
|
|
63
64
|
visitNode = (node) => {
|
|
64
65
|
this.nodeStack.push(node);
|
|
65
66
|
this.#visitors[node.kind](node);
|
|
66
67
|
this.nodeStack.pop();
|
|
67
68
|
};
|
|
68
|
-
visitSelectQuery(node) {
|
|
69
|
-
if (node.with) {
|
|
70
|
-
this.visitNode(node.with);
|
|
71
|
-
}
|
|
72
|
-
if (node.distinctOnSelections) {
|
|
73
|
-
node.distinctOnSelections.forEach(this.visitNode);
|
|
74
|
-
}
|
|
75
|
-
if (node.selections) {
|
|
76
|
-
node.selections.forEach(this.visitNode);
|
|
77
|
-
}
|
|
78
|
-
this.visitNode(node.from);
|
|
79
|
-
if (node.joins) {
|
|
80
|
-
node.joins.forEach(this.visitNode);
|
|
81
|
-
}
|
|
82
|
-
if (node.where) {
|
|
83
|
-
this.visitNode(node.where);
|
|
84
|
-
}
|
|
85
|
-
if (node.groupBy) {
|
|
86
|
-
this.visitNode(node.groupBy);
|
|
87
|
-
}
|
|
88
|
-
if (node.having) {
|
|
89
|
-
this.visitNode(node.having);
|
|
90
|
-
}
|
|
91
|
-
if (node.orderBy) {
|
|
92
|
-
this.visitNode(node.orderBy);
|
|
93
|
-
}
|
|
94
|
-
if (node.limit) {
|
|
95
|
-
this.visitNode(node.limit);
|
|
96
|
-
}
|
|
97
|
-
if (node.offset) {
|
|
98
|
-
this.visitNode(node.offset);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
visitSelection(node) {
|
|
102
|
-
this.visitNode(node.selection);
|
|
103
|
-
}
|
|
104
|
-
visitColumn(node) {
|
|
105
|
-
this.visitNode(node.column);
|
|
106
|
-
}
|
|
107
|
-
visitAlias(node) {
|
|
108
|
-
this.visitNode(node.node);
|
|
109
|
-
}
|
|
110
|
-
visitTable(node) {
|
|
111
|
-
if (node.schema) {
|
|
112
|
-
this.visitNode(node.schema);
|
|
113
|
-
}
|
|
114
|
-
this.visitNode(node.table);
|
|
115
|
-
}
|
|
116
|
-
visitFrom(node) {
|
|
117
|
-
node.froms.forEach(this.visitNode);
|
|
118
|
-
}
|
|
119
|
-
visitReference(node) {
|
|
120
|
-
this.visitNode(node.column);
|
|
121
|
-
this.visitNode(node.table);
|
|
122
|
-
}
|
|
123
|
-
visitFilter(node) {
|
|
124
|
-
if (node.left) {
|
|
125
|
-
this.visitNode(node.left);
|
|
126
|
-
}
|
|
127
|
-
this.visitNode(node.op);
|
|
128
|
-
this.visitNode(node.right);
|
|
129
|
-
}
|
|
130
|
-
visitAnd(node) {
|
|
131
|
-
this.visitNode(node.left);
|
|
132
|
-
this.visitNode(node.right);
|
|
133
|
-
}
|
|
134
|
-
visitOr(node) {
|
|
135
|
-
this.visitNode(node.left);
|
|
136
|
-
this.visitNode(node.right);
|
|
137
|
-
}
|
|
138
|
-
visitValueList(node) {
|
|
139
|
-
node.values.forEach(this.visitNode);
|
|
140
|
-
}
|
|
141
|
-
visitParens(node) {
|
|
142
|
-
this.visitNode(node.node);
|
|
143
|
-
}
|
|
144
|
-
visitJoin(node) {
|
|
145
|
-
this.visitNode(node.table);
|
|
146
|
-
if (node.on) {
|
|
147
|
-
this.visitNode(node.on);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
visitRaw(node) {
|
|
151
|
-
node.params.forEach(this.visitNode);
|
|
152
|
-
}
|
|
153
|
-
visitWhere(node) {
|
|
154
|
-
this.visitNode(node.where);
|
|
155
|
-
}
|
|
156
|
-
visitInsertQuery(node) {
|
|
157
|
-
if (node.with) {
|
|
158
|
-
this.visitNode(node.with);
|
|
159
|
-
}
|
|
160
|
-
this.visitNode(node.into);
|
|
161
|
-
if (node.columns) {
|
|
162
|
-
node.columns.forEach(this.visitNode);
|
|
163
|
-
}
|
|
164
|
-
if (node.values) {
|
|
165
|
-
node.values.forEach(this.visitNode);
|
|
166
|
-
}
|
|
167
|
-
if (node.returning) {
|
|
168
|
-
this.visitNode(node.returning);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
visitDeleteQuery(node) {
|
|
172
|
-
if (node.with) {
|
|
173
|
-
this.visitNode(node.with);
|
|
174
|
-
}
|
|
175
|
-
this.visitNode(node.from);
|
|
176
|
-
if (node.joins) {
|
|
177
|
-
node.joins.forEach(this.visitNode);
|
|
178
|
-
}
|
|
179
|
-
if (node.where) {
|
|
180
|
-
this.visitNode(node.where);
|
|
181
|
-
}
|
|
182
|
-
if (node.returning) {
|
|
183
|
-
this.visitNode(node.returning);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
visitReturning(node) {
|
|
187
|
-
node.selections.forEach(this.visitNode);
|
|
188
|
-
}
|
|
189
|
-
visitCreateTable(node) {
|
|
190
|
-
this.visitNode(node.table);
|
|
191
|
-
node.columns.forEach(this.visitNode);
|
|
192
|
-
if (node.constraints) {
|
|
193
|
-
node.constraints.forEach(this.visitNode);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
visitAddColumn(node) {
|
|
197
|
-
this.visitNode(node.column);
|
|
198
|
-
}
|
|
199
|
-
visitColumnDefinition(node) {
|
|
200
|
-
this.visitNode(node.column);
|
|
201
|
-
this.visitNode(node.dataType);
|
|
202
|
-
if (node.defaultTo) {
|
|
203
|
-
this.visitNode(node.defaultTo);
|
|
204
|
-
}
|
|
205
|
-
if (node.references) {
|
|
206
|
-
this.visitNode(node.references);
|
|
207
|
-
}
|
|
208
|
-
if (node.check) {
|
|
209
|
-
this.visitNode(node.check);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
visitDropTable(node) {
|
|
213
|
-
this.visitNode(node.table);
|
|
214
|
-
}
|
|
215
|
-
visitOrderBy(node) {
|
|
216
|
-
node.items.forEach(this.visitNode);
|
|
217
|
-
}
|
|
218
|
-
visitOrderByItem(node) {
|
|
219
|
-
this.visitNode(node.orderBy);
|
|
220
|
-
}
|
|
221
|
-
visitGroupBy(node) {
|
|
222
|
-
node.items.forEach(this.visitNode);
|
|
223
|
-
}
|
|
224
|
-
visitGroupByItem(node) {
|
|
225
|
-
this.visitNode(node.groupBy);
|
|
226
|
-
}
|
|
227
|
-
visitUpdateQuery(node) {
|
|
228
|
-
if (node.with) {
|
|
229
|
-
this.visitNode(node.with);
|
|
230
|
-
}
|
|
231
|
-
this.visitNode(node.table);
|
|
232
|
-
if (node.updates) {
|
|
233
|
-
node.updates.forEach(this.visitNode);
|
|
234
|
-
}
|
|
235
|
-
if (node.joins) {
|
|
236
|
-
node.joins.forEach(this.visitNode);
|
|
237
|
-
}
|
|
238
|
-
if (node.where) {
|
|
239
|
-
this.visitNode(node.where);
|
|
240
|
-
}
|
|
241
|
-
if (node.returning) {
|
|
242
|
-
this.visitNode(node.returning);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
visitColumnUpdate(node) {
|
|
246
|
-
this.visitNode(node.column);
|
|
247
|
-
this.visitNode(node.value);
|
|
248
|
-
}
|
|
249
|
-
visitLimit(node) {
|
|
250
|
-
this.visitNode(node.limit);
|
|
251
|
-
}
|
|
252
|
-
visitOffset(node) {
|
|
253
|
-
this.visitNode(node.offset);
|
|
254
|
-
}
|
|
255
|
-
visitOnConflict(node) {
|
|
256
|
-
if (node.columns) {
|
|
257
|
-
node.columns.forEach(this.visitNode);
|
|
258
|
-
}
|
|
259
|
-
if (node.constraint) {
|
|
260
|
-
this.visitNode(node.constraint);
|
|
261
|
-
}
|
|
262
|
-
if (node.updates) {
|
|
263
|
-
node.updates.forEach(this.visitNode);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
visitOnDuplicateKey(node) {
|
|
267
|
-
node.updates.forEach(this.visitNode);
|
|
268
|
-
}
|
|
269
|
-
visitCreateIndex(node) {
|
|
270
|
-
this.visitNode(node.name);
|
|
271
|
-
if (node.table) {
|
|
272
|
-
this.visitNode(node.table);
|
|
273
|
-
}
|
|
274
|
-
if (node.using) {
|
|
275
|
-
this.visitNode(node.using);
|
|
276
|
-
}
|
|
277
|
-
if (node.expression) {
|
|
278
|
-
this.visitNode(node.expression);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
visitList(node) {
|
|
282
|
-
node.items.forEach(this.visitNode);
|
|
283
|
-
}
|
|
284
|
-
visitDropIndex(node) {
|
|
285
|
-
this.visitNode(node.name);
|
|
286
|
-
if (node.table) {
|
|
287
|
-
this.visitNode(node.table);
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
visitPrimaryKeyConstraint(node) {
|
|
291
|
-
if (node.name) {
|
|
292
|
-
this.visitNode(node.name);
|
|
293
|
-
}
|
|
294
|
-
node.columns.forEach(this.visitNode);
|
|
295
|
-
}
|
|
296
|
-
visitUniqueConstraint(node) {
|
|
297
|
-
if (node.name) {
|
|
298
|
-
this.visitNode(node.name);
|
|
299
|
-
}
|
|
300
|
-
node.columns.forEach(this.visitNode);
|
|
301
|
-
}
|
|
302
|
-
visitReferences(node) {
|
|
303
|
-
node.columns.forEach(this.visitNode);
|
|
304
|
-
this.visitNode(node.table);
|
|
305
|
-
}
|
|
306
|
-
visitCheckConstraint(node) {
|
|
307
|
-
if (node.name) {
|
|
308
|
-
this.visitNode(node.name);
|
|
309
|
-
}
|
|
310
|
-
this.visitNode(node.expression);
|
|
311
|
-
}
|
|
312
|
-
visitWith(node) {
|
|
313
|
-
node.expressions.forEach(this.visitNode);
|
|
314
|
-
}
|
|
315
|
-
visitCommonTableExpression(node) {
|
|
316
|
-
this.visitNode(node.name);
|
|
317
|
-
this.visitNode(node.expression);
|
|
318
|
-
}
|
|
319
|
-
visitHaving(node) {
|
|
320
|
-
this.visitNode(node.having);
|
|
321
|
-
}
|
|
322
|
-
visitCreateSchema(node) {
|
|
323
|
-
this.visitNode(node.schema);
|
|
324
|
-
}
|
|
325
|
-
visitDropSchema(node) {
|
|
326
|
-
this.visitNode(node.schema);
|
|
327
|
-
}
|
|
328
|
-
visitAlterTable(node) {
|
|
329
|
-
this.visitNode(node.table);
|
|
330
|
-
if (node.renameTo) {
|
|
331
|
-
this.visitNode(node.renameTo);
|
|
332
|
-
}
|
|
333
|
-
if (node.renameColumn) {
|
|
334
|
-
this.visitNode(node.renameColumn);
|
|
335
|
-
}
|
|
336
|
-
if (node.setSchema) {
|
|
337
|
-
this.visitNode(node.setSchema);
|
|
338
|
-
}
|
|
339
|
-
if (node.addColumn) {
|
|
340
|
-
this.visitNode(node.addColumn);
|
|
341
|
-
}
|
|
342
|
-
if (node.dropColumn) {
|
|
343
|
-
this.visitNode(node.dropColumn);
|
|
344
|
-
}
|
|
345
|
-
if (node.alterColumn) {
|
|
346
|
-
this.visitNode(node.alterColumn);
|
|
347
|
-
}
|
|
348
|
-
if (node.modifyColumn) {
|
|
349
|
-
this.visitNode(node.modifyColumn);
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
visitDropColumn(node) {
|
|
353
|
-
this.visitNode(node.column);
|
|
354
|
-
}
|
|
355
|
-
visitRenameColumn(node) {
|
|
356
|
-
this.visitNode(node.column);
|
|
357
|
-
this.visitNode(node.renameTo);
|
|
358
|
-
}
|
|
359
|
-
visitAlterColumn(node) {
|
|
360
|
-
this.visitNode(node.column);
|
|
361
|
-
}
|
|
362
|
-
visitModifyColumn(node) {
|
|
363
|
-
this.visitNode(node.column);
|
|
364
|
-
}
|
|
365
|
-
visitAddConstraint(node) {
|
|
366
|
-
this.visitNode(node.constraint);
|
|
367
|
-
}
|
|
368
|
-
visitDropConstraint(node) {
|
|
369
|
-
this.visitNode(node.constraintName);
|
|
370
|
-
}
|
|
371
|
-
visitForeignKeyConstraint(node) {
|
|
372
|
-
if (node.name) {
|
|
373
|
-
this.visitNode(node.name);
|
|
374
|
-
}
|
|
375
|
-
node.columns.forEach(this.visitNode);
|
|
376
|
-
this.visitNode(node.references);
|
|
377
|
-
}
|
|
378
|
-
visitDataType(node) { }
|
|
379
|
-
visitSelectAll(_) { }
|
|
380
|
-
visitIdentifier(_) { }
|
|
381
|
-
visitValue(_) { }
|
|
382
|
-
visitPrimitiveValueList(_) { }
|
|
383
|
-
visitOperator(node) { }
|
|
384
69
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare type OperationNodeKind = 'IdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode';
|
|
1
|
+
export declare type OperationNodeKind = 'IdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'UnionNode';
|
|
2
2
|
export interface OperationNode {
|
|
3
3
|
readonly kind: OperationNodeKind;
|
|
4
4
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ArrayItemType } from '../util/type-utils.js';
|
|
2
2
|
import { OperationNode } from './operation-node.js';
|
|
3
|
-
export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "ilike", "not ilike", "@>", "<@", "?", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "exists", "not exists"];
|
|
3
|
+
export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "ilike", "not ilike", "@>", "<@", "?", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "exists", "not exists", "&&"];
|
|
4
4
|
export declare type Operator = ArrayItemType<typeof OPERATORS>;
|
|
5
5
|
export interface OperatorNode extends OperationNode {
|
|
6
6
|
readonly kind: 'OperatorNode';
|
|
@@ -12,6 +12,7 @@ import { OrderByNode } from './order-by-node.js';
|
|
|
12
12
|
import { SelectionNode } from './selection-node.js';
|
|
13
13
|
import { WhereNode } from './where-node.js';
|
|
14
14
|
import { WithNode } from './with-node.js';
|
|
15
|
+
import { UnionNode } from './union-node.js';
|
|
15
16
|
export declare type SelectModifier = 'ForUpdate' | 'ForNoKeyUpdate' | 'ForShare' | 'ForKeyShare' | 'NoWait' | 'SkipLocked';
|
|
16
17
|
export interface SelectQueryNode extends OperationNode {
|
|
17
18
|
readonly kind: 'SelectQueryNode';
|
|
@@ -28,6 +29,7 @@ export interface SelectQueryNode extends OperationNode {
|
|
|
28
29
|
readonly offset?: OffsetNode;
|
|
29
30
|
readonly with?: WithNode;
|
|
30
31
|
readonly having?: HavingNode;
|
|
32
|
+
readonly union?: ReadonlyArray<UnionNode>;
|
|
31
33
|
}
|
|
32
34
|
/**
|
|
33
35
|
* @internal
|
|
@@ -45,4 +47,5 @@ export declare const SelectQueryNode: Readonly<{
|
|
|
45
47
|
cloneWithHaving(selectNode: SelectQueryNode, filter: HavingNodeChild): SelectQueryNode;
|
|
46
48
|
cloneWithOrHaving(selectNode: SelectQueryNode, filter: HavingNodeChild): SelectQueryNode;
|
|
47
49
|
cloneWithDistinct(selectNode: SelectQueryNode): SelectQueryNode;
|
|
50
|
+
cloneWithUnion(selectNode: SelectQueryNode, union: UnionNode): SelectQueryNode;
|
|
48
51
|
}>;
|
|
@@ -91,4 +91,12 @@ export const SelectQueryNode = freeze({
|
|
|
91
91
|
isDistinct: true,
|
|
92
92
|
});
|
|
93
93
|
},
|
|
94
|
+
cloneWithUnion(selectNode, union) {
|
|
95
|
+
return freeze({
|
|
96
|
+
...selectNode,
|
|
97
|
+
union: selectNode.union
|
|
98
|
+
? freeze([...selectNode.union, union])
|
|
99
|
+
: freeze([union]),
|
|
100
|
+
});
|
|
101
|
+
},
|
|
94
102
|
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { OperationNode } from './operation-node.js';
|
|
2
|
+
import { RawNode } from './raw-node.js';
|
|
3
|
+
import { SelectQueryNode } from './select-query-node.js';
|
|
4
|
+
export declare type UnionExpressionNode = SelectQueryNode | RawNode;
|
|
5
|
+
export interface UnionNode extends OperationNode {
|
|
6
|
+
readonly kind: 'UnionNode';
|
|
7
|
+
readonly union: UnionExpressionNode;
|
|
8
|
+
readonly all: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare const UnionNode: Readonly<{
|
|
14
|
+
is(node: OperationNode): node is UnionNode;
|
|
15
|
+
create(union: UnionExpressionNode, all: boolean): UnionNode;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { freeze } from '../util/object-utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export const UnionNode = freeze({
|
|
6
|
+
is(node) {
|
|
7
|
+
return node.kind === 'UnionNode';
|
|
8
|
+
},
|
|
9
|
+
create(union, all) {
|
|
10
|
+
return freeze({
|
|
11
|
+
kind: 'UnionNode',
|
|
12
|
+
union,
|
|
13
|
+
all,
|
|
14
|
+
});
|
|
15
|
+
},
|
|
16
|
+
});
|
|
@@ -8,7 +8,7 @@ import { PrimitiveValue } from '../util/object-utils.js';
|
|
|
8
8
|
export declare type InsertObject<DB, TB extends keyof DB> = {
|
|
9
9
|
[C in keyof DB[TB]]: InsertValueExpression<DB[TB][C]>;
|
|
10
10
|
};
|
|
11
|
-
export declare type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | InsertObject<DB, TB
|
|
11
|
+
export declare type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | ReadonlyArray<InsertObject<DB, TB>>;
|
|
12
12
|
declare type InsertValueExpression<T> = T | AnyQueryBuilder | AnyRawBuilder | GeneratedPlaceholder;
|
|
13
13
|
export declare function parseInsertObjectOrList(args: InsertObjectOrList<any, any>): [ReadonlyArray<ColumnNode>, ReadonlyArray<InsertValuesNode>];
|
|
14
14
|
export declare function parseInsertValueExpression(value: InsertValueExpression<PrimitiveValue>): ValueNode | RawNode | SelectQueryNode;
|
|
@@ -3,9 +3,9 @@ import { AnyColumn, AnyColumnWithTable } from '../util/type-utils.js';
|
|
|
3
3
|
import { ExtractAliasFromTableExpression, TableExpressionDatabase } from './table-parser.js';
|
|
4
4
|
import { JoinBuilder } from '../query-builder/join-builder.js';
|
|
5
5
|
import { ParseContext } from './parse-context.js';
|
|
6
|
-
export declare type JoinReferenceExpression<DB, TB extends keyof DB,
|
|
7
|
-
export declare type JoinCallbackExpression<DB, TB extends keyof DB,
|
|
8
|
-
declare type AnyJoinColumn<DB, TB extends keyof DB,
|
|
9
|
-
declare type AnyJoinColumnWithTable<DB, TB extends keyof DB,
|
|
6
|
+
export declare type JoinReferenceExpression<DB, TB extends keyof DB, TE> = AnyJoinColumn<DB, TB, TE> | AnyJoinColumnWithTable<DB, TB, TE>;
|
|
7
|
+
export declare type JoinCallbackExpression<DB, TB extends keyof DB, TE> = (join: JoinBuilder<TableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>>) => JoinBuilder<any, any>;
|
|
8
|
+
declare type AnyJoinColumn<DB, TB extends keyof DB, TE> = AnyColumn<TableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>>;
|
|
9
|
+
declare type AnyJoinColumnWithTable<DB, TB extends keyof DB, TE> = AnyColumnWithTable<TableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>>;
|
|
10
10
|
export declare function parseJoin(ctx: ParseContext, joinType: JoinType, args: any[]): JoinNode;
|
|
11
11
|
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { UnionNode } from '../operation-node/union-node.js';
|
|
2
|
+
import { QueryBuilder } from '../query-builder/query-builder.js';
|
|
3
|
+
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
4
|
+
export declare type UnionExpression<DB, O> = QueryBuilder<DB, any, O> | RawBuilder<O>;
|
|
5
|
+
export declare function parseUnion(union: UnionExpression<any, any>, all: boolean): UnionNode;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { QueryNode } from '../operation-node/query-node.js';
|
|
2
|
+
import { UnionNode } from '../operation-node/union-node.js';
|
|
3
|
+
export function parseUnion(union, all) {
|
|
4
|
+
const node = union.toOperationNode();
|
|
5
|
+
if (QueryNode.isMutating(node)) {
|
|
6
|
+
throw new Error("can't combine insert, update or delete queries using union");
|
|
7
|
+
}
|
|
8
|
+
return UnionNode.create(node, all);
|
|
9
|
+
}
|
|
@@ -3,6 +3,6 @@ import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory
|
|
|
3
3
|
import { ExtractTypeFromReferenceExpression } from './reference-parser.js';
|
|
4
4
|
import { ParseContext } from './parse-context.js';
|
|
5
5
|
export declare type ValueExpression<DB, TB extends keyof DB, RE> = ExtractTypeFromReferenceExpression<DB, TB, RE> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB>;
|
|
6
|
-
export declare type ValueExpressionOrList<DB, TB extends keyof DB, RE> = ValueExpression<DB, TB, RE> | ValueExpression<DB, TB, RE
|
|
6
|
+
export declare type ValueExpressionOrList<DB, TB extends keyof DB, RE> = ValueExpression<DB, TB, RE> | ReadonlyArray<ValueExpression<DB, TB, RE>>;
|
|
7
7
|
export declare function parseValueExpressionOrList(ctx: ParseContext, arg: ValueExpressionOrList<any, any, any>): ValueExpressionNode;
|
|
8
8
|
export declare function parseValueExpression(ctx: ParseContext, arg: ValueExpression<any, any, any>): ValueExpressionNode;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
2
1
|
import { isObject } from '../../util/object-utils.js';
|
|
2
|
+
import { SnakeCaseTransformer } from './camel-case-transformer.js';
|
|
3
|
+
import { createCamelCaseMapper, createSnakeCaseMapper, } from './camel-case.js';
|
|
3
4
|
/**
|
|
4
5
|
* A plugin that converts snake_case identifiers in the database into
|
|
5
6
|
* camelCase in the javascript side.
|
|
@@ -69,8 +70,8 @@ export class CamelCasePlugin {
|
|
|
69
70
|
#snakeCase;
|
|
70
71
|
#snakeCaseTransformer;
|
|
71
72
|
constructor(opt = {}) {
|
|
72
|
-
this.#camelCase =
|
|
73
|
-
this.#snakeCase =
|
|
73
|
+
this.#camelCase = createCamelCaseMapper(opt);
|
|
74
|
+
this.#snakeCase = createSnakeCaseMapper(opt);
|
|
74
75
|
this.#snakeCaseTransformer = new SnakeCaseTransformer(this.snakeCase.bind(this));
|
|
75
76
|
}
|
|
76
77
|
transformQuery(args) {
|
|
@@ -105,118 +106,6 @@ export class CamelCasePlugin {
|
|
|
105
106
|
return this.#camelCase(str);
|
|
106
107
|
}
|
|
107
108
|
}
|
|
108
|
-
class SnakeCaseTransformer extends OperationNodeTransformer {
|
|
109
|
-
#snakeCase;
|
|
110
|
-
constructor(snakeCase) {
|
|
111
|
-
super();
|
|
112
|
-
this.#snakeCase = snakeCase;
|
|
113
|
-
}
|
|
114
|
-
transformIdentifier(node) {
|
|
115
|
-
node = super.transformIdentifier(node);
|
|
116
|
-
return {
|
|
117
|
-
...node,
|
|
118
|
-
identifier: this.#snakeCase(node.identifier),
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
109
|
function canMap(obj) {
|
|
123
110
|
return isObject(obj) && !(obj instanceof Date) && !Buffer.isBuffer(obj);
|
|
124
111
|
}
|
|
125
|
-
function createSnakeCase({ upperCase = false, underscoreBeforeDigits = false, underscoreBetweenUppercaseLetters = false, } = {}) {
|
|
126
|
-
return memoize((str) => {
|
|
127
|
-
if (str.length === 0) {
|
|
128
|
-
return str;
|
|
129
|
-
}
|
|
130
|
-
const upper = str.toUpperCase();
|
|
131
|
-
const lower = str.toLowerCase();
|
|
132
|
-
let out = lower[0];
|
|
133
|
-
for (let i = 1, l = str.length; i < l; ++i) {
|
|
134
|
-
const char = str[i];
|
|
135
|
-
const prevChar = str[i - 1];
|
|
136
|
-
const upperChar = upper[i];
|
|
137
|
-
const prevUpperChar = upper[i - 1];
|
|
138
|
-
const lowerChar = lower[i];
|
|
139
|
-
const prevLowerChar = lower[i - 1];
|
|
140
|
-
// If underScoreBeforeDigits is true then, well, insert an underscore
|
|
141
|
-
// before digits :). Only the first digit gets an underscore if
|
|
142
|
-
// there are multiple.
|
|
143
|
-
if (underscoreBeforeDigits && isDigit(char) && !isDigit(prevChar)) {
|
|
144
|
-
out += '_' + char;
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
// Test if `char` is an upper-case character and that the character
|
|
148
|
-
// actually has different upper and lower case versions.
|
|
149
|
-
if (char === upperChar && upperChar !== lowerChar) {
|
|
150
|
-
const prevCharacterIsUppercase = prevChar === prevUpperChar && prevUpperChar !== prevLowerChar;
|
|
151
|
-
// If underscoreBetweenUppercaseLetters is true, we always place an underscore
|
|
152
|
-
// before consecutive uppercase letters (e.g. "fooBAR" becomes "foo_b_a_r").
|
|
153
|
-
// Otherwise, we don't (e.g. "fooBAR" becomes "foo_bar").
|
|
154
|
-
if (underscoreBetweenUppercaseLetters || !prevCharacterIsUppercase) {
|
|
155
|
-
out += '_' + lowerChar;
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
out += lowerChar;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
out += char;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
if (upperCase) {
|
|
166
|
-
return out.toUpperCase();
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
return out;
|
|
170
|
-
}
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
function createCamelCase({ upperCase = false } = {}) {
|
|
174
|
-
return memoize((str) => {
|
|
175
|
-
if (str.length === 0) {
|
|
176
|
-
return str;
|
|
177
|
-
}
|
|
178
|
-
if (upperCase && isAllUpperCaseSnakeCase(str)) {
|
|
179
|
-
// Only convert to lower case if the string is all upper
|
|
180
|
-
// case snake_case. This allows camelCase strings to go
|
|
181
|
-
// through without changing.
|
|
182
|
-
str = str.toLowerCase();
|
|
183
|
-
}
|
|
184
|
-
let out = str[0];
|
|
185
|
-
for (let i = 1, l = str.length; i < l; ++i) {
|
|
186
|
-
const char = str[i];
|
|
187
|
-
const prevChar = str[i - 1];
|
|
188
|
-
if (char !== '_') {
|
|
189
|
-
if (prevChar === '_') {
|
|
190
|
-
out += char.toUpperCase();
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
out += char;
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
return out;
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
function isAllUpperCaseSnakeCase(str) {
|
|
201
|
-
for (let i = 1, l = str.length; i < l; ++i) {
|
|
202
|
-
const char = str[i];
|
|
203
|
-
if (char !== '_' && char !== char.toUpperCase()) {
|
|
204
|
-
return false;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
return true;
|
|
208
|
-
}
|
|
209
|
-
function isDigit(char) {
|
|
210
|
-
return char >= '0' && char <= '9';
|
|
211
|
-
}
|
|
212
|
-
function memoize(func) {
|
|
213
|
-
const cache = new Map();
|
|
214
|
-
return (str) => {
|
|
215
|
-
let mapped = cache.get(str);
|
|
216
|
-
if (!mapped) {
|
|
217
|
-
mapped = func(str);
|
|
218
|
-
cache.set(str, mapped);
|
|
219
|
-
}
|
|
220
|
-
return mapped;
|
|
221
|
-
};
|
|
222
|
-
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IdentifierNode } from '../../operation-node/identifier-node.js';
|
|
2
|
+
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
3
|
+
import { StringMapper } from './camel-case.js';
|
|
4
|
+
export declare class SnakeCaseTransformer extends OperationNodeTransformer {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(snakeCase: StringMapper);
|
|
7
|
+
protected transformIdentifier(node: IdentifierNode): IdentifierNode;
|
|
8
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
2
|
+
export class SnakeCaseTransformer extends OperationNodeTransformer {
|
|
3
|
+
#snakeCase;
|
|
4
|
+
constructor(snakeCase) {
|
|
5
|
+
super();
|
|
6
|
+
this.#snakeCase = snakeCase;
|
|
7
|
+
}
|
|
8
|
+
transformIdentifier(node) {
|
|
9
|
+
node = super.transformIdentifier(node);
|
|
10
|
+
return {
|
|
11
|
+
...node,
|
|
12
|
+
identifier: this.#snakeCase(node.identifier),
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare type StringMapper = (str: string) => string;
|
|
2
|
+
/**
|
|
3
|
+
* Creates a function that transforms camel case strings to snake case.
|
|
4
|
+
*/
|
|
5
|
+
export declare function createSnakeCaseMapper({ upperCase, underscoreBeforeDigits, underscoreBetweenUppercaseLetters, }?: {
|
|
6
|
+
upperCase?: boolean | undefined;
|
|
7
|
+
underscoreBeforeDigits?: boolean | undefined;
|
|
8
|
+
underscoreBetweenUppercaseLetters?: boolean | undefined;
|
|
9
|
+
}): StringMapper;
|
|
10
|
+
/**
|
|
11
|
+
* Creates a function that transforms snake case strings to camel case.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createCamelCaseMapper({ upperCase, }?: {
|
|
14
|
+
upperCase?: boolean | undefined;
|
|
15
|
+
}): StringMapper;
|