kysely 0.26.3 → 0.27.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/dialect/dialect-adapter-base.d.ts +8 -0
  3. package/dist/cjs/dialect/dialect-adapter-base.js +3 -0
  4. package/dist/cjs/dialect/dialect-adapter.d.ts +8 -0
  5. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +78 -0
  6. package/dist/cjs/dialect/mssql/mssql-adapter.js +30 -0
  7. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  8. package/dist/cjs/dialect/mssql/mssql-dialect-config.js +2 -0
  9. package/dist/cjs/dialect/mssql/mssql-dialect.d.ts +70 -0
  10. package/dist/cjs/dialect/mssql/mssql-dialect.js +65 -0
  11. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +54 -0
  12. package/dist/cjs/dialect/mssql/mssql-driver.js +268 -0
  13. package/dist/cjs/dialect/mssql/mssql-introspector.d.ts +20 -0
  14. package/dist/cjs/dialect/mssql/mssql-introspector.js +99 -0
  15. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  16. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +64 -0
  17. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  18. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +28 -0
  19. package/dist/cjs/dialect/postgres/postgres-driver.js +1 -1
  20. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -1
  22. package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  23. package/dist/cjs/dialect/sqlite/sqlite-driver.js +15 -2
  24. package/dist/cjs/driver/driver.d.ts +1 -1
  25. package/dist/cjs/driver/driver.js +1 -0
  26. package/dist/cjs/driver/runtime-driver.js +5 -1
  27. package/dist/cjs/driver/single-connection-provider.js +7 -8
  28. package/dist/cjs/expression/expression-builder.d.ts +66 -75
  29. package/dist/cjs/expression/expression-builder.js +8 -17
  30. package/dist/cjs/expression/expression-wrapper.d.ts +21 -11
  31. package/dist/cjs/expression/expression-wrapper.js +12 -0
  32. package/dist/cjs/helpers/mssql.d.ts +152 -0
  33. package/dist/cjs/helpers/mssql.js +160 -0
  34. package/dist/cjs/index.d.ts +7 -1
  35. package/dist/cjs/index.js +6 -0
  36. package/dist/cjs/migration/migrator.js +12 -16
  37. package/dist/cjs/operation-node/add-index-node.d.ts +21 -0
  38. package/dist/cjs/operation-node/add-index-node.js +31 -0
  39. package/dist/cjs/operation-node/alter-table-node.d.ts +5 -1
  40. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  41. package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
  42. package/dist/cjs/operation-node/create-index-node.d.ts +1 -0
  43. package/dist/cjs/operation-node/create-table-node.d.ts +1 -0
  44. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
  45. package/dist/cjs/operation-node/limit-node.d.ts +2 -3
  46. package/dist/cjs/operation-node/limit-node.js +1 -2
  47. package/dist/cjs/operation-node/offset-node.d.ts +2 -3
  48. package/dist/cjs/operation-node/offset-node.js +1 -2
  49. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  50. package/dist/cjs/operation-node/operation-node-transformer.js +19 -0
  51. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  52. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  53. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  54. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  55. package/dist/cjs/operation-node/operator-node.js +2 -0
  56. package/dist/cjs/operation-node/select-modifier-node.d.ts +2 -1
  57. package/dist/cjs/operation-node/select-modifier-node.js +2 -1
  58. package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
  59. package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
  60. package/dist/cjs/parser/binary-operation-parser.js +1 -1
  61. package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
  62. package/dist/cjs/parser/reference-parser.d.ts +2 -1
  63. package/dist/cjs/parser/update-set-parser.d.ts +5 -2
  64. package/dist/cjs/parser/update-set-parser.js +13 -3
  65. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +21 -4
  66. package/dist/cjs/query-builder/aggregate-function-builder.js +21 -0
  67. package/dist/cjs/query-builder/case-builder.d.ts +6 -5
  68. package/dist/cjs/query-builder/delete-query-builder.d.ts +8 -7
  69. package/dist/cjs/query-builder/delete-query-builder.js +4 -3
  70. package/dist/cjs/query-builder/function-module.d.ts +96 -25
  71. package/dist/cjs/query-builder/function-module.js +17 -3
  72. package/dist/cjs/query-builder/having-interface.d.ts +3 -5
  73. package/dist/cjs/query-builder/insert-query-builder.d.ts +34 -12
  74. package/dist/cjs/query-builder/insert-query-builder.js +16 -5
  75. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  76. package/dist/cjs/query-builder/insert-result.js +8 -1
  77. package/dist/cjs/query-builder/json-path-builder.d.ts +5 -3
  78. package/dist/cjs/query-builder/json-path-builder.js +9 -3
  79. package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
  80. package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
  81. package/dist/cjs/query-builder/over-builder.d.ts +2 -2
  82. package/dist/cjs/query-builder/select-query-builder.d.ts +49 -31
  83. package/dist/cjs/query-builder/select-query-builder.js +12 -10
  84. package/dist/cjs/query-builder/update-query-builder.d.ts +23 -7
  85. package/dist/cjs/query-builder/update-query-builder.js +4 -4
  86. package/dist/cjs/query-builder/where-interface.d.ts +3 -3
  87. package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
  88. package/dist/cjs/query-compiler/default-query-compiler.js +73 -12
  89. package/dist/cjs/raw-builder/raw-builder.d.ts +11 -1
  90. package/dist/cjs/raw-builder/raw-builder.js +3 -0
  91. package/dist/cjs/raw-builder/sql.js +9 -2
  92. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
  93. package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
  94. package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
  95. package/dist/cjs/schema/alter-table-builder.js +59 -2
  96. package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
  97. package/dist/cjs/schema/column-definition-builder.js +27 -0
  98. package/dist/cjs/schema/create-index-builder.d.ts +23 -0
  99. package/dist/cjs/schema/create-index-builder.js +30 -0
  100. package/dist/cjs/schema/create-table-builder.d.ts +28 -2
  101. package/dist/cjs/schema/create-table-builder.js +38 -3
  102. package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
  103. package/dist/cjs/schema/unique-constraint-builder.js +24 -0
  104. package/dist/cjs/util/log.js +5 -1
  105. package/dist/cjs/util/object-utils.d.ts +2 -2
  106. package/dist/cjs/util/object-utils.js +1 -1
  107. package/dist/cjs/util/type-utils.d.ts +27 -19
  108. package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
  109. package/dist/esm/dialect/dialect-adapter-base.js +3 -0
  110. package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
  111. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
  112. package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
  113. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  114. package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
  115. package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
  116. package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
  117. package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
  118. package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
  119. package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
  120. package/dist/esm/dialect/mssql/mssql-introspector.js +96 -0
  121. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  122. package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
  123. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  124. package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
  125. package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
  126. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  127. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
  128. package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  129. package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
  130. package/dist/esm/driver/driver.d.ts +1 -1
  131. package/dist/esm/driver/driver.js +1 -0
  132. package/dist/esm/driver/runtime-driver.js +5 -1
  133. package/dist/esm/driver/single-connection-provider.js +7 -8
  134. package/dist/esm/expression/expression-builder.d.ts +66 -75
  135. package/dist/esm/expression/expression-builder.js +10 -19
  136. package/dist/esm/expression/expression-wrapper.d.ts +21 -11
  137. package/dist/esm/expression/expression-wrapper.js +12 -0
  138. package/dist/esm/helpers/mssql.d.ts +152 -0
  139. package/dist/esm/helpers/mssql.js +155 -0
  140. package/dist/esm/index.d.ts +7 -1
  141. package/dist/esm/index.js +6 -0
  142. package/dist/esm/migration/migrator.js +12 -16
  143. package/dist/esm/operation-node/add-index-node.d.ts +21 -0
  144. package/dist/esm/operation-node/add-index-node.js +29 -0
  145. package/dist/esm/operation-node/alter-table-node.d.ts +5 -1
  146. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  147. package/dist/esm/operation-node/column-update-node.d.ts +2 -3
  148. package/dist/esm/operation-node/create-index-node.d.ts +1 -0
  149. package/dist/esm/operation-node/create-table-node.d.ts +1 -0
  150. package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
  151. package/dist/esm/operation-node/limit-node.d.ts +2 -3
  152. package/dist/esm/operation-node/limit-node.js +1 -2
  153. package/dist/esm/operation-node/offset-node.d.ts +2 -3
  154. package/dist/esm/operation-node/offset-node.js +1 -2
  155. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  156. package/dist/esm/operation-node/operation-node-transformer.js +19 -0
  157. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  158. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  159. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  160. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  161. package/dist/esm/operation-node/operator-node.js +2 -0
  162. package/dist/esm/operation-node/select-modifier-node.d.ts +2 -1
  163. package/dist/esm/operation-node/select-modifier-node.js +2 -1
  164. package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
  165. package/dist/esm/operation-node/unique-constraint-node.js +8 -1
  166. package/dist/esm/parser/binary-operation-parser.js +1 -1
  167. package/dist/esm/parser/coalesce-parser.d.ts +12 -2
  168. package/dist/esm/parser/reference-parser.d.ts +2 -1
  169. package/dist/esm/parser/update-set-parser.d.ts +5 -2
  170. package/dist/esm/parser/update-set-parser.js +10 -1
  171. package/dist/esm/query-builder/aggregate-function-builder.d.ts +21 -4
  172. package/dist/esm/query-builder/aggregate-function-builder.js +21 -0
  173. package/dist/esm/query-builder/case-builder.d.ts +6 -5
  174. package/dist/esm/query-builder/delete-query-builder.d.ts +8 -7
  175. package/dist/esm/query-builder/delete-query-builder.js +4 -3
  176. package/dist/esm/query-builder/function-module.d.ts +96 -25
  177. package/dist/esm/query-builder/function-module.js +17 -3
  178. package/dist/esm/query-builder/having-interface.d.ts +3 -5
  179. package/dist/esm/query-builder/insert-query-builder.d.ts +34 -12
  180. package/dist/esm/query-builder/insert-query-builder.js +17 -6
  181. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  182. package/dist/esm/query-builder/insert-result.js +8 -1
  183. package/dist/esm/query-builder/json-path-builder.d.ts +5 -3
  184. package/dist/esm/query-builder/json-path-builder.js +9 -3
  185. package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
  186. package/dist/esm/query-builder/on-conflict-builder.js +2 -7
  187. package/dist/esm/query-builder/over-builder.d.ts +2 -2
  188. package/dist/esm/query-builder/select-query-builder.d.ts +49 -31
  189. package/dist/esm/query-builder/select-query-builder.js +13 -11
  190. package/dist/esm/query-builder/update-query-builder.d.ts +23 -7
  191. package/dist/esm/query-builder/update-query-builder.js +5 -5
  192. package/dist/esm/query-builder/where-interface.d.ts +3 -3
  193. package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
  194. package/dist/esm/query-compiler/default-query-compiler.js +73 -12
  195. package/dist/esm/raw-builder/raw-builder.d.ts +11 -1
  196. package/dist/esm/raw-builder/raw-builder.js +3 -0
  197. package/dist/esm/raw-builder/sql.js +9 -2
  198. package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
  199. package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
  200. package/dist/esm/schema/alter-table-builder.d.ts +41 -1
  201. package/dist/esm/schema/alter-table-builder.js +59 -2
  202. package/dist/esm/schema/column-definition-builder.d.ts +25 -0
  203. package/dist/esm/schema/column-definition-builder.js +27 -0
  204. package/dist/esm/schema/create-index-builder.d.ts +23 -0
  205. package/dist/esm/schema/create-index-builder.js +30 -0
  206. package/dist/esm/schema/create-table-builder.d.ts +28 -2
  207. package/dist/esm/schema/create-table-builder.js +38 -3
  208. package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
  209. package/dist/esm/schema/unique-constraint-builder.js +21 -0
  210. package/dist/esm/util/log.js +5 -1
  211. package/dist/esm/util/object-utils.d.ts +2 -2
  212. package/dist/esm/util/object-utils.js +1 -1
  213. package/dist/esm/util/type-utils.d.ts +27 -19
  214. package/helpers/mssql.d.ts +1 -0
  215. package/helpers/mssql.js +1 -0
  216. package/package.json +15 -10
