kysely 0.26.3 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/dist/cjs/dialect/dialect-adapter-base.d.ts +8 -0
  2. package/dist/cjs/dialect/dialect-adapter-base.js +3 -0
  3. package/dist/cjs/dialect/dialect-adapter.d.ts +8 -0
  4. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +78 -0
  5. package/dist/cjs/dialect/mssql/mssql-adapter.js +30 -0
  6. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  7. package/dist/cjs/dialect/mssql/mssql-dialect-config.js +2 -0
  8. package/dist/cjs/dialect/mssql/mssql-dialect.d.ts +70 -0
  9. package/dist/cjs/dialect/mssql/mssql-dialect.js +65 -0
  10. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +54 -0
  11. package/dist/cjs/dialect/mssql/mssql-driver.js +268 -0
  12. package/dist/cjs/dialect/mssql/mssql-introspector.d.ts +20 -0
  13. package/dist/cjs/dialect/mssql/mssql-introspector.js +97 -0
  14. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  15. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +64 -0
  16. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  17. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +28 -0
  18. package/dist/cjs/dialect/postgres/postgres-driver.js +1 -1
  19. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  20. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  22. package/dist/cjs/dialect/sqlite/sqlite-driver.js +15 -2
  23. package/dist/cjs/driver/driver.d.ts +1 -1
  24. package/dist/cjs/driver/driver.js +1 -0
  25. package/dist/cjs/driver/runtime-driver.js +5 -1
  26. package/dist/cjs/driver/single-connection-provider.js +7 -8
  27. package/dist/cjs/expression/expression-builder.d.ts +66 -75
  28. package/dist/cjs/expression/expression-builder.js +8 -17
  29. package/dist/cjs/expression/expression-wrapper.d.ts +8 -8
  30. package/dist/cjs/helpers/mssql.d.ts +152 -0
  31. package/dist/cjs/helpers/mssql.js +160 -0
  32. package/dist/cjs/index.d.ts +7 -1
  33. package/dist/cjs/index.js +6 -0
  34. package/dist/cjs/migration/migrator.js +12 -16
  35. package/dist/cjs/operation-node/add-index-node.d.ts +21 -0
  36. package/dist/cjs/operation-node/add-index-node.js +31 -0
  37. package/dist/cjs/operation-node/alter-table-node.d.ts +5 -1
  38. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  39. package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
  40. package/dist/cjs/operation-node/create-index-node.d.ts +1 -0
  41. package/dist/cjs/operation-node/create-table-node.d.ts +1 -0
  42. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  43. package/dist/cjs/operation-node/operation-node-transformer.js +17 -0
  44. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  45. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  46. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  47. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  48. package/dist/cjs/operation-node/operator-node.js +2 -0
  49. package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
  50. package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
  51. package/dist/cjs/parser/binary-operation-parser.js +1 -1
  52. package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
  53. package/dist/cjs/parser/reference-parser.d.ts +2 -1
  54. package/dist/cjs/parser/update-set-parser.d.ts +5 -2
  55. package/dist/cjs/parser/update-set-parser.js +13 -3
  56. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +4 -4
  57. package/dist/cjs/query-builder/case-builder.d.ts +5 -4
  58. package/dist/cjs/query-builder/delete-query-builder.d.ts +3 -3
  59. package/dist/cjs/query-builder/function-module.d.ts +96 -25
  60. package/dist/cjs/query-builder/function-module.js +17 -3
  61. package/dist/cjs/query-builder/having-interface.d.ts +3 -5
  62. package/dist/cjs/query-builder/insert-query-builder.d.ts +27 -9
  63. package/dist/cjs/query-builder/insert-query-builder.js +3 -3
  64. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  65. package/dist/cjs/query-builder/insert-result.js +8 -1
  66. package/dist/cjs/query-builder/json-path-builder.d.ts +3 -2
  67. package/dist/cjs/query-builder/json-path-builder.js +6 -3
  68. package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
  69. package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
  70. package/dist/cjs/query-builder/over-builder.d.ts +2 -2
  71. package/dist/cjs/query-builder/select-query-builder.d.ts +38 -22
  72. package/dist/cjs/query-builder/update-query-builder.d.ts +20 -4
  73. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  74. package/dist/cjs/query-builder/where-interface.d.ts +3 -3
  75. package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
  76. package/dist/cjs/query-compiler/default-query-compiler.js +65 -12
  77. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
  78. package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
  79. package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
  80. package/dist/cjs/schema/alter-table-builder.js +59 -2
  81. package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
  82. package/dist/cjs/schema/column-definition-builder.js +27 -0
  83. package/dist/cjs/schema/create-index-builder.d.ts +23 -0
  84. package/dist/cjs/schema/create-index-builder.js +30 -0
  85. package/dist/cjs/schema/create-table-builder.d.ts +28 -2
  86. package/dist/cjs/schema/create-table-builder.js +38 -3
  87. package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
  88. package/dist/cjs/schema/unique-constraint-builder.js +24 -0
  89. package/dist/cjs/util/log.js +5 -1
  90. package/dist/cjs/util/object-utils.d.ts +1 -1
  91. package/dist/cjs/util/type-utils.d.ts +27 -19
  92. package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
  93. package/dist/esm/dialect/dialect-adapter-base.js +3 -0
  94. package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
  95. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
  96. package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
  97. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  98. package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
  99. package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
  100. package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
  101. package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
  102. package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
  103. package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
  104. package/dist/esm/dialect/mssql/mssql-introspector.js +94 -0
  105. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  106. package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
  107. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  108. package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
  109. package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
  110. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  111. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
  112. package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  113. package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
  114. package/dist/esm/driver/driver.d.ts +1 -1
  115. package/dist/esm/driver/driver.js +1 -0
  116. package/dist/esm/driver/runtime-driver.js +5 -1
  117. package/dist/esm/driver/single-connection-provider.js +7 -8
  118. package/dist/esm/expression/expression-builder.d.ts +66 -75
  119. package/dist/esm/expression/expression-builder.js +10 -19
  120. package/dist/esm/expression/expression-wrapper.d.ts +8 -8
  121. package/dist/esm/helpers/mssql.d.ts +152 -0
  122. package/dist/esm/helpers/mssql.js +155 -0
  123. package/dist/esm/index.d.ts +7 -1
  124. package/dist/esm/index.js +6 -0
  125. package/dist/esm/migration/migrator.js +12 -16
  126. package/dist/esm/operation-node/add-index-node.d.ts +21 -0
  127. package/dist/esm/operation-node/add-index-node.js +29 -0
  128. package/dist/esm/operation-node/alter-table-node.d.ts +5 -1
  129. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  130. package/dist/esm/operation-node/column-update-node.d.ts +2 -3
  131. package/dist/esm/operation-node/create-index-node.d.ts +1 -0
  132. package/dist/esm/operation-node/create-table-node.d.ts +1 -0
  133. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  134. package/dist/esm/operation-node/operation-node-transformer.js +17 -0
  135. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  136. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  137. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  138. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  139. package/dist/esm/operation-node/operator-node.js +2 -0
  140. package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
  141. package/dist/esm/operation-node/unique-constraint-node.js +8 -1
  142. package/dist/esm/parser/binary-operation-parser.js +1 -1
  143. package/dist/esm/parser/coalesce-parser.d.ts +12 -2
  144. package/dist/esm/parser/reference-parser.d.ts +2 -1
  145. package/dist/esm/parser/update-set-parser.d.ts +5 -2
  146. package/dist/esm/parser/update-set-parser.js +10 -1
  147. package/dist/esm/query-builder/aggregate-function-builder.d.ts +4 -4
  148. package/dist/esm/query-builder/case-builder.d.ts +5 -4
  149. package/dist/esm/query-builder/delete-query-builder.d.ts +3 -3
  150. package/dist/esm/query-builder/function-module.d.ts +96 -25
  151. package/dist/esm/query-builder/function-module.js +17 -3
  152. package/dist/esm/query-builder/having-interface.d.ts +3 -5
  153. package/dist/esm/query-builder/insert-query-builder.d.ts +27 -9
  154. package/dist/esm/query-builder/insert-query-builder.js +4 -4
  155. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  156. package/dist/esm/query-builder/insert-result.js +8 -1
  157. package/dist/esm/query-builder/json-path-builder.d.ts +3 -2
  158. package/dist/esm/query-builder/json-path-builder.js +6 -3
  159. package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
  160. package/dist/esm/query-builder/on-conflict-builder.js +2 -7
  161. package/dist/esm/query-builder/over-builder.d.ts +2 -2
  162. package/dist/esm/query-builder/select-query-builder.d.ts +38 -22
  163. package/dist/esm/query-builder/update-query-builder.d.ts +20 -4
  164. package/dist/esm/query-builder/update-query-builder.js +3 -3
  165. package/dist/esm/query-builder/where-interface.d.ts +3 -3
  166. package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
  167. package/dist/esm/query-compiler/default-query-compiler.js +65 -12
  168. package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
  169. package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
  170. package/dist/esm/schema/alter-table-builder.d.ts +41 -1
  171. package/dist/esm/schema/alter-table-builder.js +59 -2
  172. package/dist/esm/schema/column-definition-builder.d.ts +25 -0
  173. package/dist/esm/schema/column-definition-builder.js +27 -0
  174. package/dist/esm/schema/create-index-builder.d.ts +23 -0
  175. package/dist/esm/schema/create-index-builder.js +30 -0
  176. package/dist/esm/schema/create-table-builder.d.ts +28 -2
  177. package/dist/esm/schema/create-table-builder.js +38 -3
  178. package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
  179. package/dist/esm/schema/unique-constraint-builder.js +21 -0
  180. package/dist/esm/util/log.js +5 -1
  181. package/dist/esm/util/object-utils.d.ts +1 -1
  182. package/dist/esm/util/type-utils.d.ts +27 -19
  183. package/helpers/mssql.d.ts +1 -0
  184. package/helpers/mssql.js +1 -0
  185. package/package.json +17 -6
