kysely 0.13.0 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +92 -32
  2. package/dist/cjs/{introspection → dialect}/database-introspector.d.ts +0 -0
  3. package/dist/cjs/{introspection → dialect}/database-introspector.js +0 -0
  4. package/dist/cjs/dialect/dialect.d.ts +1 -1
  5. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +1 -1
  6. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +1 -1
  7. package/dist/cjs/dialect/mysql/mysql-introspector.js +3 -3
  8. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +1 -1
  9. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +1 -1
  10. package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -3
  11. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +1 -1
  12. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  13. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +3 -3
  14. package/dist/cjs/index.d.ts +6 -3
  15. package/dist/cjs/index.js +6 -3
  16. package/dist/cjs/kysely.d.ts +8 -40
  17. package/dist/cjs/kysely.js +8 -40
  18. package/dist/cjs/migration/file-migration-provider.d.ts +52 -0
  19. package/dist/cjs/migration/file-migration-provider.js +52 -0
  20. package/dist/{esm/migration/migration.d.ts → cjs/migration/migrator.d.ts} +159 -134
  21. package/dist/cjs/migration/{migration.js → migrator.js} +166 -57
  22. package/dist/cjs/operation-node/check-constraint-node.d.ts +1 -1
  23. package/dist/cjs/operation-node/check-constraint-node.js +2 -3
  24. package/dist/cjs/operation-node/column-definition-node.d.ts +2 -2
  25. package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
  26. package/dist/cjs/operation-node/generated-node.d.ts +20 -0
  27. package/dist/cjs/operation-node/generated-node.js +31 -0
  28. package/dist/cjs/operation-node/on-conflict-node.d.ts +13 -2
  29. package/dist/cjs/operation-node/on-conflict-node.js +39 -1
  30. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -2
  31. package/dist/cjs/operation-node/operation-node-transformer.js +11 -5
  32. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -2
  33. package/dist/cjs/operation-node/operation-node-visitor.js +1 -1
  34. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  35. package/dist/cjs/parser/insert-values-parser.d.ts +4 -4
  36. package/dist/cjs/parser/insert-values-parser.js +2 -3
  37. package/dist/cjs/parser/reference-parser.d.ts +4 -3
  38. package/dist/cjs/parser/select-parser.d.ts +10 -4
  39. package/dist/cjs/parser/update-set-parser.d.ts +2 -1
  40. package/dist/cjs/query-builder/delete-query-builder.d.ts +2 -4
  41. package/dist/cjs/query-builder/insert-query-builder.d.ts +80 -95
  42. package/dist/cjs/query-builder/insert-query-builder.js +145 -15
  43. package/dist/cjs/query-builder/on-conflict-builder.d.ts +686 -0
  44. package/dist/cjs/query-builder/on-conflict-builder.js +323 -0
  45. package/dist/cjs/query-builder/returning-interface.d.ts +2 -4
  46. package/dist/cjs/query-builder/select-query-builder.d.ts +1 -1
  47. package/dist/cjs/query-builder/update-query-builder.d.ts +2 -4
  48. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -2
  49. package/dist/cjs/query-compiler/default-query-compiler.js +33 -7
  50. package/dist/cjs/query-creator.d.ts +0 -2
  51. package/dist/cjs/query-creator.js +0 -2
  52. package/dist/cjs/schema/alter-table-builder.d.ts +29 -9
  53. package/dist/cjs/schema/alter-table-builder.js +33 -9
  54. package/dist/cjs/schema/column-definition-builder.d.ts +28 -8
  55. package/dist/cjs/schema/column-definition-builder.js +17 -7
  56. package/dist/cjs/schema/create-index-builder.d.ts +3 -2
  57. package/dist/cjs/schema/create-index-builder.js +2 -2
  58. package/dist/cjs/schema/create-table-builder.d.ts +3 -2
  59. package/dist/cjs/schema/create-table-builder.js +2 -2
  60. package/dist/cjs/util/column-type.d.ts +165 -0
  61. package/dist/cjs/util/column-type.js +2 -0
  62. package/dist/cjs/util/private-symbols.d.ts +5 -0
  63. package/dist/cjs/util/private-symbols.js +8 -0
  64. package/dist/cjs/util/type-utils.d.ts +6 -42
  65. package/dist/esm/{introspection → dialect}/database-introspector.d.ts +0 -0
  66. package/dist/esm/{introspection → dialect}/database-introspector.js +0 -0
  67. package/dist/esm/dialect/dialect.d.ts +1 -1
  68. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +1 -1
  69. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +1 -1
  70. package/dist/esm/dialect/mysql/mysql-introspector.js +1 -1
  71. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +1 -1
  72. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +1 -1
  73. package/dist/esm/dialect/postgres/postgres-introspector.js +1 -1
  74. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +1 -1
  75. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  76. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -1
  77. package/dist/esm/index.d.ts +6 -3
  78. package/dist/esm/index.js +6 -3
  79. package/dist/esm/kysely.d.ts +8 -40
  80. package/dist/esm/kysely.js +8 -40
  81. package/dist/esm/migration/file-migration-provider.d.ts +52 -0
  82. package/dist/esm/migration/file-migration-provider.js +48 -0
  83. package/dist/{cjs/migration/migration.d.ts → esm/migration/migrator.d.ts} +159 -134
  84. package/dist/esm/migration/{migration.js → migrator.js} +165 -56
  85. package/dist/esm/operation-node/check-constraint-node.d.ts +1 -1
  86. package/dist/esm/operation-node/check-constraint-node.js +2 -3
  87. package/dist/esm/operation-node/column-definition-node.d.ts +2 -2
  88. package/dist/esm/operation-node/data-type-node.d.ts +1 -1
  89. package/dist/esm/operation-node/generated-node.d.ts +20 -0
  90. package/dist/esm/operation-node/generated-node.js +28 -0
  91. package/dist/esm/operation-node/on-conflict-node.d.ts +13 -2
  92. package/dist/esm/operation-node/on-conflict-node.js +39 -1
  93. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -2
  94. package/dist/esm/operation-node/operation-node-transformer.js +11 -5
  95. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -2
  96. package/dist/esm/operation-node/operation-node-visitor.js +1 -1
  97. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  98. package/dist/esm/parser/insert-values-parser.d.ts +4 -4
  99. package/dist/esm/parser/insert-values-parser.js +2 -3
  100. package/dist/esm/parser/reference-parser.d.ts +4 -3
  101. package/dist/esm/parser/select-parser.d.ts +10 -4
  102. package/dist/esm/parser/update-set-parser.d.ts +2 -1
  103. package/dist/esm/query-builder/delete-query-builder.d.ts +2 -4
  104. package/dist/esm/query-builder/insert-query-builder.d.ts +80 -95
  105. package/dist/esm/query-builder/insert-query-builder.js +145 -15
  106. package/dist/esm/query-builder/on-conflict-builder.d.ts +686 -0
  107. package/dist/esm/query-builder/on-conflict-builder.js +317 -0
  108. package/dist/esm/query-builder/returning-interface.d.ts +2 -4
  109. package/dist/esm/query-builder/select-query-builder.d.ts +1 -1
  110. package/dist/esm/query-builder/update-query-builder.d.ts +2 -4
  111. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -2
  112. package/dist/esm/query-compiler/default-query-compiler.js +33 -7
  113. package/dist/esm/query-creator.d.ts +0 -2
  114. package/dist/esm/query-creator.js +0 -2
  115. package/dist/esm/schema/alter-table-builder.d.ts +29 -9
  116. package/dist/esm/schema/alter-table-builder.js +33 -9
  117. package/dist/esm/schema/column-definition-builder.d.ts +28 -8
  118. package/dist/esm/schema/column-definition-builder.js +17 -7
  119. package/dist/esm/schema/create-index-builder.d.ts +3 -2
  120. package/dist/esm/schema/create-index-builder.js +2 -2
  121. package/dist/esm/schema/create-table-builder.d.ts +3 -2
  122. package/dist/esm/schema/create-table-builder.js +2 -2
  123. package/dist/esm/util/column-type.d.ts +165 -0
  124. package/dist/esm/util/column-type.js +1 -0
  125. package/dist/esm/util/private-symbols.d.ts +5 -0
  126. package/dist/esm/util/private-symbols.js +5 -0
  127. package/dist/esm/util/type-utils.d.ts +6 -42
  128. package/package.json +1 -1
  129. package/dist/cjs/operation-node/generated-always-as-node.d.ts +0 -16
  130. package/dist/cjs/operation-node/generated-always-as-node.js +0 -25
  131. package/dist/cjs/parser/on-conflict-parser.d.ts +0 -10
  132. package/dist/cjs/parser/on-conflict-parser.js +0 -35
  133. package/dist/cjs/util/generated-placeholder.d.ts +0 -3
  134. package/dist/cjs/util/generated-placeholder.js +0 -11
  135. package/dist/esm/operation-node/generated-always-as-node.d.ts +0 -16
  136. package/dist/esm/operation-node/generated-always-as-node.js +0 -22
  137. package/dist/esm/parser/on-conflict-parser.d.ts +0 -10
  138. package/dist/esm/parser/on-conflict-parser.js +0 -30
  139. package/dist/esm/util/generated-placeholder.d.ts +0 -3
  140. package/dist/esm/util/generated-placeholder.js +0 -7
