kysely 0.27.1 → 0.27.3

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 (161) hide show
  1. package/dist/cjs/dialect/database-introspector.d.ts +1 -0
  2. package/dist/cjs/dialect/mssql/mssql-introspector.js +13 -2
  3. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  4. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +8 -0
  5. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
  6. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  7. package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
  8. package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -0
  9. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
  10. package/dist/cjs/driver/database-connection.d.ts +1 -1
  11. package/dist/cjs/expression/expression-builder.d.ts +30 -4
  12. package/dist/cjs/expression/expression-builder.js +5 -0
  13. package/dist/cjs/index.d.ts +7 -1
  14. package/dist/cjs/index.js +6 -0
  15. package/dist/cjs/migration/migrator.d.ts +19 -2
  16. package/dist/cjs/migration/migrator.js +77 -43
  17. package/dist/cjs/operation-node/add-index-node.js +1 -1
  18. package/dist/cjs/operation-node/cast-node.d.ts +13 -0
  19. package/dist/cjs/operation-node/cast-node.js +19 -0
  20. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  21. package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
  22. package/dist/cjs/operation-node/data-type-node.js +55 -1
  23. package/dist/cjs/operation-node/delete-query-node.d.ts +4 -0
  24. package/dist/cjs/operation-node/delete-query-node.js +12 -0
  25. package/dist/cjs/operation-node/fetch-node.d.ts +15 -0
  26. package/dist/cjs/operation-node/fetch-node.js +19 -0
  27. package/dist/cjs/operation-node/insert-query-node.d.ts +4 -1
  28. package/dist/cjs/operation-node/insert-query-node.js +5 -0
  29. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  30. package/dist/cjs/operation-node/matched-node.d.ts +13 -0
  31. package/dist/cjs/operation-node/matched-node.js +19 -0
  32. package/dist/cjs/operation-node/merge-query-node.d.ts +25 -0
  33. package/dist/cjs/operation-node/merge-query-node.js +45 -0
  34. package/dist/cjs/operation-node/operation-node-transformer.d.ts +10 -0
  35. package/dist/cjs/operation-node/operation-node-transformer.js +50 -0
  36. package/dist/cjs/operation-node/operation-node-visitor.d.ts +10 -0
  37. package/dist/cjs/operation-node/operation-node-visitor.js +5 -0
  38. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/query-node.d.ts +10 -3
  40. package/dist/cjs/operation-node/query-node.js +15 -1
  41. package/dist/cjs/operation-node/select-query-node.d.ts +5 -0
  42. package/dist/cjs/operation-node/select-query-node.js +6 -0
  43. package/dist/cjs/operation-node/top-node.d.ts +14 -0
  44. package/dist/cjs/operation-node/top-node.js +19 -0
  45. package/dist/cjs/operation-node/update-query-node.d.ts +7 -1
  46. package/dist/cjs/operation-node/update-query-node.js +11 -0
  47. package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
  48. package/dist/cjs/parser/binary-operation-parser.js +2 -2
  49. package/dist/cjs/parser/data-type-parser.js +7 -3
  50. package/dist/cjs/parser/fetch-parser.d.ts +2 -0
  51. package/dist/cjs/parser/fetch-parser.js +18 -0
  52. package/dist/cjs/parser/insert-values-parser.d.ts +3 -3
  53. package/dist/cjs/parser/merge-parser.d.ts +9 -0
  54. package/dist/cjs/parser/merge-parser.js +32 -0
  55. package/dist/cjs/parser/table-parser.d.ts +4 -3
  56. package/dist/cjs/parser/top-parser.d.ts +2 -0
  57. package/dist/cjs/parser/top-parser.js +20 -0
  58. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
  59. package/dist/cjs/query-builder/delete-query-builder.d.ts +99 -0
  60. package/dist/cjs/query-builder/delete-query-builder.js +120 -0
  61. package/dist/cjs/query-builder/insert-query-builder.d.ts +73 -3
  62. package/dist/cjs/query-builder/insert-query-builder.js +242 -0
  63. package/dist/cjs/query-builder/merge-query-builder.d.ts +557 -0
  64. package/dist/cjs/query-builder/merge-query-builder.js +518 -0
  65. package/dist/cjs/query-builder/merge-result.d.ts +4 -0
  66. package/dist/cjs/query-builder/merge-result.js +10 -0
  67. package/dist/cjs/query-builder/select-query-builder.d.ts +102 -7
  68. package/dist/cjs/query-builder/select-query-builder.js +14 -0
  69. package/dist/cjs/query-builder/update-query-builder.d.ts +82 -3
  70. package/dist/cjs/query-builder/update-query-builder.js +98 -0
  71. package/dist/cjs/query-compiler/default-query-compiler.d.ts +10 -0
  72. package/dist/cjs/query-compiler/default-query-compiler.js +94 -10
  73. package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
  74. package/dist/cjs/query-creator.d.ts +40 -2
  75. package/dist/cjs/query-creator.js +9 -0
  76. package/dist/cjs/schema/alter-table-add-index-builder.js +6 -2
  77. package/dist/cjs/schema/column-definition-builder.d.ts +13 -1
  78. package/dist/cjs/schema/column-definition-builder.js +15 -1
  79. package/dist/cjs/util/infer-result.d.ts +2 -1
  80. package/dist/cjs/util/type-utils.d.ts +3 -2
  81. package/dist/esm/dialect/database-introspector.d.ts +1 -0
  82. package/dist/esm/dialect/mssql/mssql-introspector.js +13 -2
  83. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  84. package/dist/esm/dialect/mssql/mssql-query-compiler.js +8 -0
  85. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
  86. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  87. package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
  88. package/dist/esm/dialect/postgres/postgres-introspector.js +2 -0
  89. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
  90. package/dist/esm/driver/database-connection.d.ts +1 -1
  91. package/dist/esm/expression/expression-builder.d.ts +30 -4
  92. package/dist/esm/expression/expression-builder.js +5 -0
  93. package/dist/esm/index.d.ts +7 -1
  94. package/dist/esm/index.js +6 -0
  95. package/dist/esm/migration/migrator.d.ts +19 -2
  96. package/dist/esm/migration/migrator.js +76 -42
  97. package/dist/esm/operation-node/add-index-node.js +1 -1
  98. package/dist/esm/operation-node/cast-node.d.ts +13 -0
  99. package/dist/esm/operation-node/cast-node.js +17 -0
  100. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  101. package/dist/esm/operation-node/data-type-node.d.ts +5 -1
  102. package/dist/esm/operation-node/data-type-node.js +53 -0
  103. package/dist/esm/operation-node/delete-query-node.d.ts +4 -0
  104. package/dist/esm/operation-node/delete-query-node.js +12 -0
  105. package/dist/esm/operation-node/fetch-node.d.ts +15 -0
  106. package/dist/esm/operation-node/fetch-node.js +17 -0
  107. package/dist/esm/operation-node/insert-query-node.d.ts +4 -1
  108. package/dist/esm/operation-node/insert-query-node.js +5 -0
  109. package/dist/esm/operation-node/join-node.d.ts +1 -1
  110. package/dist/esm/operation-node/matched-node.d.ts +13 -0
  111. package/dist/esm/operation-node/matched-node.js +17 -0
  112. package/dist/esm/operation-node/merge-query-node.d.ts +25 -0
  113. package/dist/esm/operation-node/merge-query-node.js +43 -0
  114. package/dist/esm/operation-node/operation-node-transformer.d.ts +10 -0
  115. package/dist/esm/operation-node/operation-node-transformer.js +50 -0
  116. package/dist/esm/operation-node/operation-node-visitor.d.ts +10 -0
  117. package/dist/esm/operation-node/operation-node-visitor.js +5 -0
  118. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  119. package/dist/esm/operation-node/query-node.d.ts +10 -3
  120. package/dist/esm/operation-node/query-node.js +15 -1
  121. package/dist/esm/operation-node/select-query-node.d.ts +5 -0
  122. package/dist/esm/operation-node/select-query-node.js +6 -0
  123. package/dist/esm/operation-node/top-node.d.ts +14 -0
  124. package/dist/esm/operation-node/top-node.js +17 -0
  125. package/dist/esm/operation-node/update-query-node.d.ts +7 -1
  126. package/dist/esm/operation-node/update-query-node.js +11 -0
  127. package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
  128. package/dist/esm/parser/binary-operation-parser.js +2 -2
  129. package/dist/esm/parser/data-type-parser.js +8 -4
  130. package/dist/esm/parser/fetch-parser.d.ts +2 -0
  131. package/dist/esm/parser/fetch-parser.js +15 -0
  132. package/dist/esm/parser/insert-values-parser.d.ts +3 -3
  133. package/dist/esm/parser/merge-parser.d.ts +9 -0
  134. package/dist/esm/parser/merge-parser.js +28 -0
  135. package/dist/esm/parser/table-parser.d.ts +4 -3
  136. package/dist/esm/parser/top-parser.d.ts +2 -0
  137. package/dist/esm/parser/top-parser.js +17 -0
  138. package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
  139. package/dist/esm/query-builder/delete-query-builder.d.ts +99 -0
  140. package/dist/esm/query-builder/delete-query-builder.js +120 -0
  141. package/dist/esm/query-builder/insert-query-builder.d.ts +73 -3
  142. package/dist/esm/query-builder/insert-query-builder.js +242 -0
  143. package/dist/esm/query-builder/merge-query-builder.d.ts +557 -0
  144. package/dist/esm/query-builder/merge-query-builder.js +512 -0
  145. package/dist/esm/query-builder/merge-result.d.ts +4 -0
  146. package/dist/esm/query-builder/merge-result.js +7 -0
  147. package/dist/esm/query-builder/select-query-builder.d.ts +102 -7
  148. package/dist/esm/query-builder/select-query-builder.js +14 -0
  149. package/dist/esm/query-builder/update-query-builder.d.ts +82 -3
  150. package/dist/esm/query-builder/update-query-builder.js +98 -0
  151. package/dist/esm/query-compiler/default-query-compiler.d.ts +10 -0
  152. package/dist/esm/query-compiler/default-query-compiler.js +94 -10
  153. package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
  154. package/dist/esm/query-creator.d.ts +40 -2
  155. package/dist/esm/query-creator.js +10 -1
  156. package/dist/esm/schema/alter-table-add-index-builder.js +7 -3
  157. package/dist/esm/schema/column-definition-builder.d.ts +13 -1
  158. package/dist/esm/schema/column-definition-builder.js +15 -1
  159. package/dist/esm/util/infer-result.d.ts +2 -1
  160. package/dist/esm/util/type-utils.d.ts +3 -2
  161. package/package.json +22 -21