@@ -0,0 +1,143 @@
1
+ /// <reference types="./alter-table-add-index-builder.d.ts" />
2
+ import { AddIndexNode } from '../operation-node/add-index-node.js';
3
+ import { AlterTableNode } from '../operation-node/alter-table-node.js';
4
+ import { RawNode } from '../operation-node/raw-node.js';
5
+ import { parseOrderedColumnName } from '../parser/reference-parser.js';
6
+ import { freeze } from '../util/object-utils.js';
7
+ import { preventAwait } from '../util/prevent-await.js';
8
+ export class AlterTableAddIndexBuilder {
9
+ #props;
10
+ constructor(props) {
11
+ this.#props = freeze(props);
12
+ }
13
+ /**
14
+ * Makes the index unique.
15
+ */
16
+ unique() {
17
+ return new AlterTableAddIndexBuilder({
18
+ ...this.#props,
19
+ node: AlterTableNode.cloneWithTableProps(this.#props.node, {
20
+ addIndex: AddIndexNode.cloneWith(this.#props.node.addIndex, {
21
+ unique: true,
22
+ }),
23
+ }),
24
+ });
25
+ }
26
+ /**
27
+ * Adds a column to the index.
28
+ *
29
+ * Also see {@link columns} for adding multiple columns at once or {@link expression}
30
+ * for specifying an arbitrary expression.
31
+ *
32
+ * ### Examples
33
+ *
34
+ * ```ts
35
+ * await db.schema
36
+ * .alterTable('person')
37
+ * .createIndex('person_first_name_and_age_index')
38
+ * .column('first_name')
39
+ * .column('age desc')
40
+ * .execute()
41
+ * ```
42
+ *
43
+ * The generated SQL (MySQL):
44
+ *
45
+ * ```sql
46
+ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc)
47
+ * ```
48
+ */
49
+ column(column) {
50
+ return new AlterTableAddIndexBuilder({
51
+ ...this.#props,
52
+ node: AlterTableNode.cloneWithTableProps(this.#props.node, {
53
+ addIndex: AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [parseOrderedColumnName(column)]),
54
+ }),
55
+ });
56
+ }
57
+ /**
58
+ * Specifies a list of columns for the index.
59
+ *
60
+ * Also see {@link column} for adding a single column or {@link expression} for
61
+ * specifying an arbitrary expression.
62
+ *
63
+ * ### Examples
64
+ *
65
+ * ```ts
66
+ * await db.schema
67
+ * .alterTable('person')
68
+ * .addIndex('person_first_name_and_age_index')
69
+ * .columns(['first_name', 'age desc'])
70
+ * .execute()
71
+ * ```
72
+ *
73
+ * The generated SQL (MySQL):
74
+ *
75
+ * ```sql
76
+ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc)
77
+ * ```
78
+ */
79
+ columns(columns) {
80
+ return new AlterTableAddIndexBuilder({
81
+ ...this.#props,
82
+ node: AlterTableNode.cloneWithTableProps(this.#props.node, {
83
+ addIndex: AddIndexNode.cloneWithColumns(this.#props.node.addIndex, columns.map(parseOrderedColumnName)),
84
+ }),
85
+ });
86
+ }
87
+ /**
88
+ * Specifies an arbitrary expression for the index.
89
+ *
90
+ * ### Examples
91
+ *
92
+ * ```ts
93
+ * import { sql } from 'kysely'
94
+ *
95
+ * await db.schema
96
+ * .alterTable('person')
97
+ * .addIndex('person_first_name_index')
98
+ * .expression(sql`(first_name < 'Sami')`)
99
+ * .execute()
100
+ * ```
101
+ *
102
+ * The generated SQL (MySQL):
103
+ *
104
+ * ```sql
105
+ * alter table `person` add index `person_first_name_index` ((first_name < 'Sami'))
106
+ * ```
107
+ */
108
+ expression(expression) {
109
+ return new AlterTableAddIndexBuilder({
110
+ ...this.#props,
111
+ node: AlterTableNode.cloneWithTableProps(this.#props.node, {
112
+ addIndex: AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [expression.toOperationNode()]),
113
+ }),
114
+ });
115
+ }
116
+ using(indexType) {
117
+ return new AlterTableAddIndexBuilder({
118
+ ...this.#props,
119
+ node: AlterTableNode.cloneWithTableProps(this.#props.node, {
120
+ addIndex: AddIndexNode.cloneWith(this.#props.node.addIndex, {
121
+ using: RawNode.createWithSql(indexType),
122
+ }),
123
+ }),
124
+ });
125
+ }
126
+ /**
127
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
128
+ * what the provided function returns.
129
+ */
130
+ $call(func) {
131
+ return func(this);
132
+ }
133
+ toOperationNode() {
134
+ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId);
135
+ }
136
+ compile() {
137
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
138
+ }
139
+ async execute() {
140
+ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
141
+ }
142
+ }
143
+ preventAwait(AlterTableAddIndexBuilder, "don't await AlterTableAddIndexBuilder instances directly. To execute the query you need to call `execute`");
@@ -11,6 +11,8 @@ import { AlterColumnBuilderCallback } from './alter-column-builder.js';
11
11
  import { AlterTableExecutor } from './alter-table-executor.js';
