kysely 0.26.3 → 0.27.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 (185) hide show
  1. package/dist/cjs/dialect/dialect-adapter-base.d.ts +8 -0
  2. package/dist/cjs/dialect/dialect-adapter-base.js +3 -0
  3. package/dist/cjs/dialect/dialect-adapter.d.ts +8 -0
  4. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +78 -0
  5. package/dist/cjs/dialect/mssql/mssql-adapter.js +30 -0
  6. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  7. package/dist/cjs/dialect/mssql/mssql-dialect-config.js +2 -0
  8. package/dist/cjs/dialect/mssql/mssql-dialect.d.ts +70 -0
  9. package/dist/cjs/dialect/mssql/mssql-dialect.js +65 -0
  10. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +54 -0
  11. package/dist/cjs/dialect/mssql/mssql-driver.js +268 -0
  12. package/dist/cjs/dialect/mssql/mssql-introspector.d.ts +20 -0
  13. package/dist/cjs/dialect/mssql/mssql-introspector.js +97 -0
  14. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  15. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +64 -0
  16. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  17. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +28 -0
  18. package/dist/cjs/dialect/postgres/postgres-driver.js +1 -1
  19. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  20. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  22. package/dist/cjs/dialect/sqlite/sqlite-driver.js +15 -2
  23. package/dist/cjs/driver/driver.d.ts +1 -1
  24. package/dist/cjs/driver/driver.js +1 -0
  25. package/dist/cjs/driver/runtime-driver.js +5 -1
  26. package/dist/cjs/driver/single-connection-provider.js +7 -8
  27. package/dist/cjs/expression/expression-builder.d.ts +66 -75
  28. package/dist/cjs/expression/expression-builder.js +8 -17
  29. package/dist/cjs/expression/expression-wrapper.d.ts +8 -8
  30. package/dist/cjs/helpers/mssql.d.ts +152 -0
  31. package/dist/cjs/helpers/mssql.js +160 -0
  32. package/dist/cjs/index.d.ts +7 -1
  33. package/dist/cjs/index.js +6 -0
  34. package/dist/cjs/migration/migrator.js +12 -16
  35. package/dist/cjs/operation-node/add-index-node.d.ts +21 -0
  36. package/dist/cjs/operation-node/add-index-node.js +31 -0
  37. package/dist/cjs/operation-node/alter-table-node.d.ts +5 -1
  38. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  39. package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
  40. package/dist/cjs/operation-node/create-index-node.d.ts +1 -0
  41. package/dist/cjs/operation-node/create-table-node.d.ts +1 -0
  42. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  43. package/dist/cjs/operation-node/operation-node-transformer.js +17 -0
  44. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  45. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  46. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  47. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  48. package/dist/cjs/operation-node/operator-node.js +2 -0
  49. package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
  50. package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
  51. package/dist/cjs/parser/binary-operation-parser.js +1 -1
  52. package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
  53. package/dist/cjs/parser/reference-parser.d.ts +2 -1
  54. package/dist/cjs/parser/update-set-parser.d.ts +5 -2
  55. package/dist/cjs/parser/update-set-parser.js +13 -3
  56. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +4 -4
  57. package/dist/cjs/query-builder/case-builder.d.ts +5 -4
  58. package/dist/cjs/query-builder/delete-query-builder.d.ts +3 -3
  59. package/dist/cjs/query-builder/function-module.d.ts +96 -25
  60. package/dist/cjs/query-builder/function-module.js +17 -3
  61. package/dist/cjs/query-builder/having-interface.d.ts +3 -5
  62. package/dist/cjs/query-builder/insert-query-builder.d.ts +27 -9
  63. package/dist/cjs/query-builder/insert-query-builder.js +3 -3
  64. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  65. package/dist/cjs/query-builder/insert-result.js +8 -1
  66. package/dist/cjs/query-builder/json-path-builder.d.ts +3 -2
  67. package/dist/cjs/query-builder/json-path-builder.js +6 -3
  68. package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
  69. package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
  70. package/dist/cjs/query-builder/over-builder.d.ts +2 -2
  71. package/dist/cjs/query-builder/select-query-builder.d.ts +38 -22
  72. package/dist/cjs/query-builder/update-query-builder.d.ts +20 -4
  73. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  74. package/dist/cjs/query-builder/where-interface.d.ts +3 -3
  75. package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
  76. package/dist/cjs/query-compiler/default-query-compiler.js +65 -12
  77. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
  78. package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
  79. package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
  80. package/dist/cjs/schema/alter-table-builder.js +59 -2
  81. package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
  82. package/dist/cjs/schema/column-definition-builder.js +27 -0
  83. package/dist/cjs/schema/create-index-builder.d.ts +23 -0
  84. package/dist/cjs/schema/create-index-builder.js +30 -0
  85. package/dist/cjs/schema/create-table-builder.d.ts +28 -2
  86. package/dist/cjs/schema/create-table-builder.js +38 -3
  87. package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
  88. package/dist/cjs/schema/unique-constraint-builder.js +24 -0
  89. package/dist/cjs/util/log.js +5 -1
  90. package/dist/cjs/util/object-utils.d.ts +1 -1
  91. package/dist/cjs/util/type-utils.d.ts +27 -19
  92. package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
  93. package/dist/esm/dialect/dialect-adapter-base.js +3 -0
  94. package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
  95. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
  96. package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
  97. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  98. package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
  99. package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
  100. package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
  101. package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
  102. package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
  103. package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
  104. package/dist/esm/dialect/mssql/mssql-introspector.js +94 -0
  105. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  106. package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
  107. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  108. package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
  109. package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
  110. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  111. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
  112. package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  113. package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
  114. package/dist/esm/driver/driver.d.ts +1 -1
  115. package/dist/esm/driver/driver.js +1 -0
  116. package/dist/esm/driver/runtime-driver.js +5 -1
  117. package/dist/esm/driver/single-connection-provider.js +7 -8
  118. package/dist/esm/expression/expression-builder.d.ts +66 -75
  119. package/dist/esm/expression/expression-builder.js +10 -19
  120. package/dist/esm/expression/expression-wrapper.d.ts +8 -8
  121. package/dist/esm/helpers/mssql.d.ts +152 -0
  122. package/dist/esm/helpers/mssql.js +155 -0
  123. package/dist/esm/index.d.ts +7 -1
  124. package/dist/esm/index.js +6 -0
  125. package/dist/esm/migration/migrator.js +12 -16
  126. package/dist/esm/operation-node/add-index-node.d.ts +21 -0
  127. package/dist/esm/operation-node/add-index-node.js +29 -0
  128. package/dist/esm/operation-node/alter-table-node.d.ts +5 -1
  129. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  130. package/dist/esm/operation-node/column-update-node.d.ts +2 -3
  131. package/dist/esm/operation-node/create-index-node.d.ts +1 -0
  132. package/dist/esm/operation-node/create-table-node.d.ts +1 -0
  133. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  134. package/dist/esm/operation-node/operation-node-transformer.js +17 -0
  135. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  136. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  137. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  138. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  139. package/dist/esm/operation-node/operator-node.js +2 -0
  140. package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
  141. package/dist/esm/operation-node/unique-constraint-node.js +8 -1
  142. package/dist/esm/parser/binary-operation-parser.js +1 -1
  143. package/dist/esm/parser/coalesce-parser.d.ts +12 -2
  144. package/dist/esm/parser/reference-parser.d.ts +2 -1
  145. package/dist/esm/parser/update-set-parser.d.ts +5 -2
  146. package/dist/esm/parser/update-set-parser.js +10 -1
  147. package/dist/esm/query-builder/aggregate-function-builder.d.ts +4 -4
  148. package/dist/esm/query-builder/case-builder.d.ts +5 -4
  149. package/dist/esm/query-builder/delete-query-builder.d.ts +3 -3
  150. package/dist/esm/query-builder/function-module.d.ts +96 -25
  151. package/dist/esm/query-builder/function-module.js +17 -3
  152. package/dist/esm/query-builder/having-interface.d.ts +3 -5
  153. package/dist/esm/query-builder/insert-query-builder.d.ts +27 -9
  154. package/dist/esm/query-builder/insert-query-builder.js +4 -4
  155. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  156. package/dist/esm/query-builder/insert-result.js +8 -1
  157. package/dist/esm/query-builder/json-path-builder.d.ts +3 -2
  158. package/dist/esm/query-builder/json-path-builder.js +6 -3
  159. package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
  160. package/dist/esm/query-builder/on-conflict-builder.js +2 -7
  161. package/dist/esm/query-builder/over-builder.d.ts +2 -2
  162. package/dist/esm/query-builder/select-query-builder.d.ts +38 -22
  163. package/dist/esm/query-builder/update-query-builder.d.ts +20 -4
  164. package/dist/esm/query-builder/update-query-builder.js +3 -3
  165. package/dist/esm/query-builder/where-interface.d.ts +3 -3
  166. package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
  167. package/dist/esm/query-compiler/default-query-compiler.js +65 -12
  168. package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
  169. package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
  170. package/dist/esm/schema/alter-table-builder.d.ts +41 -1
  171. package/dist/esm/schema/alter-table-builder.js +59 -2
  172. package/dist/esm/schema/column-definition-builder.d.ts +25 -0
  173. package/dist/esm/schema/column-definition-builder.js +27 -0
  174. package/dist/esm/schema/create-index-builder.d.ts +23 -0
  175. package/dist/esm/schema/create-index-builder.js +30 -0
  176. package/dist/esm/schema/create-table-builder.d.ts +28 -2
  177. package/dist/esm/schema/create-table-builder.js +38 -3
  178. package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
  179. package/dist/esm/schema/unique-constraint-builder.js +21 -0
  180. package/dist/esm/util/log.js +5 -1
  181. package/dist/esm/util/object-utils.d.ts +1 -1
  182. package/dist/esm/util/type-utils.d.ts +27 -19
  183. package/helpers/mssql.d.ts +1 -0
  184. package/helpers/mssql.js +1 -0
  185. package/package.json +17 -6
