kysely 0.17.3 → 0.19.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 (114) hide show
  1. package/README.md +24 -17
  2. package/dist/cjs/dialect/database-introspector.d.ts +13 -0
  3. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +24 -207
  4. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +26 -3
  5. package/dist/cjs/dialect/mysql/mysql-dialect.js +27 -5
  6. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +13 -4
  7. package/dist/cjs/dialect/mysql/mysql-driver.js +33 -51
  8. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +11 -1
  9. package/dist/cjs/dialect/mysql/mysql-introspector.js +29 -7
  10. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +25 -89
  11. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +25 -5
  12. package/dist/cjs/dialect/postgres/postgres-dialect.js +26 -7
  13. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +12 -3
  14. package/dist/cjs/dialect/postgres/postgres-driver.js +21 -39
  15. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +11 -1
  16. package/dist/cjs/dialect/postgres/postgres-introspector.js +15 -4
  17. package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +25 -28
  18. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +19 -3
  19. package/dist/cjs/dialect/sqlite/sqlite-dialect.js +19 -3
  20. package/dist/cjs/dialect/sqlite/sqlite-driver.js +3 -37
  21. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +11 -1
  22. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +11 -4
  23. package/dist/cjs/index.d.ts +153 -2
  24. package/dist/cjs/index.js +147 -3
  25. package/dist/cjs/migration/file-migration-provider.d.ts +21 -5
  26. package/dist/cjs/migration/file-migration-provider.js +14 -13
  27. package/dist/cjs/migration/migrator.d.ts +44 -2
  28. package/dist/cjs/migration/migrator.js +77 -18
  29. package/dist/cjs/operation-node/alias-node.d.ts +2 -2
  30. package/dist/cjs/operation-node/alias-node.js +1 -2
  31. package/dist/cjs/operation-node/operation-node-transformer.js +1 -0
  32. package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
  33. package/dist/cjs/operation-node/update-query-node.js +11 -2
  34. package/dist/cjs/parser/reference-parser.js +2 -1
  35. package/dist/cjs/parser/table-parser.js +2 -1
  36. package/dist/cjs/parser/update-set-parser.d.ts +3 -3
  37. package/dist/cjs/parser/with-parser.d.ts +2 -2
  38. package/dist/cjs/plugin/noop-plugin.d.ts +42 -0
  39. package/dist/cjs/plugin/noop-plugin.js +12 -0
  40. package/dist/cjs/query-builder/insert-query-builder.d.ts +1 -1
  41. package/dist/cjs/query-builder/on-conflict-builder.d.ts +1 -1
  42. package/dist/cjs/query-builder/select-query-builder.d.ts +3 -1
  43. package/dist/cjs/query-builder/select-query-builder.js +5 -5
  44. package/dist/cjs/query-builder/update-query-builder.d.ts +57 -28
  45. package/dist/cjs/query-builder/update-query-builder.js +7 -0
  46. package/dist/cjs/query-compiler/default-query-compiler.js +4 -0
  47. package/dist/cjs/query-creator.d.ts +10 -1
  48. package/dist/cjs/query-creator.js +18 -0
  49. package/dist/cjs/raw-builder/raw-builder.d.ts +32 -2
  50. package/dist/cjs/raw-builder/raw-builder.js +5 -26
  51. package/dist/cjs/schema/schema.d.ts +9 -0
  52. package/dist/cjs/schema/schema.js +12 -0
  53. package/dist/cjs/util/column-type.d.ts +9 -1
  54. package/dist/cjs/util/stack-trace-utils.d.ts +1 -0
  55. package/dist/cjs/util/stack-trace-utils.js +17 -0
  56. package/dist/esm/dialect/database-introspector.d.ts +13 -0
  57. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +24 -207
  58. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +26 -3
  59. package/dist/esm/dialect/mysql/mysql-dialect.js +27 -5
  60. package/dist/esm/dialect/mysql/mysql-driver.d.ts +13 -4
  61. package/dist/esm/dialect/mysql/mysql-driver.js +33 -51
  62. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +11 -1
  63. package/dist/esm/dialect/mysql/mysql-introspector.js +30 -8
  64. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +25 -89
  65. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +25 -5
  66. package/dist/esm/dialect/postgres/postgres-dialect.js +26 -7
  67. package/dist/esm/dialect/postgres/postgres-driver.d.ts +12 -3
  68. package/dist/esm/dialect/postgres/postgres-driver.js +21 -39
  69. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +11 -1
  70. package/dist/esm/dialect/postgres/postgres-introspector.js +16 -5
  71. package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +25 -28
  72. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +19 -3
  73. package/dist/esm/dialect/sqlite/sqlite-dialect.js +19 -3
  74. package/dist/esm/dialect/sqlite/sqlite-driver.js +4 -38
  75. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +11 -1
  76. package/dist/esm/dialect/sqlite/sqlite-introspector.js +12 -5
  77. package/dist/esm/index.d.ts +153 -2
  78. package/dist/esm/index.js +142 -2
  79. package/dist/esm/migration/file-migration-provider.d.ts +21 -5
  80. package/dist/esm/migration/file-migration-provider.js +14 -13
  81. package/dist/esm/migration/migrator.d.ts +44 -2
  82. package/dist/esm/migration/migrator.js +76 -17
  83. package/dist/esm/operation-node/alias-node.d.ts +2 -2
  84. package/dist/esm/operation-node/alias-node.js +1 -2
  85. package/dist/esm/operation-node/operation-node-transformer.js +1 -0
  86. package/dist/esm/operation-node/update-query-node.d.ts +3 -0
  87. package/dist/esm/operation-node/update-query-node.js +11 -2
  88. package/dist/esm/parser/reference-parser.js +2 -1
  89. package/dist/esm/parser/table-parser.js +2 -1
  90. package/dist/esm/parser/update-set-parser.d.ts +3 -3
  91. package/dist/esm/parser/with-parser.d.ts +2 -2
  92. package/dist/esm/plugin/noop-plugin.d.ts +42 -0
  93. package/dist/esm/plugin/noop-plugin.js +9 -0
  94. package/dist/esm/query-builder/insert-query-builder.d.ts +1 -1
  95. package/dist/esm/query-builder/on-conflict-builder.d.ts +1 -1
  96. package/dist/esm/query-builder/select-query-builder.d.ts +3 -1
  97. package/dist/esm/query-builder/select-query-builder.js +5 -5
  98. package/dist/esm/query-builder/update-query-builder.d.ts +57 -28
  99. package/dist/esm/query-builder/update-query-builder.js +7 -0
  100. package/dist/esm/query-compiler/default-query-compiler.js +4 -0
  101. package/dist/esm/query-creator.d.ts +10 -1
  102. package/dist/esm/query-creator.js +18 -0
  103. package/dist/esm/raw-builder/raw-builder.d.ts +32 -2
  104. package/dist/esm/raw-builder/raw-builder.js +5 -26
  105. package/dist/esm/schema/schema.d.ts +9 -0
  106. package/dist/esm/schema/schema.js +12 -0
  107. package/dist/esm/util/column-type.d.ts +9 -1
  108. package/dist/esm/util/stack-trace-utils.d.ts +1 -0
  109. package/dist/esm/util/stack-trace-utils.js +14 -0
  110. package/package.json +10 -15
  111. package/dist/cjs/index-nodeless.d.ts +0 -152
  112. package/dist/cjs/index-nodeless.js +0 -153
  113. package/dist/esm/index-nodeless.d.ts +0 -152
  114. package/dist/esm/index-nodeless.js +0 -142
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Migrator = exports.NO_MIGRATIONS = exports.MIGRATION_LOCK_ID = exports.MIGRATION_LOCK_TABLE = exports.MIGRATION_TABLE = void 0;
3
+ exports.Migrator = exports.NO_MIGRATIONS = exports.MIGRATION_LOCK_ID = exports.DEFAULT_MIGRATION_LOCK_TABLE = exports.DEFAULT_MIGRATION_TABLE = void 0;
4
+ const noop_plugin_js_1 = require("../plugin/noop-plugin.js");
5
+ const with_schema_plugin_js_1 = require("../plugin/with-schema/with-schema-plugin.js");
4
6
  const object_utils_js_1 = require("../util/object-utils.js");
