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
@@ -26,20 +26,17 @@ export class QueryCreator {
26
26
  /**
27
27
  * Creates an insert query.
28
28
  *
29
- * The return value of this query is `number | undefined` because of the differences
30
- * between database engines. Most engines (like Mysql) return the auto incrementing
31
- * primary key (if it exists), but some (like postgres) return nothing by default.
32
- * If you are running a database engine like `Mysql` that always returns the primary
33
- * key, you can safely use `!` or the {@link QueryBuilder.castTo | castTo} method
34
- * to cast away the `undefined` from the type.
29
+ * The return value of this query is an instance of {@link InsertResult}. {@link InsertResult}
30
+ * has the {@link InsertResult.insertId | insertId} field that holds the auto incremented id of
31
+ * the inserted row if the db returned one.
35
32
  *
36
33
  * See the {@link QueryBuilder.values | values} method for more info and examples. Also see
37
34
  * the {@link QueryBuilder.returning | returning} method for a way to return columns
38
- * on supported databases like postgres.
35
+ * on supported databases like PostgreSQL.
39
36
  *
40
37
  * @example
41
38
  * ```ts
42
- * const maybePrimaryKey: number | undefined = await db
39
+ * const result = await db
43
40
  * .insertInto('person')
44
41
  * .values({
45
42
  * id: db.generated,
@@ -47,10 +44,12 @@ export class QueryCreator {
47
44
  * last_name: 'Aniston'
48
45
  * })
49
46
  * .executeTakeFirst()
47
+ *
48
+ * console.log(result.insertId)
50
49
  * ```
51
50
  *
52
51
  * @example
53
- * Some databases like postgres support the `returning` method:
52
+ * Some databases like PostgreSQL support the `returning` method:
54
53
  *
55
54
  * ```ts
56
55
  * const { id } = await db
@@ -76,14 +75,18 @@ export class QueryCreator {
76
75
  * Creates a delete query.
77
76
  *
78
77
  * See the {@link QueryBuilder.where} method for examples on how to specify
79
- * a where clause for the delete operation .
78
+ * a where clause for the delete operation.
79
+ *
80
+ * The return value of the query is an instance of {@link DeleteResult}.
80
81
  *
81
82
  * @example
82
83
  * ```ts
83
- * const numAffectedRows = await db
84
+ * const result = await db
84
85
  * .deleteFrom('person')
85
86
  * .where('person.id', '=', 1)
86
87
  * .executeTakeFirst()
88
+ *
89
+ * console.log(result.numDeletedRows)
87
90
  * ```
88
91
  */
89
92
  deleteFrom(table) {
@@ -103,13 +106,17 @@ export class QueryCreator {
103
106
  * See the {@link QueryBuilder.set} method for examples on how to
104
107
  * specify the updates.
105
108
  *
109
+ * The return value of the query is an {@link UpdateResult}.
110
+ *
106
111
  * @example
107
112
  * ```ts
108
- * const numAffectedRows = await db
113
+ * const result = await db
109
114
  * .updateTable('person')
110
115
  * .set({ first_name: 'Jennifer' })
111
116
  * .where('person.id', '=', 1)
112
117
  * .executeTakeFirst()
118
+ *
119
+ * console.log(result.numUpdatedRows)
113
120
  * ```
114
121
  */
115
122
  updateTable(table) {
@@ -167,7 +174,7 @@ export class QueryCreator {
167
174
  * .execute()
168
175
  * ```
169
176
  *
170
- * The generated SQL (postgresql):
177
+ * The generated SQL (PostgreSQL):
171
178
  *
172
179
  * ```sql
173
180
  * select * from "mammals"."pet"
@@ -187,7 +194,7 @@ export class QueryCreator {
187
194
  * .execute()
188
195
  * ```
189
196
  *
190
- * The generated SQL (postgresql):
197
+ * The generated SQL (PostgreSQL):
191
198
  *
192
199
  * ```sql
193
200
  * select "p"."name" from "mammals"."pet" as "p"
@@ -237,7 +244,7 @@ export class QueryCreator {
237
244
  * console.log(person.name)
238
245
  * ```
239
246
  *
240
- * The generated SQL (postgresql):
247
+ * The generated SQL (PostgreSQL):
241
248
  *
242
249
  * ```sql
243
250
  * select concat(first_name, ' ', last_name) as "name"
@@ -295,7 +302,7 @@ export class QueryCreator {
295
302
  * }
296
303
  * ```
297
304
  *
298
- * The generated SQL (postgresql):
305
+ * The generated SQL (PostgreSQL):
299
306
  *
300
307
  * ```sql
301
308
  * select * from "person" where now() - birth_date > interval $1 year
@@ -309,7 +316,8 @@ export class QueryCreator {
309
316
  * Example of creating a completely raw query from scratch:
310
317
  *
311
318
  * ```ts
312
- * const persons = await db.raw<Person>('select p.* from person p').execute()
319
+ * const result = await db.raw<Person>('select p.* from person p').execute()
320
+ * const persons = result.rows
313
321
  * ```
314
322
  *
315
323
  * 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>;
@@ -238,6 +238,18 @@ export class AlterTableAddColumnBuilder {
238
238
  columnBuilder: this.#props.columnBuilder.check(sql),
239
239
  });
240
240
  }
241
+ generatedAlwaysAs(sql) {
242
+ return new AlterTableAddColumnBuilder({
243
+ ...this.#props,
244
+ columnBuilder: this.#props.columnBuilder.generatedAlwaysAs(sql),
245
+ });
246
+ }
247
+ stored() {
248
+ return new AlterTableAddColumnBuilder({
249
+ ...this.#props,
250
+ columnBuilder: this.#props.columnBuilder.stored(),
251
+ });
252
+ }
241
253
  toOperationNode() {
242
254
  return this.#props.executor.transformQuery(AlterTableNode.cloneWith(this.#props.alterTableNode, {
243
255
  addColumn: AddColumnNode.create(this.#props.columnBuilder.toOperationNode()),
@@ -309,6 +321,18 @@ export class AlterTableModifyColumnBuilder {
309
321
  columnBuilder: this.#props.columnBuilder.check(sql),
310
322
  });
311
323
  }
324
+ generatedAlwaysAs(sql) {
325
+ return new AlterTableModifyColumnBuilder({
326
+ ...this.#props,
327
+ columnBuilder: this.#props.columnBuilder.generatedAlwaysAs(sql),
328
+ });
329
+ }
330
+ stored() {
331
+ return new AlterTableModifyColumnBuilder({
332
+ ...this.#props,
333
+ columnBuilder: this.#props.columnBuilder.stored(),
334
+ });
335
+ }
312
336
  toOperationNode() {
313
337
  return this.#props.executor.transformQuery(AlterTableNode.cloneWith(this.#props.alterTableNode, {
314
338
  modifyColumn: 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
  }
@@ -6,6 +6,8 @@ import { parseStringReference } from '../parser/reference-parser.js';
6
6
  import { preventAwait } from '../util/prevent-await.js';
7
7
  import { ColumnDefinitionNode } from '../operation-node/column-definition-node.js';
8
8
  import { parseDefaultValueExpression, } from '../parser/default-value-parser.js';
9
+ import { GeneratedAlwaysAsNode } from '../operation-node/generated-always-as-node.js';
10
+ import { DefaultValueNode } from '../operation-node/default-value-node.js';
9
11
  export class ColumnDefinitionBuilder {
10
12
  #node;
11
13
  constructor(node) {
@@ -52,7 +54,7 @@ export class ColumnDefinitionBuilder {
52
54
  }
53
55
  defaultTo(value) {
54
56
  return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWith(this.#node, {
55
- defaultTo: parseDefaultValueExpression(value),
57
+ defaultTo: DefaultValueNode.create(parseDefaultValueExpression(value)),
56
58
  }));
57
59
  }
58
60
  check(sql) {
@@ -60,6 +62,21 @@ export class ColumnDefinitionBuilder {
60
62
  check: CheckConstraintNode.create(sql),
61
63
  }));
62
64
  }
65
+ generatedAlwaysAs(sql) {
66
+ return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWith(this.#node, {
67
+ generatedAlwaysAs: GeneratedAlwaysAsNode.create(sql),
68
+ }));
69
+ }
70
+ stored() {
71
+ if (!this.#node.generatedAlwaysAs) {
72
+ throw new Error('stored() can only be called after generatedAlwaysAs');
73
+ }
74
+ return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWith(this.#node, {
75
+ generatedAlwaysAs: GeneratedAlwaysAsNode.cloneWith(this.#node.generatedAlwaysAs, {
76
+ stored: true,
77
+ }),
78
+ }));
79
+ }
63
80
  toOperationNode() {
64
81
  return this.#node;
65
82
  }