package/dist/cjs/index.js CHANGED
@@ -90,6 +90,12 @@ __exportStar(require("./dialect/postgres/postgres-dialect.js"), exports);
90
90
  __exportStar(require("./dialect/sqlite/sqlite-query-compiler.js"), exports);
91
91
  __exportStar(require("./dialect/sqlite/sqlite-introspector.js"), exports);
92
92
  __exportStar(require("./dialect/sqlite/sqlite-adapter.js"), exports);
93
+ __exportStar(require("./dialect/mssql/mssql-adapter.js"), exports);
94
+ __exportStar(require("./dialect/mssql/mssql-dialect-config.js"), exports);
95
+ __exportStar(require("./dialect/mssql/mssql-dialect.js"), exports);
96
+ __exportStar(require("./dialect/mssql/mssql-driver.js"), exports);
97
+ __exportStar(require("./dialect/mssql/mssql-introspector.js"), exports);
98
+ __exportStar(require("./dialect/mssql/mssql-query-compiler.js"), exports);
93
99
  __exportStar(require("./query-compiler/default-query-compiler.js"), exports);
94
100
  __exportStar(require("./query-compiler/query-compiler.js"), exports);
95
101
  __exportStar(require("./migration/migrator.js"), exports);
@@ -220,10 +220,7 @@ class Migrator {
220
220
  }