5
- exports.MIGRATION_TABLE = 'kysely_migration';
6
- exports.MIGRATION_LOCK_TABLE = 'kysely_migration_lock';
7
+ exports.DEFAULT_MIGRATION_TABLE = 'kysely_migration';
8
+ exports.DEFAULT_MIGRATION_LOCK_TABLE = 'kysely_migration_lock';
7
9
  exports.MIGRATION_LOCK_ID = 'migration_lock';
8
10
  exports.NO_MIGRATIONS = (0, object_utils_js_1.freeze)({ __noMigrations__: true });
9
11
  /**
@@ -37,9 +39,10 @@ class Migrator {
37
39
  * The returned array is sorted by migration name.
38
40
  */
39
41
  async getMigrations() {
40
- const executedMigrations = (await this.#doesTableExists(exports.MIGRATION_TABLE))
42
+ const executedMigrations = (await this.#doesTableExists(this.#migrationTable))
41
43
  ? await this.#props.db
42
- .selectFrom(exports.MIGRATION_TABLE)
44
+ .withPlugin(this.#schemaPlugin)
45
+ .selectFrom(this.#migrationTable)
43
46
  .select(['name', 'timestamp'])
44
47
  .execute()
45
48
  : [];
@@ -184,16 +187,61 @@ class Migrator {
184
187
  return { error };
185
188
  }
186
189
  }
190
+ get #migrationTableSchema() {
191
+ return this.#props.migrationTableSchema;
192
+ }
193
+ get #migrationTable() {
194
+ return this.#props.migrationTableName ?? exports.DEFAULT_MIGRATION_TABLE;
195
+ }
196
+ get #migrationLockTable() {
197
+ return this.#props.migrationLockTableName ?? exports.DEFAULT_MIGRATION_LOCK_TABLE;
198
+ }
199
+ get #schemaPlugin() {
200
+ if (this.#migrationTableSchema) {
201
+ return new with_schema_plugin_js_1.WithSchemaPlugin(this.#migrationTableSchema);
202
+ }
203
+ return new noop_plugin_js_1.NoopPlugin();
204
+ }
187
205
  async #ensureMigrationTablesExists() {
206
+ await this.#ensureMigrationTableSchemaExists();
188
207
  await this.#ensureMigrationTableExists();
189
208
  await this.#ensureMigrationLockTableExists();
190
209
  await this.#ensureLockRowExists();
191
210
  }