@@ -15,11 +15,172 @@ const expression_parser_js_1 = require("../parser/expression-parser.js");
15
15
  const column_node_js_1 = require("../operation-node/column-node.js");
16
16
  const on_conflict_builder_js_1 = require("./on-conflict-builder.js");
17
17
  const on_conflict_node_js_1 = require("../operation-node/on-conflict-node.js");
18
+ const top_parser_js_1 = require("../parser/top-parser.js");
18
19
  class InsertQueryBuilder {
19
20
  #props;
20
21
  constructor(props) {
21
22
  this.#props = (0, object_utils_js_1.freeze)(props);
22
23
  }
24
+ /**
25
+ * Sets the values to insert for an {@link Kysely.insertInto | insert} query.
26
+ *
27
+ * This method takes an object whose keys are column names and values are
28
+ * values to insert. In addition to the column's type, the values can be
29
+ * raw {@link sql} snippets or select queries.
30
+ *
31
+ * You must provide all fields you haven't explicitly marked as nullable
32
+ * or optional using {@link Generated} or {@link ColumnType}.
33
+ *
34
+ * The return value of an `insert` query is an instance of {@link InsertResult}. The
35
+ * {@link InsertResult.insertId | insertId} field holds the auto incremented primary
36
+ * key if the database returned one.
37
+ *
38
+ * On PostgreSQL and some other dialects, you need to call `returning` to get
39
+ * something out of the query.
40
+ *
41
+ * Also see the {@link expression} method for inserting the result of a select
42
+ * query or any other expression.
43
+ *
44
+ * ### Examples
45
+ *
46
+ * <!-- siteExample("insert", "Single row", 10) -->
47
+ *
48
+ * Insert a single row:
49
+ *
50
+ * ```ts
51
+ * const result = await db
52
+ * .insertInto('person')
53
+ * .values({
54
+ * first_name: 'Jennifer',
55
+ * last_name: 'Aniston',
56
+ * age: 40
57
+ * })
58
+ * .executeTakeFirst()
59
+ *
60
+ * // `insertId` is only available on dialects that
61
+ * // automatically return the id of the inserted row
62
+ * // such as MySQL and SQLite. On PostgreSQL, for example,
63
+ * // you need to add a `returning` clause to the query to
64
+ * // get anything out. See the "returning data" example.
65
+ * console.log(result.insertId)
66
+ * ```
67
+ *
68
+ * The generated SQL (MySQL):
69
+ *
70
+ * ```sql
71
+ * insert into `person` (`first_name`, `last_name`, `age`) values (?, ?, ?)
72
+ * ```
73
+ *
74
+ * <!-- siteExample("insert", "Multiple rows", 20) -->
75
+ *
76
+ * On dialects that support it (for example PostgreSQL) you can insert multiple
77
+ * rows by providing an array. Note that the return value is once again very
78
+ * dialect-specific. Some databases may only return the id of the *last* inserted
79
+ * row and some return nothing at all unless you call `returning`.
80
+ *
81
+ * ```ts
82
+ * await db
83
+ * .insertInto('person')
84
+ * .values([{
85
+ * first_name: 'Jennifer',
86
+ * last_name: 'Aniston',
87
+ * age: 40,
88
+ * }, {
89
+ * first_name: 'Arnold',
90
+ * last_name: 'Schwarzenegger',
91
+ * age: 70,
92
+ * }])
93
+ * .execute()
94
+ * ```
95
+ *
96
+ * The generated SQL (PostgreSQL):
97
+ *
98
+ * ```sql
99
+ * insert into "person" ("first_name", "last_name", "age") values (($1, $2, $3), ($4, $5, $6))
100
+ * ```
101
+ *
102
+ * <!-- siteExample("insert", "Returning data", 30) -->
103
+ *
104
+ * On supported dialects like PostgreSQL you need to chain `returning` to the query to get
105
+ * the inserted row's columns (or any other expression) as the return value. `returning`
106
+ * works just like `select`. Refer to `select` method's examples and documentation for
107
+ * more info.
108
+ *
109
+ * ```ts
110
+ * const result = await db
111
+ * .insertInto('person')
112
+ * .values({
113
+ * first_name: 'Jennifer',
114
+ * last_name: 'Aniston',
115
+ * age: 40,
116
+ * })
117
+ * .returning(['id', 'first_name as name'])
118
+ * .executeTakeFirstOrThrow()
119
+ * ```
120
+ *
121
+ * The generated SQL (PostgreSQL):
122
+ *
123
+ * ```sql
124
+ * insert into "person" ("first_name", "last_name", "age") values ($1, $2, $3) returning "id", "first_name" as "name"
125
+ * ```
126
+ *
127
+ * <!-- siteExample("insert", "Complex values", 40) -->
128
+ *
129
+ * In addition to primitives, the values can also be arbitrary expressions.
130
+ * You can build the expressions by using a callback and calling the methods
131
+ * on the expression builder passed to it:
132
+ *
133
+ * ```ts
134
+ * import { sql } from 'kysely'
135
+ *
136
+ * const ani = "Ani"
137
+ * const ston = "ston"
138
+ *
139
+ * const result = await db
140
+ * .insertInto('person')
141
+ * .values(({ ref, selectFrom, fn }) => ({
142
+ * first_name: 'Jennifer',
143
+ * last_name: sql`concat(${ani}, ${ston})`,
144
+ * middle_name: ref('first_name'),
145
+ * age: selectFrom('person')
146
+ * .select(fn.avg<number>('age')
147
+ * .as('avg_age')),
148
+ * }))
149
+ * .executeTakeFirst()
150
+ * ```
151
+ *
152
+ * The generated SQL (PostgreSQL):
153
+ *
154
+ * ```sql
155
+ * insert into "person" (
156
+ * "first_name",
157
+ * "last_name",
158
+ * "middle_name",
159
+ * "age"
160
+ * )
161
+ * values (
162
+ * $1,
163
+ * concat($2, $3),
164
+ * "first_name",
165
+ * (select avg("age") as "avg_age" from "person")
166
+ * )
167
+ * ```
168
+ *
169
+ * You can also use the callback version of subqueries or raw expressions:
170
+ *
171
+ * ```ts
172
+ * db.with('jennifer', (db) => db
173
+ * .selectFrom('person')
174
+ * .where('first_name', '=', 'Jennifer')
175
+ * .select(['id', 'first_name', 'gender'])
176
+ * .limit(1)
177
+ * ).insertInto('pet').values((eb) => ({
178
+ * owner_id: eb.selectFrom('jennifer').select('id'),
179
+ * name: eb.selectFrom('jennifer').select('first_name'),
180
+ * species: 'cat',
181
+ * }))
182
+ * ```
183
+ */
23
184
  values(insert) {
24
185
  const [columns, values] = (0, insert_values_parser_js_1.parseInsertExpression)(insert);
25
186
  return new InsertQueryBuilder({
@@ -100,6 +261,14 @@ class InsertQueryBuilder {
100
261
  }
101
262
  /**
102
263
  * Creates an `insert into "person" default values` query.
264
+ *
265
+ * ### Examples
266
+ *
267
+ * ```ts
268
+ * await db.insertInto('person')
269
+ * .defaultValues()
270
+ * .execute()
271
+ * ```
103
272
  */
104
273
  defaultValues() {
105
274
  return new InsertQueryBuilder({
@@ -138,6 +307,55 @@ class InsertQueryBuilder {
138
307
  }),
139
308
  });
140
309
  }
310
+ /**
311
+ * Changes an `insert into` query to an `insert top into` query.
312
+ *
313
+ * `top` clause is only supported by some dialects like MS SQL Server.
314
+ *
315
+ * ### Examples
316
+ *
317
+ * Insert the first 5 rows:
318
+ *
319
+ * ```ts
320
+ * await db.insertInto('person')
321
+ * .top(5)
322
+ * .columns(['first_name', 'gender'])
323
+ * .expression(
324
+ * (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
325
+ * )
326
+ * .execute()
327
+ * ```
328
+ *
329
+ * The generated SQL (MS SQL Server):
330
+ *
331
+ * ```sql
332
+ * insert top(5) into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
333
+ * ```
334
+ *
335
+ * Insert the first 50 percent of rows:
336
+ *
337
+ * ```ts
338
+ * await db.insertInto('person')
339
+ * .top(50, 'percent')
340
+ * .columns(['first_name', 'gender'])
341
+ * .expression(
342
+ * (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
343
+ * )
344
+ * .execute()
345
+ * ```
346
+ *
347
+ * The generated SQL (MS SQL Server):
348
+ *
349
+ * ```sql
350
+ * insert top(50) percent into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
351
+ * ```
352
+ */
353
+ top(expression, modifiers) {
354
+ return new InsertQueryBuilder({
355
+ ...this.#props,
356
+ queryNode: query_node_js_1.QueryNode.cloneWithTop(this.#props.queryNode, (0, top_parser_js_1.parseTop)(expression, modifiers)),
357
+ });
358
+ }
141
359
  /**
142
360
  * Adds an `on conflict` clause to the query.
143
361
  *
@@ -337,6 +555,30 @@ class InsertQueryBuilder {
337
555
  queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)()),
338
556
  });
339
557
  }
558
+ /**
559
+ * Clears all `returning` clauses from the query.
560
+ *
561
+ * ### Examples
562
+ *
563
+ * ```ts
564
+ * db.insertInto('person')
565
+ * .values({ first_name: 'James', last_name: 'Smith', age: 42 })
566
+ * .returning(['first_name'])
567
+ * .clearReturning()
568
+ * ```
569
+ *
570
+ * The generated SQL(PostgreSQL):
571
+ *
572
+ * ```sql
573
+ * insert into "person" ("James", "Smith", 42)
574
+ * ```
575
+ */
576
+ clearReturning() {
577
+ return new InsertQueryBuilder({
578
+ ...this.#props,
579
+ queryNode: query_node_js_1.QueryNode.cloneWithoutReturning(this.#props.queryNode),
580
+ });
581
+ }
340
582
  /**
341
583
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
342
584
  * what the provided function returns.