@@ -7,13 +7,14 @@ const insert_query_node_js_1 = require("../operation-node/insert-query-node.js")
7
7
  const query_node_js_1 = require("../operation-node/query-node.js");
8
8
  const update_set_parser_js_1 = require("../parser/update-set-parser.js");
9
9
  const prevent_await_js_1 = require("../util/prevent-await.js");
10
- const on_conflict_parser_js_1 = require("../parser/on-conflict-parser.js");
11
10
  const object_utils_js_1 = require("../util/object-utils.js");
12
11
  const on_duplicate_key_node_js_1 = require("../operation-node/on-duplicate-key-node.js");
13
12
  const insert_result_js_1 = require("./insert-result.js");
14
13
  const no_result_error_js_1 = require("./no-result-error.js");
15
14
  const complex_expression_parser_js_1 = require("../parser/complex-expression-parser.js");
16
15
  const column_node_js_1 = require("../operation-node/column-node.js");
16
+ const on_conflict_builder_js_1 = require("./on-conflict-builder.js");
17
+ const on_conflict_node_js_1 = require("../operation-node/on-conflict-node.js");
17
18
  class InsertQueryBuilder {
18
19
  #props;
19
20
  constructor(props) {
@@ -85,14 +86,6 @@ class InsertQueryBuilder {
85
86
  }),
86
87
  });