@@ -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
@@ -38,8 +38,8 @@ export class CreateTableBuilder {
38
38
  * await db.schema
39
39
  * .createTable('person')
40
40
  * .addColumn('id', 'integer', (col) => col.autoIncrement().primaryKey()),
41
- * .addColumn('first_name', 'varchar(50), (col) => col.notNull())
42
- * .addColumn('last_name', 'varchar')
41
+ * .addColumn('first_name', 'varchar(50)', (col) => col.notNull())
42
+ * .addColumn('last_name', 'varchar(255)')
43
43
  * .addColumn('bank_balance', 'numeric(8, 2)')
44
44
  * .addColumn('data', db.raw('customtype'))
45
45
  * .addColumn('parent_id', 'integer', (col) =>
@@ -48,11 +48,10 @@ export class CreateTableBuilder {
48
48
  * ```
49
49
  *
50
50
  * With this method, it's once again good to remember that Kysely just builds the query
51
- * that's as close to the structure of your builder method calls as possible, and doesn't
52
- * provide the same API for all databses. For example, some databases like older MySQL
53
- * don't support `references` statement in the column definition. Instead foreign key
54
- * constraints need to be defined in at the level of the `create table` query. See
55
- * the next example:
51
+ * and doesn't provide the same API for all databses. For example, some databases like
52
+ * older MySQL don't support `references` statement in the column definition. Instead
53
+ * foreign key constraints need to be defined in at the level of the `create table`
54
+ * query. See the next example:
56
55
  *
57
56
  * @example
58
57
  * ```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;
@@ -28,6 +28,17 @@ export class CreateViewBuilder {
28
28
  }),
29
29
  });
30
30
  }