12
12
  import { AlterTableAddForeignKeyConstraintBuilder } from './alter-table-add-foreign-key-constraint-builder.js';
13
13
  import { AlterTableDropConstraintBuilder } from './alter-table-drop-constraint-builder.js';
14
+ import { AlterTableAddIndexBuilder } from './alter-table-add-index-builder.js';
15
+ import { UniqueConstraintNodeBuilderCallback } from './unique-constraint-builder.js';
14
16
  /**
15
17
  * This builder can be used to create a `alter table` query.
16
18
  */
@@ -35,7 +37,7 @@ export declare class AlterTableBuilder implements ColumnAlteringInterface {
35
37
  /**
36
38
  * See {@link CreateTableBuilder.addUniqueConstraint}
37
39
  */
38
- addUniqueConstraint(constraintName: string, columns: string[]): AlterTableExecutor;
40
+ addUniqueConstraint(constraintName: string, columns: string[], build?: UniqueConstraintNodeBuilderCallback): AlterTableExecutor;
39
41
  /**
40
42
  * See {@link CreateTableBuilder.addCheckConstraint}
41
43
  */
@@ -53,6 +55,44 @@ export declare class AlterTableBuilder implements ColumnAlteringInterface {
53
55
  */
54
56
  addPrimaryKeyConstraint(constraintName: string, columns: string[]): AlterTableExecutor;
55
57
  dropConstraint(constraintName: string): AlterTableDropConstraintBuilder;
58
+ /**
59
+ * This can be used to add index to table.
60
+ *
61
+ * ### Examples
62
+ *
63
+ * ```ts
64
+ * db.schema.alterTable('person')
65
+ * .addIndex('person_email_index')
66
+ * .column('email')
67
+ * .unique()
68
+ * .execute()
69
+ * ```
70
+ *
71
+ * The generated SQL (MySQL):
72
+ *
73
+ * ```sql
74
+ * alter table `person` add unique index `person_email_index` (`email`)
75
+ * ```
76
+ */
77
+ addIndex(indexName: string): AlterTableAddIndexBuilder;
78
+ /**
79
+ * This can be used to drop index from table.
80
+ *
81
+ * ### Examples
82
+ *
83
+ * ```ts
84
+ * db.schema.alterTable('person')
85
+ * .dropIndex('person_email_index')
86
+ * .execute()
87
+ * ```
88
+ *
89
+ * The generated SQL (MySQL):
90
+ *
91
+ * ```sql
92
+ * alter table `person` drop index `test_first_name_index`
93
+ * ```
94
+ */
95
+ dropIndex(indexName: string): AlterTableExecutor;
56
96
  /**
57
97
  * Calls the given function passing `this` as the only argument.
58
98
  *
@@ -23,6 +23,10 @@ import { AlterTableExecutor } from './alter-table-executor.js';
23
23
  import { AlterTableAddForeignKeyConstraintBuilder } from './alter-table-add-foreign-key-constraint-builder.js';
24
24
  import { AlterTableDropConstraintBuilder } from './alter-table-drop-constraint-builder.js';
25
25
  import { PrimaryConstraintNode } from '../operation-node/primary-constraint-node.js';
26
+ import { DropIndexNode } from '../operation-node/drop-index-node.js';
27
+ import { AddIndexNode } from '../operation-node/add-index-node.js';
28
+ import { AlterTableAddIndexBuilder } from './alter-table-add-index-builder.js';
29
+ import { UniqueConstraintNodeBuilder, } from './unique-constraint-builder.js';
26
30
  /**
27
31
  * This builder can be used to create a `alter table` query.
28
32
  */
@@ -83,11 +87,12 @@ export class AlterTableBuilder {
83
87
  /**
84
88
  * See {@link CreateTableBuilder.addUniqueConstraint}
85
89
  */
86
- addUniqueConstraint(constraintName, columns) {
90
+ addUniqueConstraint(constraintName, columns, build = noop) {
91
+ const uniqueConstraintBuilder = build(new UniqueConstraintNodeBuilder(UniqueConstraintNode.create(columns, constraintName)));
87
92
  return new AlterTableExecutor({
88
93
  ...this.#props,
89
94
  node: AlterTableNode.cloneWithTableProps(this.#props.node, {
90
- addConstraint: AddConstraintNode.create(UniqueConstraintNode.create(columns, constraintName)),
95
+ addConstraint: AddConstraintNode.create(uniqueConstraintBuilder.toOperationNode()),
91
96
  }),
92
97
  });
93
98
  }
@@ -134,6 +139,58 @@ export class AlterTableBuilder {
134
139
  }),
135
140
  });