87
88
  }
88
- onConflictDoNothing(target) {
89
- return new InsertQueryBuilder({
90
- ...this.#props,
91
- queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
92
- onConflict: (0, on_conflict_parser_js_1.parseOnConflictDoNothing)(target),
93
- }),
94
- });
95
- }
96
89
  /**
97
90
  * Changes an `insert into` query to an `insert ignore into` query.
98
91
  *
@@ -103,7 +96,7 @@ class InsertQueryBuilder {
103
96
  * occurs.
104
97
  *
105
98
  * This is only supported on some dialects like MySQL. On most dialects you should
106
- * use the {@link onConflictDoNothing} method.
99
+ * use the {@link onConflict} method.
107
100
  *
108
101
  * ### Examples
109
102
  *
@@ -122,11 +115,148 @@ class InsertQueryBuilder {
122
115
  }),
123
116
  });
124
117
  }
125
- onConflictUpdate(target, updates) {
118
+ /**
119
+ * Adds an `on conflict` clause to the query.
120
+ *
121
+ * `on conflict` is only supported by some dialects like PostgreSQL and SQLite. On MySQL
122
+ * you can use {@link ignore} and {@link onDuplicateKeyUpdate} to achieve similar results.
123
+ *
124
+ * ### Examples
125
+ *
126
+ * ```ts
127
+ * await db
128
+ * .insertInto('pet')
129
+ * .values({
130
+ * name: 'Catto',
131
+ * species: 'cat',
132
+ * })
133
+ * .onConflict((oc) => oc
134
+ * .column('name')
135
+ * .doUpdateSet({ species: 'hamster' })
136
+ * )
137
+ * .execute()
138
+ * ```
139
+ *
140
+ * The generated SQL (PostgreSQL):
141
+ *
142
+ * ```sql
143
+ * insert into "pet" ("name", "species")
144
+ * values ($1, $2)
145
+ * on conflict ("name")
146
+ * do update set "species" = $3
147
+ * ```
148
+ *
149
+ * You can provide the name of the constraint instead of a column name:
150
+ *
151
+ * ```ts
152
+ * await db
153
+ * .insertInto('pet')
154
+ * .values({
155
+ * name: 'Catto',
156
+ * species: 'cat',
157
+ * })
158
+ * .onConflict((oc) => oc
159
+ * .constraint('pet_name_key')
160
+ * .doUpdateSet({ species: 'hamster' })
161
+ * )
162
+ * .execute()
163
+ * .execute()
164
+ * ```
165
+ *
166
+ * The generated SQL (PostgreSQL):
167
+ *
168
+ * ```sql
169
+ * insert into "pet" ("name", "species")
170
+ * values ($1, $2)
171
+ * on conflict on constraint "pet_name_key"
172
+ * do update set "species" = $3
173
+ * ```
174
+ *
175
+ * You can also specify an expression as the conflict target in case
176
+ * the unique index is an expression index:
177
+ *
178
+ * ```ts
179
+ * await db
180
+ * .insertInto('pet')
181
+ * .values({
182
+ * name: 'Catto',
183
+ * species: 'cat',
184
+ * })
185
+ * .onConflict((oc) => oc
186
+ * .expression(db.raw('lower(name)'))
187
+ * .doUpdateSet({ species: 'hamster' })
188
+ * )
189
+ * .execute()
190
+ * ```
191
+ *
192
+ * The generated SQL (PostgreSQL):
193
+ *
194
+ * ```sql
195
+ * insert into "pet" ("name", "species")
196
+ * values ($1, $2)
197
+ * on conflict (lower(name))
198
+ * do update set "species" = $3
199
+ * ```
200
+ *
201
+ * You can add a filter for the update statement like this:
202
+ *
203
+ * ```ts
204
+ * await db
205
+ * .insertInto('pet')
206
+ * .values({
207
+ * name: 'Catto',
208
+ * species: 'cat',
209
+ * })
210
+ * .onConflict((oc) => oc
211
+ * .column('name')
212
+ * .doUpdateSet({ species: 'hamster' })
213
+ * .where('excluded.name', '!=', 'Catto'')
214
+ * )
215
+ * .execute()
216
+ * ```
217
+ *
218
+ * The generated SQL (PostgreSQL):
219
+ *
220
+ * ```sql
221
+ * insert into "pet" ("name", "species")
222
+ * values ($1, $2)
223
+ * on conflict ("name")
224
+ * do update set "species" = $3
225
+ * where "excluded"."name" != $4
226
+ * ```
227
+ *
228
+ * You can create an `on conflict do nothing` clauses like this:
229
+ *
230
+ * ```ts
231
+ * await db
232
+ * .insertInto('pet')
233
+ * .values({
234
+ * name: 'Catto',
235
+ * species: 'cat',
236
+ * })
237
+ * .onConflict((oc) => oc
238
+ * .column('name')
239
+ * .doNothing()
240
+ * )
241
+ * .execute()
242
+ * ```
243
+ *
244
+ * The generated SQL (PostgreSQL):
245
+ *
246
+ * ```sql
247
+ * insert into "pet" ("name", "species")
248
+ * values ($1, $2)
249
+ * on conflict ("name") do nothing
250
+ * ```
251
+ */
252
+ onConflict(callback) {
126
253
  return new InsertQueryBuilder({
127
254
  ...this.#props,
128
255
  queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
129
- onConflict: (0, on_conflict_parser_js_1.parseOnConflictUpdate)(this.#props.parseContext, target, updates),
256
+ onConflict: callback(new on_conflict_builder_js_1.OnConflictBuilder({
257
+ onConflictNode: on_conflict_node_js_1.OnConflictNode.create(),
258
+ parseContext: this.#props.parseContext,
259
+ })).toOperationNode(),
130
260
  }),
131
261
  });
132
262
  }
@@ -137,7 +267,7 @@ class InsertQueryBuilder {
137
267
  * a duplicate value in a unique index or primary key, an update of the old row occurs.
138
268
  *
139
269
  * This is only implemented by some dialects like MySQL. On most dialects you should
140
- * use {@link onConflictUpdate} instead.
270
+ * use {@link onConflict} instead.
141
271
  *
142
272
  * ### Examples
143
273
  *
@@ -180,9 +310,9 @@ class InsertQueryBuilder {
180
310
  * .selectAll()
181
311
  * .call((qb) => {
182
312
  * if (something) {
183
- * return qb.onConflictDoNothing('something')
313
+ * return qb.onConflict((oc) => oc.column('something').doNothing())
184
314
  * } else {
185
- * return qb.onConflictDoNothing('something_else')
315
+ * return qb.onConflict((oc) => oc.column('something_else').doNothing())
186
316
  * }
187
317
  * })
188
318
  * .execute()