kysely 0.10.0 → 0.11.2

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 (174) hide show
  1. package/README.md +7 -3
  2. package/dist/cjs/dialect/dialect-adapter.d.ts +3 -2
  3. package/dist/cjs/dialect/mysql/mysql-adapter.js +1 -1
  4. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +3 -3
  5. package/dist/cjs/dialect/mysql/mysql-driver.js +25 -32
  6. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +2 -2
  7. package/dist/cjs/dialect/postgres/postgres-driver.js +8 -19
  8. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +7 -0
  9. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +18 -0
  10. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +64 -0
  11. package/dist/cjs/dialect/sqlite/sqlite-dialect.js +33 -0
  12. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +14 -0
  13. package/dist/cjs/dialect/sqlite/sqlite-driver.js +116 -0
  14. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +7 -0
  15. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +44 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +7 -0
  17. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +19 -0
  18. package/dist/cjs/driver/database-connection.d.ts +2 -2
  19. package/dist/cjs/driver/runtime-driver.js +3 -4
  20. package/dist/cjs/index.d.ts +45 -30
  21. package/dist/cjs/index.js +44 -29
  22. package/dist/cjs/kysely.d.ts +6 -4
  23. package/dist/cjs/kysely.js +6 -4
  24. package/dist/cjs/migration/migration.d.ts +1 -1
  25. package/dist/cjs/migration/migration.js +3 -3
  26. package/dist/cjs/operation-node/alias-node.d.ts +1 -1
  27. package/dist/cjs/operation-node/column-definition-node.d.ts +4 -2
  28. package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
  29. package/dist/cjs/operation-node/default-value-node.d.ts +14 -0
  30. package/dist/cjs/operation-node/default-value-node.js +18 -0
  31. package/dist/cjs/operation-node/generated-always-as-node.d.ts +16 -0
  32. package/dist/cjs/operation-node/generated-always-as-node.js +25 -0
  33. package/dist/cjs/operation-node/having-node.d.ts +4 -8
  34. package/dist/cjs/operation-node/having-node.js +3 -3
  35. package/dist/cjs/operation-node/join-node.d.ts +6 -9
  36. package/dist/cjs/operation-node/join-node.js +10 -7
  37. package/dist/cjs/operation-node/on-node.d.ts +14 -0
  38. package/dist/cjs/operation-node/on-node.js +28 -0
  39. package/dist/cjs/operation-node/operation-node-transformer.d.ts +6 -0
  40. package/dist/cjs/operation-node/operation-node-transformer.js +26 -2
  41. package/dist/cjs/operation-node/operation-node-utils.d.ts +1 -1
  42. package/dist/cjs/operation-node/operation-node-visitor.d.ts +7 -0
  43. package/dist/cjs/operation-node/operation-node-visitor.js +9 -2
  44. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  45. package/dist/cjs/operation-node/query-node.d.ts +3 -3
  46. package/dist/cjs/operation-node/raw-node.d.ts +1 -1
  47. package/dist/cjs/operation-node/select-query-node.d.ts +4 -4
  48. package/dist/cjs/operation-node/where-node.d.ts +4 -8
  49. package/dist/cjs/operation-node/where-node.js +3 -3
  50. package/dist/cjs/parser/filter-parser.d.ts +1 -0
  51. package/dist/cjs/parser/filter-parser.js +49 -52
  52. package/dist/cjs/parser/returning-parser.d.ts +4 -2
  53. package/dist/cjs/parser/select-parser.d.ts +2 -2
  54. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.d.ts +1 -1
  55. package/dist/cjs/query-builder/delete-result.d.ts +5 -0
  56. package/dist/cjs/query-builder/delete-result.js +13 -0
  57. package/dist/cjs/query-builder/expression-builder.d.ts +2 -2
  58. package/dist/cjs/query-builder/expression-builder.js +1 -1
  59. package/dist/cjs/query-builder/function-builder.d.ts +5 -5
  60. package/dist/cjs/query-builder/function-builder.js +3 -3
  61. package/dist/cjs/query-builder/insert-result.d.ts +27 -0
  62. package/dist/cjs/query-builder/insert-result.js +35 -0
  63. package/dist/cjs/query-builder/join-builder.d.ts +3 -0
  64. package/dist/cjs/query-builder/query-builder.d.ts +95 -81
  65. package/dist/cjs/query-builder/query-builder.js +38 -41
  66. package/dist/cjs/query-builder/update-result.d.ts +5 -0
  67. package/dist/cjs/query-builder/update-result.js +13 -0
  68. package/dist/cjs/query-compiler/compiled-query.d.ts +5 -0
  69. package/dist/cjs/query-compiler/compiled-query.js +12 -0
  70. package/dist/cjs/query-compiler/default-query-compiler.d.ts +6 -0
  71. package/dist/cjs/query-compiler/default-query-compiler.js +41 -14
  72. package/dist/cjs/query-creator.d.ts +36 -26
  73. package/dist/cjs/query-creator.js +25 -17
  74. package/dist/cjs/raw-builder/raw-builder.d.ts +1 -1
  75. package/dist/cjs/schema/alter-table-builder.d.ts +4 -0
  76. package/dist/cjs/schema/alter-table-builder.js +24 -0
  77. package/dist/cjs/schema/column-definition-builder.d.ts +41 -0
  78. package/dist/cjs/schema/column-definition-builder.js +18 -1
  79. package/dist/cjs/schema/create-table-builder.d.ts +6 -7
  80. package/dist/cjs/schema/create-table-builder.js +6 -7
  81. package/dist/cjs/schema/create-view-builder.d.ts +4 -0
  82. package/dist/cjs/schema/create-view-builder.js +11 -0
  83. package/dist/cjs/util/dynamic-import.d.ts +2 -0
  84. package/dist/cjs/util/dynamic-import.js +32 -0
  85. package/dist/cjs/util/performance-now.d.ts +1 -0
  86. package/dist/cjs/util/performance-now.js +13 -0
  87. package/dist/cjs/util/type-utils.d.ts +4 -15
  88. package/dist/esm/dialect/dialect-adapter.d.ts +3 -2
  89. package/dist/esm/dialect/mysql/mysql-adapter.js +1 -1
  90. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +3 -3
  91. package/dist/esm/dialect/mysql/mysql-driver.js +26 -33
  92. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +2 -2
  93. package/dist/esm/dialect/postgres/postgres-driver.js +8 -19
  94. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +7 -0
  95. package/dist/esm/dialect/sqlite/sqlite-adapter.js +14 -0
  96. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +64 -0
  97. package/dist/esm/dialect/sqlite/sqlite-dialect.js +29 -0
  98. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +14 -0
  99. package/dist/esm/dialect/sqlite/sqlite-driver.js +112 -0
  100. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +7 -0
  101. package/dist/esm/dialect/sqlite/sqlite-introspector.js +40 -0
  102. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +7 -0
  103. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +15 -0
  104. package/dist/esm/driver/database-connection.d.ts +2 -2
  105. package/dist/esm/driver/runtime-driver.js +3 -4
  106. package/dist/esm/index.d.ts +45 -30
  107. package/dist/esm/index.js +44 -29
  108. package/dist/esm/kysely.d.ts +6 -4
  109. package/dist/esm/kysely.js +6 -4
  110. package/dist/esm/migration/migration.d.ts +1 -1
  111. package/dist/esm/migration/migration.js +3 -3
  112. package/dist/esm/operation-node/alias-node.d.ts +1 -1
  113. package/dist/esm/operation-node/column-definition-node.d.ts +4 -2
  114. package/dist/esm/operation-node/create-view-node.d.ts +1 -0
  115. package/dist/esm/operation-node/default-value-node.d.ts +14 -0
  116. package/dist/esm/operation-node/default-value-node.js +15 -0
  117. package/dist/esm/operation-node/generated-always-as-node.d.ts +16 -0
  118. package/dist/esm/operation-node/generated-always-as-node.js +22 -0
  119. package/dist/esm/operation-node/having-node.d.ts +4 -8
  120. package/dist/esm/operation-node/having-node.js +3 -3
  121. package/dist/esm/operation-node/join-node.d.ts +6 -9
  122. package/dist/esm/operation-node/join-node.js +10 -7
  123. package/dist/esm/operation-node/on-node.d.ts +14 -0
  124. package/dist/esm/operation-node/on-node.js +25 -0
  125. package/dist/esm/operation-node/operation-node-transformer.d.ts +6 -0
  126. package/dist/esm/operation-node/operation-node-transformer.js +26 -2
  127. package/dist/esm/operation-node/operation-node-utils.d.ts +1 -1
  128. package/dist/esm/operation-node/operation-node-visitor.d.ts +7 -0
  129. package/dist/esm/operation-node/operation-node-visitor.js +9 -2
  130. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  131. package/dist/esm/operation-node/query-node.d.ts +3 -3
  132. package/dist/esm/operation-node/raw-node.d.ts +1 -1
  133. package/dist/esm/operation-node/select-query-node.d.ts +4 -4
  134. package/dist/esm/operation-node/where-node.d.ts +4 -8
  135. package/dist/esm/operation-node/where-node.js +3 -3
  136. package/dist/esm/parser/filter-parser.d.ts +1 -0
  137. package/dist/esm/parser/filter-parser.js +48 -52
  138. package/dist/esm/parser/returning-parser.d.ts +4 -2
  139. package/dist/esm/parser/select-parser.d.ts +2 -2
  140. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.d.ts +1 -1
  141. package/dist/esm/query-builder/delete-result.d.ts +5 -0
  142. package/dist/esm/query-builder/delete-result.js +9 -0
  143. package/dist/esm/query-builder/expression-builder.d.ts +2 -2
  144. package/dist/esm/query-builder/expression-builder.js +1 -1
  145. package/dist/esm/query-builder/function-builder.d.ts +5 -5
  146. package/dist/esm/query-builder/function-builder.js +3 -3
  147. package/dist/esm/query-builder/insert-result.d.ts +27 -0
  148. package/dist/esm/query-builder/insert-result.js +31 -0
  149. package/dist/esm/query-builder/join-builder.d.ts +3 -0
  150. package/dist/esm/query-builder/query-builder.d.ts +95 -81
  151. package/dist/esm/query-builder/query-builder.js +38 -41
  152. package/dist/esm/query-builder/update-result.d.ts +5 -0
  153. package/dist/esm/query-builder/update-result.js +9 -0
  154. package/dist/esm/query-compiler/compiled-query.d.ts +5 -0
  155. package/dist/esm/query-compiler/compiled-query.js +11 -1
  156. package/dist/esm/query-compiler/default-query-compiler.d.ts +6 -0
  157. package/dist/esm/query-compiler/default-query-compiler.js +41 -14
  158. package/dist/esm/query-creator.d.ts +36 -26
  159. package/dist/esm/query-creator.js +25 -17
  160. package/dist/esm/raw-builder/raw-builder.d.ts +1 -1
  161. package/dist/esm/schema/alter-table-builder.d.ts +4 -0
  162. package/dist/esm/schema/alter-table-builder.js +24 -0
  163. package/dist/esm/schema/column-definition-builder.d.ts +41 -0
  164. package/dist/esm/schema/column-definition-builder.js +18 -1
  165. package/dist/esm/schema/create-table-builder.d.ts +6 -7
  166. package/dist/esm/schema/create-table-builder.js +6 -7
  167. package/dist/esm/schema/create-view-builder.d.ts +4 -0
  168. package/dist/esm/schema/create-view-builder.js +11 -0
  169. package/dist/esm/util/dynamic-import.d.ts +2 -0
  170. package/dist/esm/util/dynamic-import.js +27 -0
  171. package/dist/esm/util/performance-now.d.ts +1 -0
  172. package/dist/esm/util/performance-now.js +9 -0
  173. package/dist/esm/util/type-utils.d.ts +4 -15
  174. package/package.json +5 -3