221
221
  if (!(await this.#doesSchemaExists())) {
222
222
  try {
223
- await this.#props.db.schema
224
- .createSchema(this.#migrationTableSchema)
225
- .ifNotExists()
226
- .execute();
223
+ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema));
227
224
  }
228
225
  catch (error) {
229
226
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create schema`
@@ -239,20 +236,15 @@ class Migrator {
239
236
  if (!(await this.#doesTableExists(this.#migrationTable))) {
240
237
  try {
241
238
  if (this.#migrationTableSchema) {
242
- await this.#props.db.schema
243
- .createSchema(this.#migrationTableSchema)
244
- .ifNotExists()
245
- .execute();
239
+ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema));
246
240
  }
247
- await this.#props.db.schema
241
+ await this.#createIfNotExists(this.#props.db.schema
248
242
  .withPlugin(this.#schemaPlugin)
249
243
  .createTable(this.#migrationTable)
250
- .ifNotExists()
251
244
  .addColumn('name', 'varchar(255)', (col) => col.notNull().primaryKey())
252
245
  // The migration run time as ISO string. This is not a real date type as we
253
246
  // can't know which data type is supported by all future dialects.
254
- .addColumn('timestamp', 'varchar(255)', (col) => col.notNull())
255
- .execute();
247
+ .addColumn('timestamp', 'varchar(255)', (col) => col.notNull()));
256
248
  }
257
249
  catch (error) {
258
250
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
@@ -267,13 +259,11 @@ class Migrator {
267
259
  async #ensureMigrationLockTableExists() {
268
260
  if (!(await this.#doesTableExists(this.#migrationLockTable))) {
269
261
  try {
270
- await this.#props.db.schema
262
+ await this.#createIfNotExists(this.#props.db.schema
271
263
  .withPlugin(this.#schemaPlugin)
272
264
  .createTable(this.#migrationLockTable)
273
- .ifNotExists()
274
265
  .addColumn('id', 'varchar(255)', (col) => col.notNull().primaryKey())
275
- .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0))
276
- .execute();
266
+ .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0)));
277
267
  }
278
268
  catch (error) {
279
269
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
@@ -481,6 +471,12 @@ class Migrator {
481
471
  }
482
472
  return { results };
483
473
  }
474
+ async #createIfNotExists(qb) {
475
+ if (this.#props.db.getExecutor().adapter.supportsCreateIfNotExists) {
476
+ qb = qb.ifNotExists();
477
+ }
478
+ await qb.execute();
479
+ }
484
480
  }
485
481
  exports.Migrator = Migrator;
486
482
  class MigrationResultSetError extends Error {
@@ -0,0 +1,21 @@
1
+ import { IdentifierNode } from './identifier-node.js';
2
+ import { OperationNode } from './operation-node.js';
3
+ import { RawNode } from './raw-node.js';
4
+ export type AddIndexNodeProps = Omit<AddIndexNode, 'kind' | 'name'>;
5
+ export interface AddIndexNode extends OperationNode {
6
+ readonly kind: 'AddIndexNode';
7
+ readonly name: IdentifierNode;
8
+ readonly columns?: OperationNode[];
9
+ readonly unique?: boolean;
10
+ readonly using?: RawNode;
11
+ readonly ifNotExists?: boolean;
12
+ }
13
+ /**
14
+ * @internal
15
+ */
16
+ export declare const AddIndexNode: Readonly<{
17
+ is(node: OperationNode): node is AddIndexNode;
18
+ create(name: string): AddIndexNode;
19
+ cloneWith(node: AddIndexNode, props: AddIndexNodeProps): AddIndexNode;
20
+ cloneWithColumns(node: AddIndexNode, columns: OperationNode[]): AddIndexNode;
21
+ }>;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AddIndexNode = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ const identifier_node_js_1 = require("./identifier-node.js");
6
+ /**
7
+ * @internal
8
+ */
9
+ exports.AddIndexNode = (0, object_utils_js_1.freeze)({
10
+ is(node) {
11
+ return node.kind === 'AddIndexNode';
12
+ },
13
+ create(name) {
14
+ return (0, object_utils_js_1.freeze)({
15
+ kind: 'AddIndexNode',
16
+ name: identifier_node_js_1.IdentifierNode.create(name)
17
+ });
18
+ },
19
+ cloneWith(node, props) {
20
+ return (0, object_utils_js_1.freeze)({
21
+ ...node,
22
+ ...props,
23
+ });
24
+ },
25
+ cloneWithColumns(node, columns) {
26
+ return (0, object_utils_js_1.freeze)({
27
+ ...node,
28
+ columns: [...(node.columns || []), ...columns],
29
+ });
30
+ },
31
+ });
@@ -8,7 +8,9 @@ import { AlterColumnNode } from './alter-column-node.js';
8
8
  import { AddConstraintNode } from './add-constraint-node.js';
9
9
  import { DropConstraintNode } from './drop-constraint-node.js';
10
10
  import { ModifyColumnNode } from './modify-column-node.js';
11
- export type AlterTableNodeTableProps = Pick<AlterTableNode, 'renameTo' | 'setSchema' | 'addConstraint' | 'dropConstraint'>;
11
+ import { DropIndexNode } from './drop-index-node.js';
12
+ import { AddIndexNode } from './add-index-node.js';
13
+ export type AlterTableNodeTableProps = Pick<AlterTableNode, 'renameTo' | 'setSchema' | 'addConstraint' | 'dropConstraint' | 'addIndex' | 'dropIndex'>;
12
14
  export type AlterTableColumnAlterationNode = RenameColumnNode | AddColumnNode | DropColumnNode | AlterColumnNode | ModifyColumnNode;
13
15
  export interface AlterTableNode extends OperationNode {
14
16
  readonly kind: 'AlterTableNode';
@@ -18,6 +20,8 @@ export interface AlterTableNode extends OperationNode {
18
20
  readonly columnAlterations?: ReadonlyArray<AlterTableColumnAlterationNode>;
19
21
  readonly addConstraint?: AddConstraintNode;
20
22
  readonly dropConstraint?: DropConstraintNode;
23
+ readonly addIndex?: AddIndexNode;
24
+ readonly dropIndex?: DropIndexNode;
21
25
  }
22
26
  /**
23
27
  * @internal
@@ -20,6 +20,7 @@ export interface ColumnDefinitionNode extends OperationNode {
20
20
  readonly unsigned?: boolean;
21
21
  readonly frontModifiers?: ReadonlyArray<OperationNode>;
22
22
  readonly endModifiers?: ReadonlyArray<OperationNode>;
23
+ readonly nullsNotDistinct?: boolean;
23
24
  }
24
25
  /**
25
26
  * @internal
@@ -1,8 +1,7 @@
1
- import { ColumnNode } from './column-node.js';
2
1
  import { OperationNode } from './operation-node.js';
3
2
  export interface ColumnUpdateNode extends OperationNode {
4
3
  readonly kind: 'ColumnUpdateNode';
5
- readonly column: ColumnNode;
4
+ readonly column: OperationNode;
6
5
  readonly value: OperationNode;
7
6
  }
8
7
  /**
@@ -10,5 +9,5 @@ export interface ColumnUpdateNode extends OperationNode {
10
9
  */
11
10
  export declare const ColumnUpdateNode: Readonly<{
12
11
  is(node: OperationNode): node is ColumnUpdateNode;
13
- create(column: ColumnNode, value: OperationNode): ColumnUpdateNode;
12
+ create(column: OperationNode, value: OperationNode): ColumnUpdateNode;
14
13
  }>;
@@ -14,6 +14,7 @@ export interface CreateIndexNode extends OperationNode {
14
14
  readonly using?: RawNode;
15
15
  readonly ifNotExists?: boolean;
16
16
  readonly where?: WhereNode;
17
+ readonly nullsNotDistinct?: boolean;
17
18
  }
18
19
  /**
19
20
  * @internal
@@ -16,6 +16,7 @@ export interface CreateTableNode extends OperationNode {
16
16
  readonly onCommit?: OnCommitAction;
17
17
  readonly frontModifiers?: ReadonlyArray<OperationNode>;
18
18
  readonly endModifiers?: ReadonlyArray<OperationNode>;
19
+ readonly selectQuery?: OperationNode;
19
20
  }
20
21
  /**
21
22
  * @internal
@@ -85,6 +85,7 @@ import { JSONPathNode } from './json-path-node.js';
85
85
  import { JSONPathLegNode } from './json-path-leg-node.js';
86
86
  import { JSONOperatorChainNode } from './json-operator-chain-node.js';
87
87
  import { TupleNode } from './tuple-node.js';
88
+ import { AddIndexNode } from './add-index-node.js';
88
89
  /**
89
90
  * Transforms an operation node tree into another one.
90
91
  *
@@ -199,6 +200,7 @@ export declare class OperationNodeTransformer {
199
200
  protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode;
200
201
  protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode;
201
202
  protected transformTuple(node: TupleNode): TupleNode;
203
+ protected transformAddIndex(node: AddIndexNode): AddIndexNode;
202
204
  protected transformDataType(node: DataTypeNode): DataTypeNode;
203
205
  protected transformSelectAll(node: SelectAllNode): SelectAllNode;
204
206
  protected transformIdentifier(node: IdentifierNode): IdentifierNode;
@@ -121,6 +121,7 @@ class OperationNodeTransformer {
121
121
  JSONPathLegNode: this.transformJSONPathLeg.bind(this),
122
122
  JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this),
123
123
  TupleNode: this.transformTuple.bind(this),
124
+ AddIndexNode: this.transformAddIndex.bind(this),
124
125
  });
125
126
  transformNode(node) {
126
127
  if (!node) {
@@ -297,6 +298,7 @@ class OperationNodeTransformer {
297
298
  onCommit: node.onCommit,
298
299
  frontModifiers: this.transformNodeList(node.frontModifiers),
299
300
  endModifiers: this.transformNodeList(node.endModifiers),
301
+ selectQuery: this.transformNode(node.selectQuery),
300
302
  });
301
303
  }
302
304
  transformColumnDefinition(node) {
@@ -315,6 +317,7 @@ class OperationNodeTransformer {
315
317
  generated: this.transformNode(node.generated),
316
318
  frontModifiers: this.transformNodeList(node.frontModifiers),
317
319
  endModifiers: this.transformNodeList(node.endModifiers),
320
+ nullsNotDistinct: node.nullsNotDistinct,
318
321
  });
319
322
  }
320
323
  transformAddColumn(node) {
@@ -416,6 +419,7 @@ class OperationNodeTransformer {
416
419
  using: this.transformNode(node.using),
417
420
  ifNotExists: node.ifNotExists,
418
421
  where: this.transformNode(node.where),
422
+ nullsNotDistinct: node.nullsNotDistinct,
419
423
  });
420
424
  }
421
425
  transformList(node) {
@@ -445,6 +449,7 @@ class OperationNodeTransformer {
445
449
  kind: 'UniqueConstraintNode',
446
450
  columns: this.transformNodeList(node.columns),
447
451
  name: this.transformNode(node.name),
452
+ nullsNotDistinct: node.nullsNotDistinct,
448
453
  });
449
454
  }
450
455
  transformForeignKeyConstraint(node) {
@@ -533,6 +538,8 @@ class OperationNodeTransformer {
533
538
  columnAlterations: this.transformNodeList(node.columnAlterations),
534
539
  addConstraint: this.transformNode(node.addConstraint),
535
540
  dropConstraint: this.transformNode(node.dropConstraint),
541
+ addIndex: this.transformNode(node.addIndex),
542
+ dropIndex: this.transformNode(node.dropIndex),
536
543
  });
537
544
  }
538
545
  transformDropColumn(node) {
@@ -765,6 +772,16 @@ class OperationNodeTransformer {
765
772
  values: this.transformNodeList(node.values),
766
773
  });
767
774
  }
775
+ transformAddIndex(node) {
776
+ return (0, require_all_props_js_1.requireAllProps)({
777
+ kind: 'AddIndexNode',
778
+ name: this.transformNode(node.name),
779
+ columns: this.transformNodeList(node.columns),
780
+ unique: node.unique,
781
+ using: this.transformNode(node.using),
782
+ ifNotExists: node.ifNotExists,
783
+ });
784
+ }
768
785
  transformDataType(node) {
769
786
  // An Object.freezed leaf node. No need to clone.
770
787
  return node;
@@ -85,6 +85,7 @@ import { JSONPathNode } from './json-path-node.js';
85
85
  import { JSONPathLegNode } from './json-path-leg-node.js';
86
86
  import { JSONOperatorChainNode } from './json-operator-chain-node.js';
87
87
  import { TupleNode } from './tuple-node.js';
88
+ import { AddIndexNode } from './add-index-node.js';
88
89
  export declare abstract class OperationNodeVisitor {
89
90
  #private;
90
91
  protected readonly nodeStack: OperationNode[];
@@ -176,4 +177,5 @@ export declare abstract class OperationNodeVisitor {
176
177
  protected abstract visitJSONPathLeg(node: JSONPathLegNode): void;
177
178
  protected abstract visitJSONOperatorChain(node: JSONOperatorChainNode): void;
178
179
  protected abstract visitTuple(node: TupleNode): void;
180
+ protected abstract visitAddIndex(node: AddIndexNode): void;
179
181
  }
@@ -94,6 +94,7 @@ class OperationNodeVisitor {
94
94
  JSONPathLegNode: this.visitJSONPathLeg.bind(this),
95
95
  JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this),
96
96
  TupleNode: this.visitTuple.bind(this),
97
+ AddIndexNode: this.visitAddIndex.bind(this),
97
98
  });
98
99
  visitNode = (node) => {
99
100
  this.nodeStack.push(node);
@@ -1,4 +1,4 @@
1
- export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | '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' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode';
1
+ export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | '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' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode' | 'AddIndexNode';
2
2
  export interface OperationNode {
3
3
  readonly kind: OperationNodeKind;
4
4
  }
@@ -1,11 +1,11 @@
1
1
  import { OperationNode } from './operation-node.js';
2
- export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp"];
2
+ export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from"];
3
3
  export declare const ARITHMETIC_OPERATORS: readonly ["+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>"];
4
4
  export declare const JSON_OPERATORS: readonly ["->", "->>"];
5
- export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"];
5
+ export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"];
6
6
  export declare const UNARY_FILTER_OPERATORS: readonly ["exists", "not exists"];
7
7
  export declare const UNARY_OPERATORS: readonly ["not", "-", "exists", "not exists"];
8
- export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"];
8
+ export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"];
9
9
  export type ComparisonOperator = (typeof COMPARISON_OPERATORS)[number];
10
10
  export type ArithmeticOperator = (typeof ARITHMETIC_OPERATORS)[number];
11
11
  export type JSONOperator = (typeof JSON_OPERATORS)[number];
@@ -37,6 +37,8 @@ exports.COMPARISON_OPERATORS = [
37
37
  '!!',
38
38
  '<->',
39
39
  'regexp',
40
+ 'is distinct from',
41
+ 'is not distinct from',
40
42
  ];
41
43
  exports.ARITHMETIC_OPERATORS = [
42
44
  '+',
@@ -5,11 +5,14 @@ export interface UniqueConstraintNode extends OperationNode {
5
5
  readonly kind: 'UniqueConstraintNode';
6
6
  readonly columns: ReadonlyArray<ColumnNode>;
7
7
  readonly name?: IdentifierNode;
8
+ readonly nullsNotDistinct?: boolean;
8
9
  }
10
+ export type UniqueConstraintNodeProps = Omit<Partial<UniqueConstraintNode>, 'kind'>;
9
11
  /**
10
12
  * @internal
11
13
  */
12
14
  export declare const UniqueConstraintNode: Readonly<{
13
15
  is(node: OperationNode): node is UniqueConstraintNode;
14
- create(columns: string[], constraintName?: string): UniqueConstraintNode;
16
+ create(columns: string[], constraintName?: string, nullsNotDistinct?: boolean): UniqueConstraintNode;
17
+ cloneWith(node: UniqueConstraintNode, props: UniqueConstraintNodeProps): UniqueConstraintNode;
15
18
  }>;
@@ -11,11 +11,18 @@ exports.UniqueConstraintNode = (0, object_utils_js_1.freeze)({
11
11
  is(node) {
12
12
  return node.kind === 'UniqueConstraintNode';
13
13
  },
14
- create(columns, constraintName) {
14
+ create(columns, constraintName, nullsNotDistinct) {
15
15
  return (0, object_utils_js_1.freeze)({
16
16
  kind: 'UniqueConstraintNode',
17
17
  columns: (0, object_utils_js_1.freeze)(columns.map(column_node_js_1.ColumnNode.create)),
18
18
  name: constraintName ? identifier_node_js_1.IdentifierNode.create(constraintName) : undefined,
19
+ nullsNotDistinct,
20
+ });
21
+ },
22
+ cloneWith(node, props) {
23
+ return (0, object_utils_js_1.freeze)({
24
+ ...node,
25
+ ...props,
19
26
  });
20
27
  },
21
28
  });
@@ -41,7 +41,7 @@ exports.parseFilterObject = parseFilterObject;
41
41
  function parseFilterList(list, combinator) {
42
42
  const combine = combinator === 'and' ? and_node_js_1.AndNode.create : or_node_js_1.OrNode.create;
43
43
  if (list.length === 0) {
44
- return value_node_js_1.ValueNode.createImmediate(combinator === 'and');
44
+ return binary_operation_node_js_1.BinaryOperationNode.create(value_node_js_1.ValueNode.createImmediate(1), operator_node_js_1.OperatorNode.create('='), value_node_js_1.ValueNode.createImmediate(combinator === 'and' ? 1 : 0));
45
45
  }
46
46
  let node = toOperationNode(list[0]);
47
47
  for (let i = 1; i < list.length; ++i) {
@@ -1,2 +1,12 @@
1
- import { ExtractTypeFromReferenceExpression, ReferenceExpression } from './reference-parser.js';
2
- export type CoalesceReferenceExpressionList<DB, TB extends keyof DB, RE extends unknown[], O = never> = RE extends [] ? O : RE extends [infer L, ...infer R] ? L extends ReferenceExpression<any, any> ? null extends ExtractTypeFromReferenceExpression<DB, TB, L> ? CoalesceReferenceExpressionList<DB, TB, R extends ReferenceExpression<any, any>[] ? R : never, O | ExtractTypeFromReferenceExpression<DB, TB, L>> : Exclude<O, null> | ExtractTypeFromReferenceExpression<DB, TB, L> : never : never;
1
+ import { ExtractTypeFromReferenceExpression } from './reference-parser.js';
2
+ export type ExtractTypeFromCoalesce1<DB, TB extends keyof DB, R1> = ExtractTypeFromReferenceExpression<DB, TB, R1>;
3
+ export type ExtractTypeFromCoalesce2<DB, TB extends keyof DB, R1, R2> = ExtractTypeFromCoalesceValues2<ExtractTypeFromReferenceExpression<DB, TB, R1>, ExtractTypeFromReferenceExpression<DB, TB, R2>>;
4
+ type ExtractTypeFromCoalesceValues2<V1, V2> = null extends V1 ? null extends V2 ? V1 | V2 : NotNull<V1 | V2> : NotNull<V1>;
5
+ export type ExtractTypeFromCoalesce3<DB, TB extends keyof DB, R1, R2, R3> = ExtractTypeFromCoalesceValues3<ExtractTypeFromReferenceExpression<DB, TB, R1>, ExtractTypeFromReferenceExpression<DB, TB, R2>, ExtractTypeFromReferenceExpression<DB, TB, R3>>;
6
+ type ExtractTypeFromCoalesceValues3<V1, V2, V3> = null extends V1 ? null extends V2 ? null extends V3 ? V1 | V2 | V3 : NotNull<V1 | V2 | V3> : NotNull<V1 | V2> : NotNull<V1>;
7
+ export type ExtractTypeFromCoalesce4<DB, TB extends keyof DB, R1, R2, R3, R4> = ExtractTypeFromCoalesceValues4<ExtractTypeFromReferenceExpression<DB, TB, R1>, ExtractTypeFromReferenceExpression<DB, TB, R2>, ExtractTypeFromReferenceExpression<DB, TB, R3>, ExtractTypeFromReferenceExpression<DB, TB, R4>>;
8
+ type ExtractTypeFromCoalesceValues4<V1, V2, V3, V4> = null extends V1 ? null extends V2 ? null extends V3 ? null extends V4 ? V1 | V2 | V3 | V4 : NotNull<V1 | V2 | V3 | V4> : NotNull<V1 | V2 | V3> : NotNull<V1 | V2> : NotNull<V1>;
9
+ export type ExtractTypeFromCoalesce5<DB, TB extends keyof DB, R1, R2, R3, R4, R5> = ExtractTypeFromCoalesceValues5<ExtractTypeFromReferenceExpression<DB, TB, R1>, ExtractTypeFromReferenceExpression<DB, TB, R2>, ExtractTypeFromReferenceExpression<DB, TB, R3>, ExtractTypeFromReferenceExpression<DB, TB, R4>, ExtractTypeFromReferenceExpression<DB, TB, R5>>;
10
+ type ExtractTypeFromCoalesceValues5<V1, V2, V3, V4, V5> = null extends V1 ? null extends V2 ? null extends V3 ? null extends V4 ? null extends V5 ? V1 | V2 | V3 | V4 | V5 : NotNull<V1 | V2 | V3 | V4 | V5> : NotNull<V1 | V2 | V3 | V4> : NotNull<V1 | V2 | V3> : NotNull<V1 | V2> : NotNull<V1>;
11
+ type NotNull<T> = Exclude<T, null>;
12
+ export {};
@@ -16,7 +16,8 @@ export type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyCo
16
16
  export type SimpleReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | DynamicReferenceBuilder<any>;
17
17
  export type ReferenceExpression<DB, TB extends keyof DB> = SimpleReferenceExpression<DB, TB> | ExpressionOrFactory<DB, TB, any>;
18
18
  export type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
19
- export type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE, DV = unknown> = RE extends string ? SelectType<ExtractTypeFromStringReference<DB, TB, RE>> : RE extends SelectQueryBuilderExpression<infer O> ? O[keyof O] | null : RE extends (qb: any) => SelectQueryBuilderExpression<infer O> ? O[keyof O] | null : RE extends Expression<infer O> ? O : RE extends (qb: any) => Expression<infer O> ? O : DV;
19
+ export type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE, DV = unknown> = SelectType<ExtractRawTypeFromReferenceExpression<DB, TB, RE, DV>>;
20
+ export type ExtractRawTypeFromReferenceExpression<DB, TB extends keyof DB, RE, DV = unknown> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends SelectQueryBuilderExpression<infer O> ? O[keyof O] | null : RE extends (qb: any) => SelectQueryBuilderExpression<infer O> ? O[keyof O] | null : RE extends Expression<infer O> ? O : RE extends (qb: any) => Expression<infer O> ? O : DV;
20
21
  export type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string, DV = unknown> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, RE> : DV;
21
22
  export type OrderedColumnName<C extends string> = C extends `${string} ${infer O}` ? O extends OrderByDirection ? C : never : C;
22
23
  export type ExtractColumnNameFromOrderedColumnName<C extends string> = C extends `${infer CL} ${infer O}` ? O extends OrderByDirection ? CL : never : C;
@@ -2,9 +2,12 @@ import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
2
2
  import { ExpressionBuilder } from '../expression/expression-builder.js';
3
3
  import { UpdateKeys, UpdateType } from '../util/column-type.js';
4
4
  import { ValueExpression } from './value-parser.js';
5
+ import { ExtractRawTypeFromReferenceExpression, ReferenceExpression } from './reference-parser.js';
5
6
  export type UpdateObject<DB, TB extends keyof DB, UT extends keyof DB = TB> = {
6
7
  [C in UpdateKeys<DB[UT]>]?: ValueExpression<DB, TB, UpdateType<DB[UT][C]>> | undefined;
7
8
  };
8
9
  export type UpdateObjectFactory<DB, TB extends keyof DB, UT extends keyof DB> = (eb: ExpressionBuilder<DB, TB>) => UpdateObject<DB, TB, UT>;
9
- export type UpdateExpression<DB, TB extends keyof DB, UT extends keyof DB = TB> = UpdateObject<DB, TB, UT> | UpdateObjectFactory<DB, TB, UT>;
10
- export declare function parseUpdateExpression(update: UpdateExpression<any, any, any>): ReadonlyArray<ColumnUpdateNode>;
10
+ export type UpdateObjectExpression<DB, TB extends keyof DB, UT extends keyof DB = TB> = UpdateObject<DB, TB, UT> | UpdateObjectFactory<DB, TB, UT>;
11
+ export type ExtractUpdateTypeFromReferenceExpression<DB, TB extends keyof DB, RE, DV = unknown> = UpdateType<ExtractRawTypeFromReferenceExpression<DB, TB, RE, DV>>;
12
+ export declare function parseUpdate(...args: [UpdateObjectExpression<any, any, any>] | [ReferenceExpression<any, any>, ValueExpression<any, any, any>]): ReadonlyArray<ColumnUpdateNode>;
13
+ export declare function parseUpdateObjectExpression(update: UpdateObjectExpression<any, any, any>): ReadonlyArray<ColumnUpdateNode>;
@@ -1,12 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseUpdateExpression = void 0;
3
+ exports.parseUpdateObjectExpression = exports.parseUpdate = void 0;
4
4
  const column_node_js_1 = require("../operation-node/column-node.js");
5
5
  const column_update_node_js_1 = require("../operation-node/column-update-node.js");
6
6
  const expression_builder_js_1 = require("../expression/expression-builder.js");
7
7
  const object_utils_js_1 = require("../util/object-utils.js");
8
8
  const value_parser_js_1 = require("./value-parser.js");
9
- function parseUpdateExpression(update) {
9
+ const reference_parser_js_1 = require("./reference-parser.js");
10
+ function parseUpdate(...args) {
11
+ if (args.length === 2) {
12
+ return [
13
+ column_update_node_js_1.ColumnUpdateNode.create((0, reference_parser_js_1.parseReferenceExpression)(args[0]), (0, value_parser_js_1.parseValueExpression)(args[1])),
14
+ ];
15
+ }
16
+ return parseUpdateObjectExpression(args[0]);
17
+ }
18
+ exports.parseUpdate = parseUpdate;
19
+ function parseUpdateObjectExpression(update) {
10
20
  const updateObj = (0, object_utils_js_1.isFunction)(update) ? update((0, expression_builder_js_1.expressionBuilder)()) : update;
11
21
  return Object.entries(updateObj)
12
22
  .filter(([_, value]) => value !== undefined)
@@ -14,4 +24,4 @@ function parseUpdateExpression(update) {
14
24
  return column_update_node_js_1.ColumnUpdateNode.create(column_node_js_1.ColumnNode.create(key), (0, value_parser_js_1.parseValueExpression)(value));
15
25
  });
16
26
  }
17
- exports.parseUpdateExpression = parseUpdateExpression;
27
+ exports.parseUpdateObjectExpression = parseUpdateObjectExpression;
@@ -116,8 +116,8 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
116
116
  * from "person"
117
117
  * ```
118
118
  */
119
- filterWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): AggregateFunctionBuilder<DB, TB, O>;
120
- filterWhere(expression: ExpressionOrFactory<DB, TB, SqlBool>): AggregateFunctionBuilder<DB, TB, O>;
119
+ filterWhere<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): AggregateFunctionBuilder<DB, TB, O>;
120
+ filterWhere<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): AggregateFunctionBuilder<DB, TB, O>;
121
121
  /**
122
122
  * Adds a `filter` clause with a nested `where` clause after the function, where
123
123
  * both sides of the operator are references to columns.
@@ -150,7 +150,7 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
150
150
  * from "person"
151
151
  * ```
152
152
  */