@@ -24,6 +24,9 @@ class RawBuilderImpl {
24
24
  $castTo() {
25
25
  return new RawBuilderImpl({ ...this.#props });
26
26
  }
27
+ $notNull() {
28
+ return new RawBuilderImpl(this.#props);
29
+ }
27
30
  withPlugin(plugin) {
28
31
  return new RawBuilderImpl({
29
32
  ...this.#props,
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.sql = void 0;
4
4
  const identifier_node_js_1 = require("../operation-node/identifier-node.js");
5
+ const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
5
6
  const raw_node_js_1 = require("../operation-node/raw-node.js");
6
7
  const value_node_js_1 = require("../operation-node/value-node.js");
7
8
  const reference_parser_js_1 = require("../parser/reference-parser.js");
@@ -12,7 +13,7 @@ const raw_builder_js_1 = require("./raw-builder.js");
12
13
  exports.sql = Object.assign((sqlFragments, ...parameters) => {
13
14
  return (0, raw_builder_js_1.createRawBuilder)({
14
15
  queryId: (0, query_id_js_1.createQueryId)(),
15
- rawNode: raw_node_js_1.RawNode.create(sqlFragments, parameters?.map(value_parser_js_1.parseValueExpression) ?? []),
16
+ rawNode: raw_node_js_1.RawNode.create(sqlFragments, parameters?.map(parseParameter) ?? []),
16
17
  });
17
18
  }, {
18
19
  ref(columnReference) {
@@ -64,7 +65,7 @@ exports.sql = Object.assign((sqlFragments, ...parameters) => {
64
65
  const nodes = new Array(2 * array.length - 1);
65
66
  const sep = separator.toOperationNode();
66
67
  for (let i = 0; i < array.length; ++i) {
67
- nodes[2 * i] = (0, value_parser_js_1.parseValueExpression)(array[i]);
68
+ nodes[2 * i] = parseParameter(array[i]);
68
69
  if (i !== array.length - 1) {
69
70
  nodes[2 * i + 1] = sep;
70
71
  }
@@ -75,3 +76,9 @@ exports.sql = Object.assign((sqlFragments, ...parameters) => {
75
76
  });
76
77
  },
77
78
  });
79
+ function parseParameter(param) {
80
+ if ((0, operation_node_source_js_1.isOperationNodeSource)(param)) {
81
+ return param.toOperationNode();
82
+ }
83
+ return (0, value_parser_js_1.parseValueExpression)(param);
84
+ }
@@ -0,0 +1,104 @@
1
+ import { Expression } from '../expression/expression.js';
2
+ import { AlterTableNode } from '../operation-node/alter-table-node.js';
3
+ import { IndexType } from '../operation-node/create-index-node.js';
4
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
5
+ import { OrderedColumnName } from '../parser/reference-parser.js';
6
+ import { CompiledQuery } from '../query-compiler/compiled-query.js';
7
+ import { QueryExecutor } from '../query-executor/query-executor.js';
8
+ import { Compilable } from '../util/compilable.js';
9
+ import { QueryId } from '../util/query-id.js';
10
+ export declare class AlterTableAddIndexBuilder implements OperationNodeSource, Compilable {
11
+ #private;
12
+ constructor(props: AlterTableAddIndexBuilderProps);
13
+ /**
14
+ * Makes the index unique.
15
+ */
16
+ unique(): AlterTableAddIndexBuilder;
17
+ /**
18
+ * Adds a column to the index.
19
+ *
20
+ * Also see {@link columns} for adding multiple columns at once or {@link expression}
21
+ * for specifying an arbitrary expression.
22
+ *
23
+ * ### Examples
24
+ *
25
+ * ```ts
26
+ * await db.schema
27
+ * .alterTable('person')
28
+ * .createIndex('person_first_name_and_age_index')
29
+ * .column('first_name')
30
+ * .column('age desc')
31
+ * .execute()
32
+ * ```
33
+ *
34
+ * The generated SQL (MySQL):
35
+ *
36
+ * ```sql
37
+ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc)
38
+ * ```
39
+ */
40
+ column<CL extends string>(column: OrderedColumnName<CL>): AlterTableAddIndexBuilder;
41
+ /**
42
+ * Specifies a list of columns for the index.
43
+ *
44
+ * Also see {@link column} for adding a single column or {@link expression} for
45
+ * specifying an arbitrary expression.
46
+ *
47
+ * ### Examples
48
+ *
49
+ * ```ts
50
+ * await db.schema
51
+ * .alterTable('person')
52
+ * .addIndex('person_first_name_and_age_index')
53
+ * .columns(['first_name', 'age desc'])
54
+ * .execute()
55
+ * ```
56
+ *
57
+ * The generated SQL (MySQL):
58
+ *
59
+ * ```sql
60
+ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc)
61
+ * ```
62
+ */
63
+ columns<CL extends string>(columns: OrderedColumnName<CL>[]): AlterTableAddIndexBuilder;
64
+ /**
65
+ * Specifies an arbitrary expression for the index.
66
+ *
67
+ * ### Examples
68
+ *
69
+ * ```ts
70
+ * import { sql } from 'kysely'
71
+ *
72
+ * await db.schema
73
+ * .alterTable('person')
74
+ * .addIndex('person_first_name_index')
75
+ * .expression(sql`(first_name < 'Sami')`)
76
+ * .execute()
77
+ * ```
78
+ *
79
+ * The generated SQL (MySQL):
80
+ *
81
+ * ```sql
82
+ * alter table `person` add index `person_first_name_index` ((first_name < 'Sami'))
83
+ * ```
84
+ */
85
+ expression(expression: Expression<any>): AlterTableAddIndexBuilder;
86
+ /**
87
+ * Specifies the index type.
88
+ */
89
+ using(indexType: IndexType): AlterTableAddIndexBuilder;
90
+ using(indexType: string): AlterTableAddIndexBuilder;
91
+ /**
92
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
93
+ * what the provided function returns.
94
+ */
95
+ $call<T>(func: (qb: this) => T): T;
96
+ toOperationNode(): AlterTableNode;
97
+ compile(): CompiledQuery;
98
+ execute(): Promise<void>;
99
+ }
100
+ export interface AlterTableAddIndexBuilderProps {
101
+ readonly queryId: QueryId;
102
+ readonly executor: QueryExecutor;
103
+ readonly node: AlterTableNode;
104
+ }
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AlterTableAddIndexBuilder = void 0;
4
+ const add_index_node_js_1 = require("../operation-node/add-index-node.js");
5
+ const alter_table_node_js_1 = require("../operation-node/alter-table-node.js");
6
+ const raw_node_js_1 = require("../operation-node/raw-node.js");
7
+ const reference_parser_js_1 = require("../parser/reference-parser.js");
8
+ const object_utils_js_1 = require("../util/object-utils.js");
9
+ const prevent_await_js_1 = require("../util/prevent-await.js");
10
+ class AlterTableAddIndexBuilder {
11
+ #props;
12
+ constructor(props) {
13
+ this.#props = (0, object_utils_js_1.freeze)(props);
14
+ }
15
+ /**
16
+ * Makes the index unique.
17
+ */
18
+ unique() {
19
+ return new AlterTableAddIndexBuilder({
20
+ ...this.#props,
21
+ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, {
22
+ addIndex: add_index_node_js_1.AddIndexNode.cloneWith(this.#props.node.addIndex, {
23
+ unique: true,
24
+ }),
25
+ }),
26
+ });
27
+ }
28
+ /**
29
+ * Adds a column to the index.
30
+ *
31
+ * Also see {@link columns} for adding multiple columns at once or {@link expression}
32
+ * for specifying an arbitrary expression.
33
+ *
34
+ * ### Examples
35
+ *
36
+ * ```ts
37
+ * await db.schema
38
+ * .alterTable('person')
39
+ * .createIndex('person_first_name_and_age_index')
40
+ * .column('first_name')
41
+ * .column('age desc')
42
+ * .execute()
43
+ * ```
44
+ *
45
+ * The generated SQL (MySQL):
46
+ *
47
+ * ```sql
48
+ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc)
49
+ * ```
50
+ */
51
+ column(column) {
52
+ return new AlterTableAddIndexBuilder({
53
+ ...this.#props,
54
+ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, {
55
+ addIndex: add_index_node_js_1.AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [(0, reference_parser_js_1.parseOrderedColumnName)(column)]),
56
+ }),
57
+ });
58
+ }
59
+ /**
60
+ * Specifies a list of columns for the index.
61
+ *
62
+ * Also see {@link column} for adding a single column or {@link expression} for
63
+ * specifying an arbitrary expression.
64
+ *
65
+ * ### Examples
66
+ *
67
+ * ```ts
68
+ * await db.schema
69
+ * .alterTable('person')
70
+ * .addIndex('person_first_name_and_age_index')
71
+ * .columns(['first_name', 'age desc'])
72
+ * .execute()
73
+ * ```
74
+ *
75
+ * The generated SQL (MySQL):
76
+ *
77
+ * ```sql
78
+ * alter table `person` add index `person_first_name_and_age_index` (`first_name`, `age` desc)
79
+ * ```
80
+ */
81
+ columns(columns) {
82
+ return new AlterTableAddIndexBuilder({
83
+ ...this.#props,
84
+ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, {
85
+ addIndex: add_index_node_js_1.AddIndexNode.cloneWithColumns(this.#props.node.addIndex, columns.map(reference_parser_js_1.parseOrderedColumnName)),
86
+ }),
87
+ });
88
+ }
89
+ /**
90
+ * Specifies an arbitrary expression for the index.
91
+ *
92
+ * ### Examples
93
+ *
94
+ * ```ts
95
+ * import { sql } from 'kysely'
96
+ *
97
+ * await db.schema
98
+ * .alterTable('person')
99
+ * .addIndex('person_first_name_index')
100
+ * .expression(sql`(first_name < 'Sami')`)
101
+ * .execute()
102
+ * ```
103
+ *
104
+ * The generated SQL (MySQL):
105
+ *
106
+ * ```sql
107
+ * alter table `person` add index `person_first_name_index` ((first_name < 'Sami'))
108
+ * ```
109
+ */
110
+ expression(expression) {
111
+ return new AlterTableAddIndexBuilder({
112
+ ...this.#props,
113
+ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, {
114
+ addIndex: add_index_node_js_1.AddIndexNode.cloneWithColumns(this.#props.node.addIndex, [expression.toOperationNode()]),
115
+ }),
116
+ });
117
+ }
118
+ using(indexType) {
119
+ return new AlterTableAddIndexBuilder({
120
+ ...this.#props,
121
+ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, {
122
+ addIndex: add_index_node_js_1.AddIndexNode.cloneWith(this.#props.node.addIndex, {
123
+ using: raw_node_js_1.RawNode.createWithSql(indexType),
124
+ }),
125
+ }),
126
+ });
127
+ }
128
+ /**
129
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
130
+ * what the provided function returns.
131
+ */
132
+ $call(func) {
133
+ return func(this);
134
+ }
135
+ toOperationNode() {
136
+ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId);
137
+ }
138
+ compile() {
139
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
140
+ }
141
+ async execute() {
142
+ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
143
+ }
144
+ }
145
+ exports.AlterTableAddIndexBuilder = AlterTableAddIndexBuilder;
146
+ (0, prevent_await_js_1.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
  *
@@ -25,6 +25,10 @@ const alter_table_executor_js_1 = require("./alter-table-executor.js");
25
25
  const alter_table_add_foreign_key_constraint_builder_js_1 = require("./alter-table-add-foreign-key-constraint-builder.js");
26
26
  const alter_table_drop_constraint_builder_js_1 = require("./alter-table-drop-constraint-builder.js");
27
27
  const primary_constraint_node_js_1 = require("../operation-node/primary-constraint-node.js");
28
+ const drop_index_node_js_1 = require("../operation-node/drop-index-node.js");
29
+ const add_index_node_js_1 = require("../operation-node/add-index-node.js");
30
+ const alter_table_add_index_builder_js_1 = require("./alter-table-add-index-builder.js");
31
+ const unique_constraint_builder_js_1 = require("./unique-constraint-builder.js");
28
32
  /**
29
33
  * This builder can be used to create a `alter table` query.
30
34
  */
@@ -85,11 +89,12 @@ class AlterTableBuilder {
85
89
  /**
86
90
  * See {@link CreateTableBuilder.addUniqueConstraint}
87
91
  */
88
- addUniqueConstraint(constraintName, columns) {
92
+ addUniqueConstraint(constraintName, columns, build = object_utils_js_1.noop) {
93
+ const uniqueConstraintBuilder = build(new unique_constraint_builder_js_1.UniqueConstraintNodeBuilder(unique_constraint_node_js_1.UniqueConstraintNode.create(columns, constraintName)));
89
94
  return new alter_table_executor_js_1.AlterTableExecutor({
90
95
  ...this.#props,
91
96
  node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, {
92
- addConstraint: add_constraint_node_js_1.AddConstraintNode.create(unique_constraint_node_js_1.UniqueConstraintNode.create(columns, constraintName)),
97
+ addConstraint: add_constraint_node_js_1.AddConstraintNode.create(uniqueConstraintBuilder.toOperationNode()),
93
98
  }),
94
99
  });
95
100
  }
@@ -136,6 +141,58 @@ class AlterTableBuilder {
136
141
  }),
137
142
  });
138
143
  }
144
+ /**
145
+ * This can be used to add index to table.
146
+ *
147
+ * ### Examples
148
+ *
149
+ * ```ts
150
+ * db.schema.alterTable('person')
151
+ * .addIndex('person_email_index')
152
+ * .column('email')
153
+ * .unique()
154
+ * .execute()
155
+ * ```
156
+ *
157
+ * The generated SQL (MySQL):
158
+ *
159
+ * ```sql
160
+ * alter table `person` add unique index `person_email_index` (`email`)
161
+ * ```
162
+ */
163
+ addIndex(indexName) {
164
+ return new alter_table_add_index_builder_js_1.AlterTableAddIndexBuilder({
165
+ ...this.#props,
166
+ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, {
167
+ addIndex: add_index_node_js_1.AddIndexNode.create(indexName),
168
+ }),
169
+ });
170
+ }
171
+ /**
172
+ * This can be used to drop index from table.
173
+ *
174
+ * ### Examples
175
+ *
176
+ * ```ts
177
+ * db.schema.alterTable('person')
178
+ * .dropIndex('person_email_index')
179
+ * .execute()
180
+ * ```
181
+ *
182
+ * The generated SQL (MySQL):
183
+ *
184
+ * ```sql
185
+ * alter table `person` drop index `test_first_name_index`
186
+ * ```
187
+ */
188
+ dropIndex(indexName) {
189
+ return new alter_table_executor_js_1.AlterTableExecutor({
190
+ ...this.#props,
191
+ node: alter_table_node_js_1.AlterTableNode.cloneWithTableProps(this.#props.node, {
192
+ dropIndex: drop_index_node_js_1.DropIndexNode.create(indexName),
193
+ }),
194
+ });
195
+ }
139
196
  /**
140
197
  * Calls the given function passing `this` as the only argument.
141
198
  *
@@ -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
  *
@@ -258,6 +258,33 @@ class ColumnDefinitionBuilder {
258
258
  modifyFront(modifier) {
259
259
  return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWithFrontModifier(this.#node, modifier.toOperationNode()));
260
260
  }
261
+ /**
262
+ * Adds `nulls not distinct` specifier.
263
+ * Should be used with `unique` constraint.
264
+ *
265
+ * This only works on some dialects like PostgreSQL.
266
+ *
267
+ * ### Examples
268
+ *
269
+ * ```ts
270
+ * db.schema.createTable('person')
271
+ * .addColumn('id', 'integer', col => col.primaryKey())
272
+ * .addColumn('first_name', 'varchar(30)', col => col.unique().nullsNotDistinct())
273
+ * .execute()
274
+ * ```
275
+ *
276
+ * The generated SQL (PostgreSQL):
277
+ *
278
+ * ```sql
279
+ * create table "person" (
280
+ * "id" integer primary key,
281
+ * "first_name" varchar(30) unique nulls not distinct
282
+ * )
283
+ * ```
284
+ */
285
+ nullsNotDistinct() {
286
+ return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, { nullsNotDistinct: true }));
287
+ }
261
288
  /**
262
289
  * This can be used to add any additional SQL to the end of the column definition.
263
290
  *
@@ -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
  */
@@ -39,6 +39,36 @@ class CreateIndexBuilder {
39
39
  }),
40
40
  });
41
41
  }
42
+ /**
43
+ * Adds `nulls not distinct` specifier to index.
44
+ * This only works on some dialects like PostgreSQL.
45
+ *
46
+ * ### Examples
47
+ *
48
+ * ```ts
49
+ * db.schema.createIndex('person_first_name_index')
50
+ * .on('person')
51
+ * .column('first_name')
52
+ * .nullsNotDistinct()
53
+ * .execute()
54
+ * ```
55
+ *
56
+ * The generated SQL (PostgreSQL):
57
+ *
58
+ * ```sql
59
+ * create index "person_first_name_index"
60
+ * on "test" ("first_name")
61
+ * nulls not distinct;
62
+ * ```
63
+ */
64
+ nullsNotDistinct() {
65
+ return new CreateIndexBuilder({
66
+ ...this.#props,
67
+ node: create_index_node_js_1.CreateIndexNode.cloneWith(this.#props.node, {
68
+ nullsNotDistinct: true,
69
+ }),
70
+ });
71
+ }
42
72
  /**
43
73
  * Specifies the table for the index.
44
74
  */
@@ -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
  *