136
141
  }
142
+ /**
143
+ * This can be used to add index to table.
144
+ *
145
+ * ### Examples
146
+ *
147
+ * ```ts
148
+ * db.schema.alterTable('person')
149
+ * .addIndex('person_email_index')
150
+ * .column('email')
151
+ * .unique()
152
+ * .execute()
153
+ * ```
154
+ *
155
+ * The generated SQL (MySQL):
156
+ *
157
+ * ```sql
158
+ * alter table `person` add unique index `person_email_index` (`email`)
159
+ * ```
160
+ */
161
+ addIndex(indexName) {
162
+ return new AlterTableAddIndexBuilder({
163
+ ...this.#props,
164
+ node: AlterTableNode.cloneWithTableProps(this.#props.node, {
165
+ addIndex: AddIndexNode.create(indexName),
166
+ }),
167
+ });
168
+ }
169
+ /**
170
+ * This can be used to drop index from table.
171
+ *
172
+ * ### Examples
173
+ *
174
+ * ```ts
175
+ * db.schema.alterTable('person')
176
+ * .dropIndex('person_email_index')
177
+ * .execute()
178
+ * ```
179
+ *
180
+ * The generated SQL (MySQL):
181
+ *
182
+ * ```sql
183
+ * alter table `person` drop index `test_first_name_index`
184
+ * ```
185
+ */
186
+ dropIndex(indexName) {
187
+ return new AlterTableExecutor({
188
+ ...this.#props,
189
+ node: AlterTableNode.cloneWithTableProps(this.#props.node, {
190
+ dropIndex: DropIndexNode.create(indexName),
191
+ }),
192
+ });
193
+ }
137
194
  /**
138
195
  * Calls the given function passing `this` as the only argument.
139
196
  *
@@ -183,6 +183,31 @@ export declare class ColumnDefinitionBuilder implements OperationNodeSource {
183
183
  * ```
184
184
  */