153
- filterWhereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
153
+ filterWhereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): AggregateFunctionBuilder<DB, TB, O>;
154
154
  /**
155
155
  * Adds an `over` clause (window functions) after the function.
156
156
  *
@@ -239,4 +239,4 @@ export declare class AliasedAggregateFunctionBuilder<DB, TB extends keyof DB, O
239
239
  export interface AggregateFunctionBuilderProps {
240
240
  aggregateFunctionNode: AggregateFunctionNode;
241
241
  }
242
- export type OverBuilderCallback<DB, TB extends keyof DB> = (builder: OverBuilder<DB, TB>) => OverBuilder<DB, TB>;
242
+ export type OverBuilderCallback<DB, TB extends keyof DB> = (builder: OverBuilder<DB, TB>) => OverBuilder<any, any>;
@@ -3,6 +3,7 @@ import { ExpressionWrapper } from '../expression/expression-wrapper.js';
3
3
  import { ReferenceExpression } from '../parser/reference-parser.js';
4
4
  import { CaseNode } from '../operation-node/case-node.js';
5
5
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
6
+ import { ExtractTypeFromValueExpression } from '../parser/value-parser.js';
6
7
  import { KyselyTypeError } from '../util/type-error.js';
7
8
  export declare class CaseBuilder<DB, TB extends keyof DB, W = unknown, O = never> implements Whenable<DB, TB, W, O> {
8
9
  #private;
@@ -12,7 +13,7 @@ export declare class CaseBuilder<DB, TB extends keyof DB, W = unknown, O = never
12
13
  *
13
14
  * A `when` call must be followed by a {@link CaseThenBuilder.then} call.
14
15
  */