@@ -29,20 +29,17 @@ class QueryCreator {
29
29
  /**
30
30
  * Creates an insert query.
31
31
  *
32
- * The return value of this query is `number | undefined` because of the differences
33
- * between database engines. Most engines (like Mysql) return the auto incrementing
34
- * primary key (if it exists), but some (like postgres) return nothing by default.
35
- * If you are running a database engine like `Mysql` that always returns the primary
36
- * key, you can safely use `!` or the {@link QueryBuilder.castTo | castTo} method
37
- * to cast away the `undefined` from the type.
32
+ * The return value of this query is an instance of {@link InsertResult}. {@link InsertResult}
33
+ * has the {@link InsertResult.insertId | insertId} field that holds the auto incremented id of
34
+ * the inserted row if the db returned one.
38
35
  *
39
36
  * See the {@link QueryBuilder.values | values} method for more info and examples. Also see
40
37
  * the {@link QueryBuilder.returning | returning} method for a way to return columns
41
- * on supported databases like postgres.
38
+ * on supported databases like PostgreSQL.
42
39
  *
43
40
  * @example
44
41
  * ```ts
45
- * const maybePrimaryKey: number | undefined = await db
42
+ * const result = await db
46
43
  * .insertInto('person')
47
44
  * .values({
48
45
  * id: db.generated,
@@ -50,10 +47,12 @@ class QueryCreator {
50
47
  * last_name: 'Aniston'
51
48
  * })
52
49
  * .executeTakeFirst()
50
+ *
51
+ * console.log(result.insertId)
53
52
  * ```
54
53
  *
55
54
  * @example
56
- * Some databases like postgres support the `returning` method:
55
+ * Some databases like PostgreSQL support the `returning` method:
57
56
  *
58
57
  * ```ts
59
58
  * const { id } = await db
@@ -79,14 +78,18 @@ class QueryCreator {
79
78
  * Creates a delete query.
80
79
  *
81
80
  * See the {@link QueryBuilder.where} method for examples on how to specify
82
- * a where clause for the delete operation .
81
+ * a where clause for the delete operation.
82
+ *
83
+ * The return value of the query is an instance of {@link DeleteResult}.
83
84
  *
84
85
  * @example
85
86
  * ```ts
86
- * const numAffectedRows = await db
87
+ * const result = await db
87
88
  * .deleteFrom('person')
88
89
  * .where('person.id', '=', 1)
89
90
  * .executeTakeFirst()
91
+ *
92
+ * console.log(result.numDeletedRows)
90
93
  * ```
91
94
  */
92
95
  deleteFrom(table) {
@@ -106,13 +109,17 @@ class QueryCreator {
106
109
  * See the {@link QueryBuilder.set} method for examples on how to
107
110
  * specify the updates.
108
111
  *
112
+ * The return value of the query is an {@link UpdateResult}.
113
+ *
109
114
  * @example
110
115
  * ```ts
111
- * const numAffectedRows = await db
116
+ * const result = await db
112
117
  * .updateTable('person')
113
118
  * .set({ first_name: 'Jennifer' })
114
119
  * .where('person.id', '=', 1)
115
120
  * .executeTakeFirst()
121
+ *
122
+ * console.log(result.numUpdatedRows)
116
123
  * ```
117
124
  */
118
125
  updateTable(table) {
@@ -170,7 +177,7 @@ class QueryCreator {
170
177
  * .execute()
171
178
  * ```
172
179
  *
173
- * The generated SQL (postgresql):
180
+ * The generated SQL (PostgreSQL):
174
181
  *
175
182
  * ```sql
176
183
  * select * from "mammals"."pet"
@@ -190,7 +197,7 @@ class QueryCreator {
190
197
  * .execute()
191
198
  * ```
192
199
  *
193
- * The generated SQL (postgresql):
200
+ * The generated SQL (PostgreSQL):
194
201
  *
195
202
  * ```sql
196
203
  * select "p"."name" from "mammals"."pet" as "p"
@@ -240,7 +247,7 @@ class QueryCreator {
240
247
  * console.log(person.name)
241
248
  * ```
242
249
  *
243
- * The generated SQL (postgresql):
250
+ * The generated SQL (PostgreSQL):
244
251
  *
245
252
  * ```sql
246
253
  * select concat(first_name, ' ', last_name) as "name"
@@ -298,7 +305,7 @@ class QueryCreator {
298
305
  * }
299
306
  * ```
300
307
  *
301
- * The generated SQL (postgresql):
308
+ * The generated SQL (PostgreSQL):
302
309
  *
303
310
  * ```sql
304
311
  * select * from "person" where now() - birth_date > interval $1 year
@@ -312,7 +319,8 @@ class QueryCreator {
312
319
  * Example of creating a completely raw query from scratch:
313
320
  *
314
321
  * ```ts
315
- * const persons = await db.raw<Person>('select p.* from person p').execute()
322
+ * const result = await db.raw<Person>('select p.* from person p').execute()
323
+ * const persons = result.rows
316
324
  * ```
317
325
  *
318
326
  * For a raw query, you need to specify the type of the returned __row__. In
@@ -41,5 +41,5 @@ export interface RawBuilderProps {
41
41
  readonly queryId: QueryId;
42
42
  readonly executor: QueryExecutor;
43
43
  readonly sql: string;
44
- readonly parameters?: any;
44
+ readonly parameters?: ReadonlyArray<unknown>;
45
45
  }
@@ -72,6 +72,8 @@ export declare class AlterTableAddColumnBuilder implements ColumnDefinitionBuild
72
72
  notNull(): AlterTableAddColumnBuilder;
73
73
  defaultTo(value: PrimitiveValue | AnyRawBuilder): AlterTableAddColumnBuilder;
74
74
  check(sql: string): AlterTableAddColumnBuilder;
75
+ generatedAlwaysAs(sql: string): AlterTableAddColumnBuilder;
76
+ stored(): AlterTableAddColumnBuilder;
75
77
  toOperationNode(): AlterTableNode;
76
78
  compile(): CompiledQuery;
77
79
  execute(): Promise<void>;
@@ -91,6 +93,8 @@ export declare class AlterTableModifyColumnBuilder implements ColumnDefinitionBu
91
93
  notNull(): AlterTableModifyColumnBuilder;
92
94
  defaultTo(value: PrimitiveValue | AnyRawBuilder): AlterTableModifyColumnBuilder;
93
95
  check(sql: string): AlterTableModifyColumnBuilder;
96
+ generatedAlwaysAs(sql: string): AlterTableModifyColumnBuilder;
97
+ stored(): AlterTableModifyColumnBuilder;
94
98
  toOperationNode(): AlterTableNode;
95
99
  compile(): CompiledQuery;
96
100
  execute(): Promise<void>;
@@ -244,6 +244,18 @@ class AlterTableAddColumnBuilder {
244
244
  columnBuilder: this.#props.columnBuilder.check(sql),
245
245
  });
246
246
  }
247
+ generatedAlwaysAs(sql) {
248
+ return new AlterTableAddColumnBuilder({
249
+ ...this.#props,
250
+ columnBuilder: this.#props.columnBuilder.generatedAlwaysAs(sql),
251
+ });
252
+ }
253
+ stored() {
254
+ return new AlterTableAddColumnBuilder({
255
+ ...this.#props,
256
+ columnBuilder: this.#props.columnBuilder.stored(),
257
+ });
258
+ }
247
259
  toOperationNode() {
248
260
  return this.#props.executor.transformQuery(alter_table_node_js_1.AlterTableNode.cloneWith(this.#props.alterTableNode, {
249
261
  addColumn: add_column_node_js_1.AddColumnNode.create(this.#props.columnBuilder.toOperationNode()),
@@ -316,6 +328,18 @@ class AlterTableModifyColumnBuilder {
316
328
  columnBuilder: this.#props.columnBuilder.check(sql),
317
329
  });
318
330
  }
331
+ generatedAlwaysAs(sql) {
332
+ return new AlterTableModifyColumnBuilder({
333
+ ...this.#props,
334
+ columnBuilder: this.#props.columnBuilder.generatedAlwaysAs(sql),
335
+ });
336
+ }
337
+ stored() {
338
+ return new AlterTableModifyColumnBuilder({
339
+ ...this.#props,
340
+ columnBuilder: this.#props.columnBuilder.stored(),
341
+ });
342
+ }
319
343
  toOperationNode() {
320
344
  return this.#props.executor.transformQuery(alter_table_node_js_1.AlterTableNode.cloneWith(this.#props.alterTableNode, {
321
345
  modifyColumn: modify_column_node_js_1.ModifyColumnNode.create(this.#props.columnBuilder.toOperationNode()),
@@ -40,10 +40,19 @@ export interface ColumnDefinitionBuilderInterface<R> {
40
40
  * column definition (like MySQL 5) you need to call the table level
41
41
  * {@link TableBuilder.addForeignKeyConstraint} method instead.
42
42
  *
43
+ * @example
44
+ * ```ts
45
+ * col.references('person.id').onDelete('cascade')
46
+ * ```
43
47
  */
44
48
  onDelete(onDelete: OnModifyForeignAction): R;
45
49
  /**
46
50
  * Adds an `on update` constraint for the foreign key column.
51
+ *
52
+ * @example
53
+ * ```ts
54
+ * col.references('person.id').onUpdate('cascade')
55
+ * ```
47
56
  */
48
57
  onUpdate(onUpdate: OnModifyForeignAction): R;
49
58
  /**
@@ -78,6 +87,36 @@ export interface ColumnDefinitionBuilderInterface<R> {
78
87
  * ```
79
88
  */
80
89
  check(sql: string): R;
90
+ /**
91
+ * Makes the column a generated column using a `generated always as` statement.
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * db.schema
96
+ * .createTable('person')
97
+ * .addColumn('full_name', 'varchar(255)',
98
+ * (col) => col.generatedAlwaysAs("concat(first_name, ' ', last_name)")
99
+ * )
100
+ * .execute()
101
+ * ```
102
+ */
103
+ generatedAlwaysAs(sql: string): R;
104
+ /**
105
+ * Makes a generated column stored instead of virtual. This method can only
106
+ * be used with {@link generatedAlwaysAs}
107
+ *
108
+ * @example
109
+ * ```ts
110
+ * db.schema
111
+ * .createTable('person')
112
+ * .addColumn('full_name', 'varchar(255)', (col) => col
113
+ * .generatedAlwaysAs("concat(first_name, ' ', last_name)")
114
+ * .stored()
115
+ * )
116
+ * .execute()
117
+ * ```
118
+ */
119
+ stored(): R;
81
120
  }
82
121
  export declare class ColumnDefinitionBuilder implements ColumnDefinitionBuilderInterface<ColumnDefinitionBuilder>, OperationNodeSource {
83
122
  #private;
@@ -91,5 +130,7 @@ export declare class ColumnDefinitionBuilder implements ColumnDefinitionBuilderI
91
130
  notNull(): ColumnDefinitionBuilder;
92
131
  defaultTo(value: DefaultValueExpression): ColumnDefinitionBuilder;
93
132
  check(sql: string): ColumnDefinitionBuilder;
133
+ generatedAlwaysAs(sql: string): ColumnDefinitionBuilder;
134
+ stored(): ColumnDefinitionBuilder;
94
135
  toOperationNode(): ColumnDefinitionNode;
95
136
  }
@@ -9,6 +9,8 @@ const reference_parser_js_1 = require("../parser/reference-parser.js");
9
9
  const prevent_await_js_1 = require("../util/prevent-await.js");
10
10
  const column_definition_node_js_1 = require("../operation-node/column-definition-node.js");
11
11
  const default_value_parser_js_1 = require("../parser/default-value-parser.js");
12
+ const generated_always_as_node_js_1 = require("../operation-node/generated-always-as-node.js");
13
+ const default_value_node_js_1 = require("../operation-node/default-value-node.js");
12
14
  class ColumnDefinitionBuilder {
13
15
  #node;
14
16
  constructor(node) {
@@ -55,7 +57,7 @@ class ColumnDefinitionBuilder {
55
57
  }
56
58
  defaultTo(value) {
57
59
  return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, {
58
- defaultTo: (0, default_value_parser_js_1.parseDefaultValueExpression)(value),
60
+ defaultTo: default_value_node_js_1.DefaultValueNode.create((0, default_value_parser_js_1.parseDefaultValueExpression)(value)),
59
61
  }));
60
62
  }
61
63
  check(sql) {
@@ -63,6 +65,21 @@ class ColumnDefinitionBuilder {
63
65
  check: check_constraint_node_js_1.CheckConstraintNode.create(sql),
64
66
  }));
65
67
  }
68
+ generatedAlwaysAs(sql) {
69
+ return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, {
70
+ generatedAlwaysAs: generated_always_as_node_js_1.GeneratedAlwaysAsNode.create(sql),
71
+ }));
72
+ }
73
+ stored() {
74
+ if (!this.#node.generatedAlwaysAs) {
75
+ throw new Error('stored() can only be called after generatedAlwaysAs');
76
+ }
77
+ return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, {
78
+ generatedAlwaysAs: generated_always_as_node_js_1.GeneratedAlwaysAsNode.cloneWith(this.#node.generatedAlwaysAs, {
79
+ stored: true,
80
+ }),
81
+ }));
82
+ }
66
83
  toOperationNode() {
67
84
  return this.#node;
68
85
  }
@@ -27,8 +27,8 @@ export declare class CreateTableBuilder<TB extends string, C extends string = ne
27
27
  * await db.schema
28
28
  * .createTable('person')
29
29
  * .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey()),