185
185
  modifyFront(modifier: Expression<any>): ColumnDefinitionBuilder;
186
+ /**
187
+ * Adds `nulls not distinct` specifier.
188
+ * Should be used with `unique` constraint.
189
+ *
190
+ * This only works on some dialects like PostgreSQL.
191
+ *
192
+ * ### Examples
193
+ *
194
+ * ```ts
195
+ * db.schema.createTable('person')
196
+ * .addColumn('id', 'integer', col => col.primaryKey())
197
+ * .addColumn('first_name', 'varchar(30)', col => col.unique().nullsNotDistinct())
198
+ * .execute()
199
+ * ```
200
+ *
201
+ * The generated SQL (PostgreSQL):
202
+ *
203
+ * ```sql
204
+ * create table "person" (
205
+ * "id" integer primary key,
206
+ * "first_name" varchar(30) unique nulls not distinct
207
+ * )
208
+ * ```
209
+ */
210
+ nullsNotDistinct(): ColumnDefinitionBuilder;
186
211
  /**
187
212
  * This can be used to add any additional SQL to the end of the column definition.
188
213
  *
@@ -256,6 +256,33 @@ export class ColumnDefinitionBuilder {
256
256
  modifyFront(modifier) {
257
257
  return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWithFrontModifier(this.#node, modifier.toOperationNode()));
258
258
  }
259
+ /**
260
+ * Adds `nulls not distinct` specifier.
261
+ * Should be used with `unique` constraint.
262
+ *
263
+ * This only works on some dialects like PostgreSQL.
264
+ *
265
+ * ### Examples
266
+ *
267
+ * ```ts
268
+ * db.schema.createTable('person')
269
+ * .addColumn('id', 'integer', col => col.primaryKey())
270
+ * .addColumn('first_name', 'varchar(30)', col => col.unique().nullsNotDistinct())
271
+ * .execute()
272
+ * ```
273
+ *
274
+ * The generated SQL (PostgreSQL):
275
+ *
276
+ * ```sql
277
+ * create table "person" (
278
+ * "id" integer primary key,
279
+ * "first_name" varchar(30) unique nulls not distinct
280
+ * )
281
+ * ```
282
+ */
283
+ nullsNotDistinct() {
284
+ return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWith(this.#node, { nullsNotDistinct: true }));
285
+ }
259
286
  /**
260
287
  * This can be used to add any additional SQL to the end of the column definition.
261
288
  *
@@ -22,6 +22,29 @@ export declare class CreateIndexBuilder<C = never> implements OperationNodeSourc
22
22
  * Makes the index unique.
23
23
  */
24
24
  unique(): CreateIndexBuilder<C>;
25
+ /**
26
+ * Adds `nulls not distinct` specifier to index.
27
+ * This only works on some dialects like PostgreSQL.
28
+ *
29
+ * ### Examples
30
+ *
31
+ * ```ts
32
+ * db.schema.createIndex('person_first_name_index')
33
+ * .on('person')
34
+ * .column('first_name')
35
+ * .nullsNotDistinct()
36
+ * .execute()
37
+ * ```
38
+ *
39
+ * The generated SQL (PostgreSQL):
40
+ *
41
+ * ```sql
42
+ * create index "person_first_name_index"
43
+ * on "test" ("first_name")
44
+ * nulls not distinct;
45
+ * ```
46
+ */
47
+ nullsNotDistinct(): CreateIndexBuilder<C>;
25
48
  /**
26
49
  * Specifies the table for the index.
27
50
  */
@@ -37,6 +37,36 @@ export class CreateIndexBuilder {
37
37
  }),