15
- when<RE extends ReferenceExpression<DB, TB>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): CaseThenBuilder<DB, TB, W, O>;
16
+ when<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: VE): CaseThenBuilder<DB, TB, W, O>;
16
17
  when(expression: Expression<W>): CaseThenBuilder<DB, TB, W, O>;
17
18
  when(value: unknown extends W ? KyselyTypeError<'when(value) is only supported when using case(value)'> : W): CaseThenBuilder<DB, TB, W, O>;
18
19
  }
@@ -28,7 +29,7 @@ export declare class CaseThenBuilder<DB, TB extends keyof DB, W, O> {
28
29
  * A `then` call can be followed by {@link Whenable.when}, {@link CaseWhenBuilder.else},
29
30
  * {@link CaseWhenBuilder.end} or {@link CaseWhenBuilder.endCase} call.
30
31
  */
31
- then<O2>(expression: Expression<O2>): CaseWhenBuilder<DB, TB, W, O | O2>;
32
+ then<E extends Expression<any>>(expression: E): CaseWhenBuilder<DB, TB, W, O | ExtractTypeFromValueExpression<E>>;
32
33
  then<V>(value: V): CaseWhenBuilder<DB, TB, W, O | V>;
33
34
  }
34
35
  export declare class CaseWhenBuilder<DB, TB extends keyof DB, W, O> implements Whenable<DB, TB, W, O>, Endable<DB, TB, O | null> {
@@ -39,7 +40,7 @@ export declare class CaseWhenBuilder<DB, TB extends keyof DB, W, O> implements W
39
40
  *
40
41
  * A `when` call must be followed by a {@link CaseThenBuilder.then} call.
41
42
  */
42
- when<RE extends ReferenceExpression<DB, TB>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): CaseThenBuilder<DB, TB, W, O>;
43
+ when<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: VE): CaseThenBuilder<DB, TB, W, O>;
43
44
  when(expression: Expression<W>): CaseThenBuilder<DB, TB, W, O>;