30
- * .addColumn('first_name', 'varchar(50), (col) => col.notNull())
31
- * .addColumn('last_name', 'varchar')
30
+ * .addColumn('first_name', 'varchar(50)', (col) => col.notNull())
31
+ * .addColumn('last_name', 'varchar(255)')
32
32
  * .addColumn('bank_balance', 'numeric(8, 2)')
33
33
  * .addColumn('data', db.raw('customtype'))
34
34
  * .addColumn('parent_id', 'integer', (col) =>
@@ -37,11 +37,10 @@ export declare class CreateTableBuilder<TB extends string, C extends string = ne
37
37
  * ```
38
38
  *
39
39
  * With this method, it's once again good to remember that Kysely just builds the query
40
- * that's as close to the structure of your builder method calls as possible, and doesn't
41
- * provide the same API for all databses. For example, some databases like older MySQL
42
- * don't support `references` statement in the column definition. Instead foreign key
43
- * constraints need to be defined in at the level of the `create table` query. See
44
- * the next example:
40
+ * and doesn't provide the same API for all databses. For example, some databases like
41
+ * older MySQL don't support `references` statement in the column definition. Instead
42
+ * foreign key constraints need to be defined in at the level of the `create table`
43
+ * query. See the next example:
45
44
  *
46
45
  * @example
47
46
  * ```ts
@@ -41,8 +41,8 @@ class CreateTableBuilder {
41
41
  * await db.schema
42
42
  * .createTable('person')
43
43
  * .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey()),
44
- * .addColumn('first_name', 'varchar(50), (col) => col.notNull())
45
- * .addColumn('last_name', 'varchar')
44
+ * .addColumn('first_name', 'varchar(50)', (col) => col.notNull())
45
+ * .addColumn('last_name', 'varchar(255)')
46
46
  * .addColumn('bank_balance', 'numeric(8, 2)')
47
47
  * .addColumn('data', db.raw('customtype'))
48
48
  * .addColumn('parent_id', 'integer', (col) =>
@@ -51,11 +51,10 @@ class CreateTableBuilder {
51
51
  * ```
52
52
  *
53
53
  * With this method, it's once again good to remember that Kysely just builds the query
54
- * that's as close to the structure of your builder method calls as possible, and doesn't
55
- * provide the same API for all databses. For example, some databases like older MySQL
56
- * don't support `references` statement in the column definition. Instead foreign key
57
- * constraints need to be defined in at the level of the `create table` query. See
58
- * the next example:
54
+ * and doesn't provide the same API for all databses. For example, some databases like
55
+ * older MySQL don't support `references` statement in the column definition. Instead
56
+ * foreign key constraints need to be defined in at the level of the `create table`
57
+ * query. See the next example:
59
58
  *
60
59
  * @example
61
60
  * ```ts
@@ -10,6 +10,10 @@ export declare class CreateViewBuilder implements OperationNodeSource, Compilabl
10
10
  #private;
11
11
  constructor(props: CreateViewBuilderProps);
12
12
  materialized(): CreateViewBuilder;
13
+ /**
14
+ * Only implemented on some dialects like SQLite. On most dialects, use {@link orReplace}.
15
+ */
16
+ ifNotExists(): CreateViewBuilder;
13
17
  orReplace(): CreateViewBuilder;
14
18
  columns(columns: string[]): CreateViewBuilder;
15
19
  as(query: AnyQueryBuilder | AnyRawBuilder): CreateViewBuilder;
@@ -31,6 +31,17 @@ class CreateViewBuilder {
31
31
  }),
32
32
  });
33
33
  }
34
+ /**
35
+ * Only implemented on some dialects like SQLite. On most dialects, use {@link orReplace}.
36
+ */
37
+ ifNotExists() {
38
+ return new CreateViewBuilder({
39
+ ...this.#props,
40
+ createViewNode: create_view_node_js_1.CreateViewNode.cloneWith(this.#props.createViewNode, {
41
+ ifNotExists: true,
42
+ }),
43
+ });
44
+ }
34
45
  orReplace() {
35
46
  return new CreateViewBuilder({
36
47
  ...this.#props,
@@ -0,0 +1,2 @@
1
+ export declare function importFunction<T extends Function>(modulePath: string): Promise<T>;
2
+ export declare function importNamedFunction<T extends Function>(modulePath: string, exportName: string): Promise<T>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.importNamedFunction = exports.importFunction = void 0;
4
+ const object_utils_js_1 = require("./object-utils.js");
5
+ async function importFunction(modulePath) {
6
+ const module = await Promise.resolve().then(() => require(modulePath));
7
+ const errorMessage = `module "${modulePath}" doesn't export a function`;
8
+ if ((0, object_utils_js_1.isFunction)(module)) {
9
+ return module;
10
+ }
11
+ else if ((0, object_utils_js_1.isObject)(module) && (0, object_utils_js_1.isFunction)(module.default)) {
12
+ return module.default;
13
+ }
14
+ throw new Error(errorMessage);
15
+ }
16
+ exports.importFunction = importFunction;
17
+ async function importNamedFunction(modulePath, exportName) {
18
+ const module = await Promise.resolve().then(() => require(modulePath));
19
+ const errorMessage = `no function export named "${exportName}" found in module "${modulePath}"`;
20
+ if (!(0, object_utils_js_1.isObject)(module)) {
21
+ throw new Error(errorMessage);
22
+ }
23
+ if ((0, object_utils_js_1.isFunction)(module[exportName])) {
24
+ return module[exportName];
25
+ }
26
+ else if ((0, object_utils_js_1.isObject)(module.default) &&
27
+ (0, object_utils_js_1.isFunction)(module.default[exportName])) {
28
+ return module.default[exportName];
29
+ }
30
+ throw new Error(errorMessage);
31
+ }
32
+ exports.importNamedFunction = importNamedFunction;
@@ -0,0 +1 @@
1
+ export declare function performanceNow(): number;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.performanceNow = void 0;
4
+ const object_utils_js_1 = require("./object-utils.js");
5
+ function performanceNow() {
6
+ if (typeof performance !== 'undefined' && (0, object_utils_js_1.isFunction)(performance.now)) {
7
+ return performance.now();
8
+ }
9
+ else {
10
+ return Date.now();
11
+ }
12
+ }
13
+ exports.performanceNow = performanceNow;
@@ -1,6 +1,9 @@
1
1
  import { AliasedRawBuilder, RawBuilder } from '../raw-builder/raw-builder.js';
2
2
  import { AliasedQueryBuilder, QueryBuilder } from '../query-builder/query-builder.js';
3
3
  import { ExpressionBuilder } from '../query-builder/expression-builder.js';
4
+ import { InsertResult } from '../query-builder/insert-result.js';
5
+ import { DeleteResult } from '../query-builder/delete-result.js';
6
+ import { UpdateResult } from '../query-builder/update-result.js';
4
7
  /**
5
8
  * Given an object type, extracts the union of all value types.
6
9
  */
@@ -134,25 +137,11 @@ export declare type QueryBuilderFactory<DB, TB extends keyof DB> = (qb: Expressi
134
137
  export declare type AliasedQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedQueryBuilder;
135
138
  export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyRawBuilder;
136
139
  export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedRawBuilder;
137
- export interface InsertResultTypeTag {
138
- /** @internal */
139
- readonly __isInsertResultTypeTag__: true;
140
- }
141
- export interface DeleteResultTypeTag {
142
- /** @internal */
143
- readonly __isDeleteResultTypeTag__: true;
144
- }
145
- export interface UpdateResultTypeTag {
146
- /** @internal */
147
- readonly __isUpdateResultTypeTag__: true;
148
- }
149
140
  export interface GeneratedPlaceholder {
150
141
  /** @internal */
151
142
  readonly __isGeneratedPlaceholder__: true;
152
143
  }
153
- export declare type ManyResultRowType<O> = O extends InsertResultTypeTag ? number | undefined : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O;
154
- export declare type SingleResultRowType<O> = O extends InsertResultTypeTag ? number | undefined : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O | undefined;
155
- export declare type NonEmptySingleResultRowType<O> = O extends InsertResultTypeTag ? number : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O;
144
+ export declare type SingleResultType<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : O | undefined;
156
145
  export declare type UnknownRow = Record<string, unknown>;
157
146
  export declare type Nullable<T> = {
158
147
  [P in keyof T]: T[P] | null;
@@ -24,7 +24,7 @@ export interface DialectAdapter {
24
24
  * it's not possible for two migration processes to run in parallel.
25
25
  *
26
26
  * Most dialects have explicit locks that can be used, like advisory locks
27
- * in postgres and the get_lock function in mysql.
27
+ * in PostgreSQL and the get_lock function in MySQL.
28
28
  *
29
29
  * If the dialect doesn't have explicit locks the {@link MIGRATION_LOCK_TABLE}
30
30
  * created by Kysely can be used instead. {@link MIGRATION_LOCK_TABLE}
@@ -44,7 +44,8 @@ export interface DialectAdapter {
44
44
  *
45
45
  * If `supportsTransactionalDdl` is `true` then the `db` passed to this method
46
46
  * is a transaction inside which the migrations were executed. Otherwise `db`
47
- * is a single connection (session) that was used to execute the migrations.
47
+ * is a single connection (session) that was used to execute the migrations
48
+ * and the `acquireMigrationLock` call.
48
49
  */
49
50
  releaseMigrationLock(db: Kysely<any>): Promise<void>;
50
51
  }
@@ -13,7 +13,7 @@ export class MysqlAdapter {
13
13
  // released when the connection is destroyed (session ends) or when the lock
14
14
  // is released using `release_lock`. This way we know that the lock is either
15
15
  // released by us after successfull or failed migrations OR it's released by
16
- // mysql if the process gets killed for some reason.
16
+ // MySQL if the process gets killed for some reason.
17
17
  await db
18
18
  .raw(`select get_lock('${LOCK_ID}', ${LOCK_TIMEOUT_SECONDS})`)
19
19
  .execute();
@@ -21,7 +21,7 @@ export declare class MysqlDialect implements Dialect {
21
21
  createIntrospector(db: Kysely<any>): DatabaseIntrospector;
22
22
  }
23
23
  /**
24
- * Config for the mysql dialect.
24
+ * Config for the MySQL dialect.
25
25
  *
26
26
  * This interface is equal to `mysql2` library's pool config.
27
27
  *
@@ -137,7 +137,7 @@ export interface MysqlDialectConfig {
137
137
  */
138
138
  trace?: boolean;
139
139
  /**
140
- * Allow multiple mysql statements per query. Be careful with this, it exposes you to SQL injection attacks. (Default: false)
140
+ * Allow multiple MySQL statements per query. Be careful with this, it exposes you to SQL injection attacks. (Default: false)
141
141
  */
142
142
  multipleStatements?: boolean;
143
143
  /**
@@ -186,7 +186,7 @@ export interface MysqlDialectConfig {
186
186
  /**
187
187
  * Called once for each created connection.
188
188
  *
189
- * This is a Kysely specific feature and does not come from the `pg` module.
189
+ * This is a Kysely specific feature and does not come from the `mysql2` module.
190
190
  */
191
191
  onCreateConnection?: (connection: DatabaseConnection) => Promise<void>;
192
192
  }
@@ -1,4 +1,6 @@
1
- import { isFunction, isNumber, isObject } from '../../util/object-utils.js';
1
+ import { CompiledQuery } from '../../query-compiler/compiled-query.js';
2
+ import { importNamedFunction } from '../../util/dynamic-import.js';
3
+ import { isObject } from '../../util/object-utils.js';
2
4
  const PRIVATE_RELEASE_METHOD = Symbol();
3
5
  export class MysqlDriver {
4
6
  #config;
@@ -47,19 +49,16 @@ export class MysqlDriver {
47
49
  }
48
50
  async beginTransaction(connection, settings) {
49
51
  if (settings.isolationLevel) {
50
- // On mysql this sets the isolation level of the next transaction.
51
- await connection.executeQuery({
52
- sql: `set transaction isolation level ${settings.isolationLevel}`,
53
- parameters: [],
54
- });
52
+ // On MySQL this sets the isolation level of the next transaction.
53
+ await connection.executeQuery(CompiledQuery.raw(`set transaction isolation level ${settings.isolationLevel}`));
55
54
  }
56
- await connection.executeQuery({ sql: 'begin', parameters: [] });
55
+ await connection.executeQuery(CompiledQuery.raw('begin'));
57
56
  }
58
57
  async commitTransaction(connection) {
59
- await connection.executeQuery({ sql: 'commit', parameters: [] });
58
+ await connection.executeQuery(CompiledQuery.raw('commit'));
60
59
  }
61
60
  async rollbackTransaction(connection) {
62
- await connection.executeQuery({ sql: 'rollback', parameters: [] });
61
+ await connection.executeQuery(CompiledQuery.raw('rollback'));
63
62
  }
64
63
  async releaseConnection(connection) {
65
64
  const mysqlConnection = connection;
@@ -80,19 +79,10 @@ export class MysqlDriver {
80
79
  }
81
80
  async function importMysqlPoolFactory() {
82
81
  try {
83
- // For this to work with both esm and cjs modules we need
84
- // this hacky crap here.
85
- const mysql = (await import('mysql2'));
86
- if (isFunction(mysql.createPool)) {
87
- return mysql.createPool;
88
- }
89
- else {
90
- // With esm the imported module doesn't match the typings.
91
- return mysql.default.createPool;
92
- }
82
+ return await importNamedFunction('mysql2', 'createPool');
93
83
  }
94
84
  catch (error) {
95
- throw new Error('Mysql client not installed. Please run `npm install mysql2`');
85
+ throw new Error('MySQL client not installed. Please run `npm install mysql2`');
96
86
  }
97
87
  }
98
88
  class MysqlConnection {
@@ -102,19 +92,19 @@ class MysqlConnection {
102
92
  }
103
93
  async executeQuery(compiledQuery) {
104
94
  const result = await this.#executeQuery(compiledQuery);
105
- if (isObject(result) && 'insertId' in result && 'affectedRows' in result) {
106
- if (isNumber(result.insertId) && result.insertId > 0) {
107
- return {
108
- insertedPrimaryKey: result.insertId,
109
- rows: [],
110
- };
111
- }
112
- else if (isNumber(result.affectedRows)) {
113
- return {
114
- numUpdatedOrDeletedRows: result.affectedRows,
115
- rows: [],
116
- };
117
- }
95
+ if (isOkPacket(result)) {
96
+ const { insertId, affectedRows } = result;
97
+ return {
98
+ insertId: insertId !== undefined &&
99
+ insertId !== null &&
100
+ insertId.toString() !== '0'
101
+ ? BigInt(insertId)
102
+ : undefined,
103
+ numUpdatedOrDeletedRows: affectedRows !== undefined && insertId !== null
104
+ ? BigInt(affectedRows)
105
+ : undefined,
106
+ rows: [],
107
+ };
118
108
  }
119
109
  else if (Array.isArray(result)) {
120
110
  return {
@@ -141,3 +131,6 @@ class MysqlConnection {
141
131
  this.#rawConnection.release();
142
132
  }
143
133
  }
134
+ function isOkPacket(obj) {
135
+ return isObject(obj) && 'insertId' in obj && 'affectedRows' in obj;
136
+ }
@@ -27,7 +27,7 @@ export declare class PostgresDialect implements Dialect {
27
27
  createIntrospector(db: Kysely<any>): DatabaseIntrospector;
28
28
  }
29
29
  /**
30
- * Config for the postgres dialect.
30
+ * Config for the PostgreSQL dialect.
31
31
  *
32
32
  * This interface is equal to `pg` library's `Pool` config:
33
33
  *
@@ -91,7 +91,7 @@ export interface PostgresDialectConfig {
91
91
  *
92
92
  * Setting `allowExitOnIdle: true` in the config will allow the node event loop to exit
93
93
  * as soon as all clients in the pool are idle, even if their socket is still open
94
- * to the postgres server. This can be handy in scripts & tests
94
+ * to the PostgreSQL server. This can be handy in scripts & tests
95
95
  * where you don't want to wait for your clients to go idle before your process exits.
96
96
  */
97
97
  allowExitOnIdle?: boolean;