38
38
  });
39
39
  }
40
+ /**
41
+ * Adds `nulls not distinct` specifier to index.
42
+ * This only works on some dialects like PostgreSQL.
43
+ *
44
+ * ### Examples
45
+ *
46
+ * ```ts
47
+ * db.schema.createIndex('person_first_name_index')
48
+ * .on('person')
49
+ * .column('first_name')
50
+ * .nullsNotDistinct()
51
+ * .execute()
52
+ * ```
53
+ *
54
+ * The generated SQL (PostgreSQL):
55
+ *
56
+ * ```sql
57
+ * create index "person_first_name_index"
58
+ * on "test" ("first_name")
59
+ * nulls not distinct;
60
+ * ```
61
+ */
62
+ nullsNotDistinct() {
63
+ return new CreateIndexBuilder({
64
+ ...this.#props,
65
+ node: CreateIndexNode.cloneWith(this.#props.node, {
66
+ nullsNotDistinct: true,
67
+ }),
68
+ });
69
+ }
40
70
  /**
41
71
  * Specifies the table for the index.
42
72
  */
@@ -8,6 +8,7 @@ import { QueryId } from '../util/query-id.js';
8
8
  import { ForeignKeyConstraintBuilder } from './foreign-key-constraint-builder.js';
9
9
  import { DataTypeExpression } from '../parser/data-type-parser.js';