211
+ async #ensureMigrationTableSchemaExists() {
212
+ if (!this.#migrationTableSchema) {
213
+ // Use default schema. Nothing to do.
214
+ return;
215
+ }
216
+ if (!(await this.#doesSchemaExists())) {
217
+ try {
218
+ await this.#props.db.schema
219
+ .createSchema(this.#migrationTableSchema)
220
+ .ifNotExists()
221
+ .execute();
222
+ }
223
+ catch (error) {
224
+ // At least on PostgreSQL, `if not exists` doesn't guarantee the `create schema`
225
+ // query doesn't throw if the schema already exits. That's why we check if
226
+ // the schema exist here and ignore the error if it does.
227
+ if (!(await this.#doesSchemaExists())) {
228
+ throw error;
229
+ }
230
+ }
231
+ }
232
+ }
192
233
  async #ensureMigrationTableExists() {
193
- if (!(await this.#doesTableExists(exports.MIGRATION_TABLE))) {
234
+ if (!(await this.#doesTableExists(this.#migrationTable))) {
194
235
  try {
236
+ if (this.#migrationTableSchema) {
237
+ await this.#props.db.schema
238
+ .createSchema(this.#migrationTableSchema)
239
+ .ifNotExists()
240
+ .execute();
241
+ }
195
242
  await this.#props.db.schema
196
- .createTable(exports.MIGRATION_TABLE)
243
+ .withPlugin(this.#schemaPlugin)
244
+ .createTable(this.#migrationTable)
197
245
  .ifNotExists()
198
246
  .addColumn('name', 'varchar(255)', (col) => col.notNull().primaryKey())
199
247
  // The migration run time as ISO string. This is not a real date type as we
@@ -205,17 +253,18 @@ class Migrator {
205
253
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
206
254
  // query doesn't throw if the table already exits. That's why we check if
207
255
  // the table exist here and ignore the error if it does.
208
- if (!(await this.#doesTableExists(exports.MIGRATION_TABLE))) {
256
+ if (!(await this.#doesTableExists(this.#migrationTable))) {
209
257
  throw error;
210
258
  }
211
259
  }
212
260
  }
213
261
  }
214
262
  async #ensureMigrationLockTableExists() {
215
- if (!(await this.#doesTableExists(exports.MIGRATION_LOCK_TABLE))) {
263
+ if (!(await this.#doesTableExists(this.#migrationLockTable))) {
216
264
  try {
217
265
  await this.#props.db.schema
218
- .createTable(exports.MIGRATION_LOCK_TABLE)
266
+ .withPlugin(this.#schemaPlugin)
267
+ .createTable(this.#migrationLockTable)
219
268
  .ifNotExists()
220
269
  .addColumn('id', 'varchar(255)', (col) => col.notNull().primaryKey())
221
270
  .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0))
@@ -225,7 +274,7 @@ class Migrator {
225
274
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
226
275
  // query doesn't throw if the table already exits. That's why we check if
227
276
  // the table exist here and ignore the error if it does.
228
- if (!(await this.#doesTableExists(exports.MIGRATION_LOCK_TABLE))) {
277
+ if (!(await this.#doesTableExists(this.#migrationLockTable))) {
229
278
  throw error;
230
279
  }
231
280
  }
@@ -235,7 +284,8 @@ class Migrator {
235
284
  if (!(await this.#doesLockRowExists())) {
236
285
  try {
237
286
  await this.#props.db
238
- .insertInto(exports.MIGRATION_LOCK_TABLE)
287
+ .withPlugin(this.#schemaPlugin)
288
+ .insertInto(this.#migrationLockTable)
239
289
  .values({ id: exports.MIGRATION_LOCK_ID, is_locked: 0 })
240
290
  .execute();
241
291
  }
@@ -246,15 +296,21 @@ class Migrator {
246
296
  }
247
297
  }
248
298
  }
299
+ async #doesSchemaExists() {
300
+ const schemas = await this.#props.db.introspection.getSchemas();
301
+ return schemas.some((it) => it.name === this.#migrationTableSchema);
302
+ }
249
303
  async #doesTableExists(tableName) {
250
- const metadata = await this.#props.db.introspection.getMetadata({
304
+ const schema = this.#migrationTableSchema;
305
+ const tables = await this.#props.db.introspection.getTables({
251
306
  withInternalKyselyTables: true,
252
307
  });
253
- return !!metadata.tables.find((it) => it.name === tableName);
308
+ return tables.some((it) => it.name === tableName && (!schema || it.schema === schema));
254
309
  }
255
310
  async #doesLockRowExists() {
256
311
  const lockRow = await this.#props.db
257
- .selectFrom(exports.MIGRATION_LOCK_TABLE)
312
+ .withPlugin(this.#schemaPlugin)
313
+ .selectFrom(this.#migrationLockTable)
258
314
  .where('id', '=', exports.MIGRATION_LOCK_ID)
259
315
  .select('id')
260
316
  .executeTakeFirst();
@@ -312,7 +368,8 @@ class Migrator {
312
368
  }
313
369
  async #getExecutedMigrations(db) {
314
370
  const executedMigrations = await db
315
- .selectFrom(exports.MIGRATION_TABLE)
371
+ .withPlugin(this.#schemaPlugin)
372
+ .selectFrom(this.#migrationTable)
316
373
  .select('name')
317
374
  .orderBy('name')
318
375
  .execute();
@@ -348,7 +405,8 @@ class Migrator {
348
405
  if (migration.down) {
349
406
  await migration.down(db);
350
407
  await db
351
- .deleteFrom(exports.MIGRATION_TABLE)
408
+ .withPlugin(this.#schemaPlugin)
409
+ .deleteFrom(this.#migrationTable)
352
410
  .where('name', '=', migration.name)
353
411
  .execute();
354
412
  results[i] = {
@@ -386,7 +444,8 @@ class Migrator {
386
444
  try {
387
445
  await migration.up(db);
388
446
  await db
389
- .insertInto(exports.MIGRATION_TABLE)
447
+ .withPlugin(this.#schemaPlugin)
448
+ .insertInto(this.#migrationTable)
390
449
  .values({
391
450
  name: migration.name,
392
451
  timestamp: new Date().toISOString(),
@@ -9,12 +9,12 @@ export declare type AliasNodeChild = ColumnNode | ReferenceNode | TableNode | Se
9
9
  export interface AliasNode extends OperationNode {
10
10
  readonly kind: 'AliasNode';
11
11
  readonly node: AliasNodeChild;
12
- readonly alias: IdentifierNode;
12
+ readonly alias: IdentifierNode | RawNode;
13
13
  }
14
14
  /**
15
15
  * @internal
16
16
  */
17
17
  export declare const AliasNode: Readonly<{
18
18
  is(node: OperationNode): node is AliasNode;
19
- create(node: AliasNodeChild, alias: string): AliasNode;
19
+ create(node: AliasNodeChild, alias: IdentifierNode | RawNode): AliasNode;
20
20
  }>;
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AliasNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
- const identifier_node_js_1 = require("./identifier-node.js");
6
5
  /**
7
6
  * @internal
8
7
  */
@@ -14,7 +13,7 @@ exports.AliasNode = (0, object_utils_js_1.freeze)({
14
13
  return (0, object_utils_js_1.freeze)({
15
14
  kind: 'AliasNode',
16
15
  node,
17
- alias: identifier_node_js_1.IdentifierNode.create(alias),
16
+ alias,
18
17
  });
19
18
  },
20
19
  });
@@ -333,6 +333,7 @@ class OperationNodeTransformer {
333
333
  return {
334
334
  kind: 'UpdateQueryNode',
335
335
  table: this.transformNode(node.table),
336
+ from: this.transformNode(node.from),
336
337
  joins: this.transformNodeList(node.joins),
337
338
  where: this.transformNode(node.where),
338
339
  updates: this.transformNodeList(node.updates),
@@ -7,10 +7,12 @@ import { ReturningNode } from './returning-node.js';
7
7
  import { ValueListNode } from './value-list-node.js';
8
8
  import { WhereNode } from './where-node.js';
9
9
  import { WithNode } from './with-node.js';
10
+ import { FromNode } from './from-node.js';
10
11
  export declare type UpdateValuesNode = ValueListNode | PrimitiveValueListNode;
11
12
  export interface UpdateQueryNode extends OperationNode {
12
13
  readonly kind: 'UpdateQueryNode';
13
14
  readonly table: TableExpressionNode;
15
+ readonly from?: FromNode;
14
16
  readonly joins?: ReadonlyArray<JoinNode>;
15
17
  readonly where?: WhereNode;
16
18
  readonly updates?: ReadonlyArray<ColumnUpdateNode>;
@@ -23,5 +25,6 @@ export interface UpdateQueryNode extends OperationNode {
23
25
  export declare const UpdateQueryNode: Readonly<{
24
26
  is(node: OperationNode): node is UpdateQueryNode;
25
27
  create(table: TableExpressionNode, withNode?: WithNode | undefined): UpdateQueryNode;
28
+ cloneWithFromItems(updateQuery: UpdateQueryNode, fromItems: ReadonlyArray<TableExpressionNode>): UpdateQueryNode;
26
29
  cloneWithUpdates(updateQuery: UpdateQueryNode, updates: ReadonlyArray<ColumnUpdateNode>): UpdateQueryNode;
27
30
  }>;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UpdateQueryNode = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
+ const from_node_js_1 = require("./from-node.js");
5
6
  /**
6
7
  * @internal
7
8
  */
@@ -10,11 +11,19 @@ exports.UpdateQueryNode = (0, object_utils_js_1.freeze)({
10
11
  return node.kind === 'UpdateQueryNode';
11
12
  },
12
13
  create(table, withNode) {
13
- return {
14
+ return (0, object_utils_js_1.freeze)({
14
15
  kind: 'UpdateQueryNode',
15
16
  table,
16
17
  ...(withNode && { with: withNode }),
17
- };
18
+ });
19
+ },
20
+ cloneWithFromItems(updateQuery, fromItems) {
21
+ return (0, object_utils_js_1.freeze)({
22
+ ...updateQuery,
23
+ from: updateQuery.from
24
+ ? from_node_js_1.FromNode.cloneWithFroms(updateQuery.from, fromItems)
25
+ : from_node_js_1.FromNode.create(fromItems),
26
+ });
18
27
  },
19
28
  cloneWithUpdates(updateQuery, updates) {
20
29
  return (0, object_utils_js_1.freeze)({
@@ -8,6 +8,7 @@ const table_node_js_1 = require("../operation-node/table-node.js");
8
8
  const object_utils_js_1 = require("../util/object-utils.js");
9
9
  const complex_expression_parser_js_1 = require("./complex-expression-parser.js");
10
10
  const dynamic_reference_builder_js_1 = require("../dynamic/dynamic-reference-builder.js");
11
+ const identifier_node_js_1 = require("../operation-node/identifier-node.js");
11
12
  function parseReferenceExpressionOrList(arg) {
12
13
  if ((0, object_utils_js_1.isReadonlyArray)(arg)) {
13
14
  return arg.map((it) => parseReferenceExpression(it));
@@ -50,7 +51,7 @@ function parseAliasedStringReference(ref) {
50
51
  const ALIAS_SEPARATOR = ' as ';
51
52
  if (ref.includes(ALIAS_SEPARATOR)) {
52
53
  const [columnRef, alias] = ref.split(ALIAS_SEPARATOR).map(trim);
53
- return alias_node_js_1.AliasNode.create(parseStringReference(columnRef), alias);
54
+ return alias_node_js_1.AliasNode.create(parseStringReference(columnRef), identifier_node_js_1.IdentifierNode.create(alias));
54
55
  }
55
56
  else {
56
57
  return parseStringReference(ref);
@@ -5,6 +5,7 @@ const object_utils_js_1 = require("../util/object-utils.js");
5
5
  const alias_node_js_1 = require("../operation-node/alias-node.js");
6
6
  const table_node_js_1 = require("../operation-node/table-node.js");
7
7
  const complex_expression_parser_js_1 = require("./complex-expression-parser.js");
8
+ const identifier_node_js_1 = require("../operation-node/identifier-node.js");
8
9
  function parseTableExpressionOrList(table) {
9
10
  if ((0, object_utils_js_1.isReadonlyArray)(table)) {
10
11
  return table.map((it) => parseTableExpression(it));
@@ -27,7 +28,7 @@ function parseAliasedTable(from) {
27
28
  const ALIAS_SEPARATOR = ' as ';
28
29
  if (from.includes(ALIAS_SEPARATOR)) {
29
30
  const [table, alias] = from.split(ALIAS_SEPARATOR).map(trim);
30
- return alias_node_js_1.AliasNode.create(parseTable(table), alias);
31
+ return alias_node_js_1.AliasNode.create(parseTable(table), identifier_node_js_1.IdentifierNode.create(alias));
31
32
  }
32
33
  else {
33
34
  return parseTable(from);
@@ -1,7 +1,7 @@
1
1
  import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
2
2
  import { UpdateKeys, UpdateType } from '../util/column-type.js';
3
3
  import { ValueExpression } from './value-parser.js';
4
- export declare type MutationObject<DB, TB extends keyof DB> = {
5
- [C in UpdateKeys<DB[TB]>]?: ValueExpression<DB, TB, UpdateType<DB[TB][C]>>;
4
+ export declare type MutationObject<DB, TB extends keyof DB, TM extends keyof DB> = {
5
+ [C in UpdateKeys<DB[TM]>]?: ValueExpression<DB, TB, UpdateType<DB[TM][C]>>;
6
6
  };
7
- export declare function parseUpdateObject(row: MutationObject<any, any>): ReadonlyArray<ColumnUpdateNode>;
7
+ export declare function parseUpdateObject(row: MutationObject<any, any, any>): ReadonlyArray<ColumnUpdateNode>;
@@ -8,14 +8,14 @@ import { RawBuilder } from '../raw-builder/raw-builder.js';
8
8
  export declare type CommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB>) => CommonTableExpressionOutput<DB, CN>;
9
9
  export declare type RecursiveCommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpressionName<CN>>>) => CommonTableExpressionOutput<DB, CN>;
10
10
  export declare type QueryCreatorWithCommonTableExpression<DB, CN extends string, CTE> = QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpression<CTE>>>;
11
- declare type CommonTableExpressionOutput<DB, CN extends string> = SelectQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | InsertQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | UpdateQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | DeleteQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | RawBuilder<ExtractRowFromCommonTableExpressionName<CN>>;
11
+ declare type CommonTableExpressionOutput<DB, CN extends string> = SelectQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | InsertQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | UpdateQueryBuilder<DB, any, any, ExtractRowFromCommonTableExpressionName<CN>> | DeleteQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | RawBuilder<ExtractRowFromCommonTableExpressionName<CN>>;
12
12
  /**
13
13
  * Given a common CommonTableExpression CTE extracts the row type from it.
14
14
  *
15
15
  * For example a CTE `(db) => db.selectFrom('person').select(['id', 'first_name'])`
16
16
  * would result in `Pick<Person, 'id' | 'first_name'>`.
17
17
  */
18
- declare type ExtractRowFromCommonTableExpression<CTE> = CTE extends (creator: QueryCreator<any>) => infer Q ? Q extends SelectQueryBuilder<any, any, infer QO> ? QO : Q extends InsertQueryBuilder<any, any, infer QO> ? QO : Q extends UpdateQueryBuilder<any, any, infer QO> ? QO : Q extends DeleteQueryBuilder<any, any, infer QO> ? QO : Q extends RawBuilder<infer RO> ? RO : never : never;
18
+ declare type ExtractRowFromCommonTableExpression<CTE> = CTE extends (creator: QueryCreator<any>) => infer Q ? Q extends SelectQueryBuilder<any, any, infer QO> ? QO : Q extends InsertQueryBuilder<any, any, infer QO> ? QO : Q extends UpdateQueryBuilder<any, any, any, infer QO> ? QO : Q extends DeleteQueryBuilder<any, any, infer QO> ? QO : Q extends RawBuilder<infer RO> ? RO : never : never;
19
19
  /**
20
20
  * Extracts 'person' from a string like 'person(id, first_name)'.
21
21
  */
@@ -0,0 +1,42 @@
1
+ import { QueryResult } from '../driver/database-connection.js';
2
+ import { RootOperationNode } from '../query-compiler/query-compiler.js';
3
+ import { UnknownRow } from '../util/type-utils.js';
4
+ import { KyselyPlugin, PluginTransformQueryArgs, PluginTransformResultArgs } from './kysely-plugin.js';
5
+ export declare class NoopPlugin implements KyselyPlugin {
6
+ /**
7
+ * This is called for each query before it is executed. You can modify the query by
8
+ * transforming its {@link OperationNode} tree provided in {@link PluginTransformQueryArgs.node | args.node}
9
+ * and returning the transformed tree. You'd usually want to use an {@link OperationNodeTransformer}
10
+ * for this.
11
+ *
12
+ * If you need to pass some query-related data between this method and `transformResult` you
13
+ * can use a `WeakMap` with {@link PluginTransformQueryArgs.queryId | args.queryId} as the key:
14
+ *
15
+ * ```ts
16
+ * const plugin = {
17
+ * data: new WeakMap<QueryId, SomeData>(),
18
+ *
19
+ * transformQuery(args: PluginTransformQueryArgs): RootOperationNode {
20
+ * this.data.set(args.queryId, something)
21
+ * return args.node
22
+ * },
23
+ *
24
+ * transformResult(args: PluginTransformResultArgs): QueryResult<UnknownRow> {
25
+ * const data = this.data.get(args.queryId)
26
+ * return args.result
27
+ * }
28
+ * }
29
+ * ```
30
+ *
31
+ * You should use a `WeakMap` instead of a `Map` or some other strong references because `transformQuery`
32
+ * is not always matched by a call to `transformResult` which would leave orphaned items in the map
33
+ * and cause a memory leak.
34
+ */
35
+ transformQuery(args: PluginTransformQueryArgs): RootOperationNode;
36
+ /**
37
+ * This method is called for each query after it has been executed. The result
38
+ * of the query can be accessed through {@link PluginTransformResultArgs.result | args.result}.
39
+ * You can modify the result and return the modifier result.
40
+ */
41
+ transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>>;
42
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoopPlugin = void 0;
4
+ class NoopPlugin {
5
+ transformQuery(args) {
6
+ return args.node;
7
+ }
8
+ async transformResult(args) {
9
+ return args.result;
10
+ }
11
+ }
12
+ exports.NoopPlugin = NoopPlugin;
@@ -382,7 +382,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
382
382
  * .onDuplicateKeyUpdate({ species: 'hamster' })
383
383
  * ```
384
384
  */
385
- onDuplicateKeyUpdate(updates: MutationObject<DB, TB>): InsertQueryBuilder<DB, TB, O>;
385
+ onDuplicateKeyUpdate(updates: MutationObject<DB, TB, TB>): InsertQueryBuilder<DB, TB, O>;
386
386
  /**
387
387
  * Allows you to return data from modified rows.
388
388
  *
@@ -386,7 +386,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
386
386
  * do update set "first_name" = $3
387
387
  * ```
388
388
  */
389
- doUpdateSet(updates: MutationObject<OnConflictDatabase<DB, TB>, OnConflictTables<TB>>): OnConflictUpdateBuilder<OnConflictDatabase<DB, TB>, OnConflictTables<TB>>;
389
+ doUpdateSet(updates: MutationObject<OnConflictDatabase<DB, TB>, OnConflictTables<TB>, OnConflictTables<TB>>): OnConflictUpdateBuilder<OnConflictDatabase<DB, TB>, OnConflictTables<TB>>;
390
390
  }
391
391
  export interface OnConflictBuilderProps {
392
392
  readonly onConflictNode: OnConflictNode;
@@ -1212,7 +1212,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1212
1212
  * ### Examples
1213
1213
  *
1214
1214
  * ```ts
1215
- * await db.selectFrom('pet')
1215
+ * const pets = await db.selectFrom('pet')
1216
1216
  * .selectAll('pet')
1217
1217
  * .select(
1218
1218
  * (qb) => qb.selectFrom('person')
@@ -1221,6 +1221,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1221
1221
  * .as('owner_first_name')
1222
1222
  * )
1223
1223
  * .execute()
1224
+ *
1225
+ * pets[0].owner_first_name
1224
1226
  * ```
1225
1227
  */
1226
1228
  as<A extends string>(alias: A): AliasedQueryBuilder<DB, TB, O, A>;
@@ -15,6 +15,7 @@ const object_utils_js_1 = require("../util/object-utils.js");
15
15
  const group_by_parser_js_1 = require("../parser/group-by-parser.js");
16
16
  const union_parser_js_1 = require("../parser/union-parser.js");
17
17
  const no_result_error_js_1 = require("./no-result-error.js");
18
+ const identifier_node_js_1 = require("../operation-node/identifier-node.js");
18
19
  class SelectQueryBuilder {
19
20
  #props;
20
21
  constructor(props) {
@@ -515,7 +516,7 @@ class SelectQueryBuilder {
515
516
  * ### Examples
516
517
  *
517
518
  * ```ts
518
- * await db.selectFrom('pet')
519
+ * const pets = await db.selectFrom('pet')
519
520
  * .selectAll('pet')
520
521
  * .select(
521
522
  * (qb) => qb.selectFrom('person')
@@ -524,6 +525,8 @@ class SelectQueryBuilder {
524
525
  * .as('owner_first_name')
525
526
  * )
526
527
  * .execute()
528
+ *
529
+ * pets[0].owner_first_name
527
530
  * ```
528
531
  */
529
532
  as(alias) {
@@ -613,10 +616,7 @@ class AliasedQueryBuilder {
613
616
  }
614
617
  toOperationNode() {
615
618
  const node = this.#queryBuilder.toOperationNode();
616
- if (select_query_node_js_1.SelectQueryNode.is(node)) {
617
- return alias_node_js_1.AliasNode.create(node, this.#alias);
618
- }
619
- throw new Error('only select queries can be aliased');
619
+ return alias_node_js_1.AliasNode.create(node, identifier_node_js_1.IdentifierNode.create(this.#alias));
620
620
  }
621
621
  }
622
622
  exports.AliasedQueryBuilder = AliasedQueryBuilder;