44
45
  when(value: unknown extends W ? KyselyTypeError<'when(value) is only supported when using case(value)'> : W): CaseThenBuilder<DB, TB, W, O>;
45
46
  /**
@@ -88,7 +89,7 @@ interface Whenable<DB, TB extends keyof DB, W, O> {
88
89
  *
89
90
  * A `when` call must be followed by a {@link CaseThenBuilder.then} call.
90
91
  */
91
- when<RE extends ReferenceExpression<DB, TB>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): CaseThenBuilder<DB, TB, W, O>;
92
+ when<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: VE): CaseThenBuilder<DB, TB, W, O>;
92
93
  when(expression: Expression<W>): CaseThenBuilder<DB, TB, W, O>;
93
94
  when(value: unknown extends W ? KyselyTypeError<'when(value) is only supported when using case(value)'> : W): CaseThenBuilder<DB, TB, W, O>;
94
95
  }
@@ -325,8 +325,8 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
325
325
  * .execute()
326
326
  * ```
327
327
  */
328
- where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): DeleteQueryBuilder<DB, TB, O>;
329
- where(expression: ExpressionOrFactory<DB, TB, SqlBool>): DeleteQueryBuilder<DB, TB, O>;
328
+ where<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): DeleteQueryBuilder<DB, TB, O>;
329
+ where<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): DeleteQueryBuilder<DB, TB, O>;
330
330
  /**
331
331
  * Adds a `where` clause where both sides of the operator are references
332
332
  * to columns.
@@ -378,7 +378,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
378
378
  * ) as "pet_name"
379
379
  * from "person"
380
380
  */
381
- whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
381
+ whereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): DeleteQueryBuilder<DB, TB, O>;
382
382
  /**
383
383
  * Clears all where expressions from the query.
384
384
  *