10
10
  import { Expression } from '../expression/expression.js';
11
+ import { UniqueConstraintNodeBuilderCallback } from './unique-constraint-builder.js';
11
12
  /**
12
13
  * This builder can be used to create a `create table` query.
13
14
  */
@@ -56,7 +57,7 @@ export declare class CreateTableBuilder<TB extends string, C extends string = ne
56
57
  * ```
57
58
  *
58
59
  * With this method, it's once again good to remember that Kysely just builds the
59
- * query and doesn't provide the same API for all databses. For example, some
60
+ * query and doesn't provide the same API for all databases. For example, some
60
61
  * databases like older MySQL don't support the `references` statement in the
61
62
  * column definition. Instead foreign key constraints need to be defined in the
62
63
  * `create table` query. See the next example:
@@ -104,8 +105,13 @@ export declare class CreateTableBuilder<TB extends string, C extends string = ne
104
105
  * ```ts
105
106
  * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name'])
106
107
  * ```
108
+ *
109
+ * In dialects such as PostgreSQL you can specify `nulls not distinct` as follows:
110
+ * ```ts
111
+ * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name'], (builder) => builder.nullsNotDistinct())
112
+ * ```
107
113
  */
108
- addUniqueConstraint(constraintName: string, columns: C[]): CreateTableBuilder<TB, C>;
114
+ addUniqueConstraint(constraintName: string, columns: C[], build?: UniqueConstraintNodeBuilderCallback): CreateTableBuilder<TB, C>;
109
115
  /**
110
116
  * Adds a check constraint.
111
117
  *
@@ -205,6 +211,26 @@ export declare class CreateTableBuilder<TB extends string, C extends string = ne
205
211
  * ```
206
212
  */
207
213
  modifyEnd(modifier: Expression<any>): CreateTableBuilder<TB, C>;
214
+ /**
215
+ * Allows to create table from `select` query.
216
+ *
217
+ * ### Examples
218
+ *
219
+ * ```ts
220
+ * db.schema.createTable('copy')
221
+ * .temporary()
222
+ * .as(db.selectFrom('person').select(['first_name', 'last_name']))
223
+ * .execute()
224
+ * ```
225
+ *
226
+ * The generated SQL (PostgreSQL):
227
+ *
228
+ * ```sql
229
+ * create temporary table "copy" as
230
+ * select "first_name", "last_name" from "person"
231
+ * ```
232
+ */
233
+ as(expression: Expression<unknown>): CreateTableBuilder<string, never>;
208
234
  /**
209
235
  * Calls the given function passing `this` as the only argument.
210
236
  *
@@ -13,6 +13,8 @@ import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.j
13
13
  import { CheckConstraintNode } from '../operation-node/check-constraint-node.js';
14
14
  import { parseTable } from '../parser/table-parser.js';
15
15
  import { parseOnCommitAction } from '../parser/on-commit-action-parse.js';
16
+ import { UniqueConstraintNodeBuilder, } from './unique-constraint-builder.js';
17
+ import { parseExpression } from '../parser/expression-parser.js';
16
18
  /**
17
19
  * This builder can be used to create a `create table` query.
18
20
  */