31
+ /**
32
+ * Only implemented on some dialects like SQLite. On most dialects, use {@link orReplace}.
33
+ */
34
+ ifNotExists() {
35
+ return new CreateViewBuilder({
36
+ ...this.#props,
37
+ createViewNode: CreateViewNode.cloneWith(this.#props.createViewNode, {
38
+ ifNotExists: true,
39
+ }),
40
+ });
41
+ }
31
42
  orReplace() {
32
43
  return new CreateViewBuilder({
33
44
  ...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,27 @@
1
+ import { isFunction, isObject } from './object-utils.js';
2
+ export async function importFunction(modulePath) {
3
+ const module = await import(modulePath);
4
+ const errorMessage = `module "${modulePath}" doesn't export a function`;
5
+ if (isFunction(module)) {
6
+ return module;
7
+ }
8
+ else if (isObject(module) && isFunction(module.default)) {
9
+ return module.default;
10
+ }
11
+ throw new Error(errorMessage);
12
+ }
13
+ export async function importNamedFunction(modulePath, exportName) {
14
+ const module = await import(modulePath);
15
+ const errorMessage = `no function export named "${exportName}" found in module "${modulePath}"`;
16
+ if (!isObject(module)) {
17
+ throw new Error(errorMessage);
18
+ }
19
+ if (isFunction(module[exportName])) {
20
+ return module[exportName];
21
+ }
22
+ else if (isObject(module.default) &&
23
+ isFunction(module.default[exportName])) {
24
+ return module.default[exportName];
25
+ }
26
+ throw new Error(errorMessage);
27
+ }
@@ -0,0 +1 @@
1
+ export declare function performanceNow(): number;
@@ -0,0 +1,9 @@
1
+ import { isFunction } from './object-utils.js';
2
+ export function performanceNow() {
3
+ if (typeof performance !== 'undefined' && isFunction(performance.now)) {
4
+ return performance.now();
5
+ }
6
+ else {
7
+ return Date.now();
8
+ }
9
+ }
@@ -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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kysely",
3
- "version": "0.10.0",
3
+ "version": "0.11.2",
4
4
  "description": "Type safe SQL query builder",
5
5
  "repository": {
6
6
  "type": "git",
@@ -38,18 +38,20 @@
38
38
  "@types/node": "^16.11.9"
39
39
  },
40
40
  "devDependencies": {
41
+ "@types/better-sqlite3": "^7.4.1",
41
42
  "@types/chai": "^4.2.22",
42
43
  "@types/chai-subset": "^1.3.3",
43
44
  "@types/mocha": "^9.0.0",
44
45
  "@types/pg": "^8.6.1",
46
+ "better-sqlite3": "^7.4.5",
45
47
  "chai": "^4.3.4",
46
48
  "chai-subset": "^1.6.0",
47
49
  "mocha": "^9.1.3",
48
50
  "mysql2": "^2.3.3",
49
51
  "pg": "^8.7.1",
50
- "prettier": "^2.4.1",
52
+ "prettier": "^2.5.1",
51
53
  "tsd": "^0.19.0",
52
- "typedoc": "^0.22.9",
54
+ "typedoc": "^0.22.10",
53
55
  "typescript": "4.5.2"
54
56
  }
55
57
  }