@@ -84,7 +86,7 @@ export class CreateTableBuilder {
84
86
  * ```
85
87
  *
86
88
  * With this method, it's once again good to remember that Kysely just builds the
87
- * query and doesn't provide the same API for all databses. For example, some
89
+ * query and doesn't provide the same API for all databases. For example, some
88
90
  * databases like older MySQL don't support the `references` statement in the
89
91
  * column definition. Instead foreign key constraints need to be defined in the
90
92
  * `create table` query. See the next example:
@@ -143,11 +145,17 @@ export class CreateTableBuilder {
143
145
  * ```ts
144
146
  * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name'])
145
147
  * ```
148
+ *
149
+ * In dialects such as PostgreSQL you can specify `nulls not distinct` as follows:
150
+ * ```ts
151
+ * addUniqueConstraint('first_name_last_name_unique', ['first_name', 'last_name'], (builder) => builder.nullsNotDistinct())
152
+ * ```
146
153
  */
147
- addUniqueConstraint(constraintName, columns) {
154
+ addUniqueConstraint(constraintName, columns, build = noop) {
155
+ const uniqueConstraintBuilder = build(new UniqueConstraintNodeBuilder(UniqueConstraintNode.create(columns, constraintName)));
148
156
  return new CreateTableBuilder({
149
157
  ...this.#props,
150
- node: CreateTableNode.cloneWithConstraint(this.#props.node, UniqueConstraintNode.create(columns, constraintName)),
158
+ node: CreateTableNode.cloneWithConstraint(this.#props.node, uniqueConstraintBuilder.toOperationNode()),
151
159
  });
152
160
  }
153
161
  /**
@@ -270,6 +278,33 @@ export class CreateTableBuilder {
270
278
  node: CreateTableNode.cloneWithEndModifier(this.#props.node, modifier.toOperationNode()),
271
279
  });
272
280
  }
281
+ /**
282
+ * Allows to create table from `select` query.
283
+ *
284
+ * ### Examples
285
+ *
286
+ * ```ts
287
+ * db.schema.createTable('copy')
288
+ * .temporary()
289
+ * .as(db.selectFrom('person').select(['first_name', 'last_name']))
290
+ * .execute()
291
+ * ```
292
+ *
293
+ * The generated SQL (PostgreSQL):
294
+ *
295
+ * ```sql
296
+ * create temporary table "copy" as
297
+ * select "first_name", "last_name" from "person"
298
+ * ```
299
+ */
300
+ as(expression) {
301
+ return new CreateTableBuilder({
302
+ ...this.#props,
303
+ node: CreateTableNode.cloneWith(this.#props.node, {
304
+ selectQuery: parseExpression(expression),
305
+ }),
306
+ });
307
+ }
273
308
  /**
274
309
  * Calls the given function passing `this` as the only argument.
275
310
  *
@@ -0,0 +1,14 @@
1
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
+ import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.js';
3
+ export declare class UniqueConstraintNodeBuilder implements OperationNodeSource {
4
+ #private;
5
+ constructor(node: UniqueConstraintNode);
6
+ toOperationNode(): UniqueConstraintNode;
7
+ /**
8
+ * Adds `nulls not distinct` to the unique constraint definition
9
+ *
10
+ * Supported by PostgreSQL dialect only
11
+ */
12
+ nullsNotDistinct(): UniqueConstraintNodeBuilder;
13
+ }
14
+ export type UniqueConstraintNodeBuilderCallback = (builder: UniqueConstraintNodeBuilder) => UniqueConstraintNodeBuilder;
@@ -0,0 +1,21 @@
1
+ /// <reference types="./unique-constraint-builder.d.ts" />
2
+ import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.js';
3
+ import { preventAwait } from '../util/prevent-await.js';
4
+ export class UniqueConstraintNodeBuilder {
5
+ #node;
6
+ constructor(node) {
7
+ this.#node = node;
8
+ }
9
+ toOperationNode() {
10
+ return this.#node;
11
+ }
12
+ /**
13
+ * Adds `nulls not distinct` to the unique constraint definition
14
+ *
15
+ * Supported by PostgreSQL dialect only
16
+ */
17
+ nullsNotDistinct() {
18
+ return new UniqueConstraintNodeBuilder(UniqueConstraintNode.cloneWith(this.#node, { nullsNotDistinct: true }));
19
+ }
20
+ }
21
+ preventAwait(UniqueConstraintNodeBuilder, "don't await UniqueConstraintNodeBuilder instances directly.");
@@ -44,7 +44,11 @@ function defaultLogger(event) {
44
44
  console.error(`kysely:error: ${event.error.stack ?? event.error.message}`);
45
45
  }
46
46
  else {
47
- console.error(`kysely:error: ${event}`);
47
+ console.error(`kysely:error: ${JSON.stringify({
48
+ error: event.error,
49
+ query: event.query.sql,
50
+ queryDurationMillis: event.queryDurationMillis,
51
+ })}`);
48
52
  }
49
53
  }
50
54
  }
@@ -6,7 +6,7 @@ export declare function isNumber(obj: unknown): obj is number;
6
6
  export declare function isBoolean(obj: unknown): obj is boolean;
7
7
  export declare function isNull(obj: unknown): obj is null;
8
8
  export declare function isDate(obj: unknown): obj is Date;
9
- export declare function isBigInt(obj: unknown): obj is BigInt;
9
+ export declare function isBigInt(obj: unknown): obj is bigint;
10
10
  export declare function isBuffer(obj: unknown): obj is {
11
11
  length: number;
12
12
  };