kysely 0.26.2 → 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 (215) 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 -73
  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/helpers/mysql.d.ts +3 -3
  33. package/dist/cjs/helpers/sqlite.d.ts +3 -3
  34. package/dist/cjs/index.d.ts +8 -2
  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/operation-node-transformer.d.ts +2 -0
  45. package/dist/cjs/operation-node/operation-node-transformer.js +17 -0
  46. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  47. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  48. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  49. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  50. package/dist/cjs/operation-node/operator-node.js +2 -0
  51. package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
  52. package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
  53. package/dist/cjs/parser/binary-operation-parser.js +1 -1
  54. package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
  55. package/dist/cjs/parser/expression-parser.d.ts +2 -2
  56. package/dist/cjs/parser/reference-parser.d.ts +3 -2
  57. package/dist/cjs/parser/returning-parser.d.ts +2 -1
  58. package/dist/cjs/parser/select-parser.d.ts +20 -9
  59. package/dist/cjs/parser/update-set-parser.d.ts +5 -2
  60. package/dist/cjs/parser/update-set-parser.js +13 -3
  61. package/dist/cjs/parser/value-parser.d.ts +2 -2
  62. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +4 -4
  63. package/dist/cjs/query-builder/case-builder.d.ts +5 -4
  64. package/dist/cjs/query-builder/delete-query-builder.d.ts +8 -6
  65. package/dist/cjs/query-builder/function-module.d.ts +98 -27
  66. package/dist/cjs/query-builder/function-module.js +17 -3
  67. package/dist/cjs/query-builder/having-interface.d.ts +3 -5
  68. package/dist/cjs/query-builder/insert-query-builder.d.ts +32 -12
  69. package/dist/cjs/query-builder/insert-query-builder.js +3 -3
  70. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  71. package/dist/cjs/query-builder/insert-result.js +8 -1
  72. package/dist/cjs/query-builder/json-path-builder.d.ts +3 -2
  73. package/dist/cjs/query-builder/json-path-builder.js +6 -3
  74. package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
  75. package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
  76. package/dist/cjs/query-builder/over-builder.d.ts +2 -2
  77. package/dist/cjs/query-builder/returning-interface.d.ts +3 -2
  78. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +20 -0
  79. package/dist/cjs/query-builder/select-query-builder-expression.js +2 -0
  80. package/dist/cjs/query-builder/select-query-builder.d.ts +48 -29
  81. package/dist/cjs/query-builder/select-query-builder.js +5 -2
  82. package/dist/cjs/query-builder/update-query-builder.d.ts +25 -7
  83. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  84. package/dist/cjs/query-builder/where-interface.d.ts +3 -3
  85. package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
  86. package/dist/cjs/query-compiler/default-query-compiler.js +65 -12
  87. package/dist/cjs/query-creator.d.ts +5 -3
  88. package/dist/cjs/query-creator.js +0 -47
  89. package/dist/cjs/raw-builder/raw-builder.d.ts +0 -3
  90. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
  91. package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
  92. package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
  93. package/dist/cjs/schema/alter-table-builder.js +59 -2
  94. package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
  95. package/dist/cjs/schema/column-definition-builder.js +27 -0
  96. package/dist/cjs/schema/create-index-builder.d.ts +23 -0
  97. package/dist/cjs/schema/create-index-builder.js +30 -0
  98. package/dist/cjs/schema/create-table-builder.d.ts +28 -2
  99. package/dist/cjs/schema/create-table-builder.js +38 -3
  100. package/dist/cjs/schema/create-view-builder.d.ts +2 -2
  101. package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
  102. package/dist/cjs/schema/unique-constraint-builder.js +24 -0
  103. package/dist/cjs/util/infer-result.d.ts +2 -1
  104. package/dist/cjs/util/log.js +5 -1
  105. package/dist/cjs/util/object-utils.d.ts +1 -1
  106. package/dist/cjs/util/type-utils.d.ts +27 -20
  107. package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
  108. package/dist/esm/dialect/dialect-adapter-base.js +3 -0
  109. package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
  110. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
  111. package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
  112. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  113. package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
  114. package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
  115. package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
  116. package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
  117. package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
  118. package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
  119. package/dist/esm/dialect/mssql/mssql-introspector.js +94 -0
  120. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  121. package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
  122. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  123. package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
  124. package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
  125. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  126. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
  127. package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  128. package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
  129. package/dist/esm/driver/driver.d.ts +1 -1
  130. package/dist/esm/driver/driver.js +1 -0
  131. package/dist/esm/driver/runtime-driver.js +5 -1
  132. package/dist/esm/driver/single-connection-provider.js +7 -8
  133. package/dist/esm/expression/expression-builder.d.ts +66 -73
  134. package/dist/esm/expression/expression-builder.js +10 -19
  135. package/dist/esm/expression/expression-wrapper.d.ts +8 -8
  136. package/dist/esm/helpers/mssql.d.ts +152 -0
  137. package/dist/esm/helpers/mssql.js +155 -0
  138. package/dist/esm/helpers/mysql.d.ts +3 -3
  139. package/dist/esm/helpers/sqlite.d.ts +3 -3
  140. package/dist/esm/index.d.ts +8 -2
  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/operation-node-transformer.d.ts +2 -0
  151. package/dist/esm/operation-node/operation-node-transformer.js +17 -0
  152. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  153. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  154. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  155. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  156. package/dist/esm/operation-node/operator-node.js +2 -0
  157. package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
  158. package/dist/esm/operation-node/unique-constraint-node.js +8 -1
  159. package/dist/esm/parser/binary-operation-parser.js +1 -1
  160. package/dist/esm/parser/coalesce-parser.d.ts +12 -2
  161. package/dist/esm/parser/expression-parser.d.ts +2 -2
  162. package/dist/esm/parser/reference-parser.d.ts +3 -2
  163. package/dist/esm/parser/returning-parser.d.ts +2 -1
  164. package/dist/esm/parser/select-parser.d.ts +20 -9
  165. package/dist/esm/parser/update-set-parser.d.ts +5 -2
  166. package/dist/esm/parser/update-set-parser.js +10 -1
  167. package/dist/esm/parser/value-parser.d.ts +2 -2
  168. package/dist/esm/query-builder/aggregate-function-builder.d.ts +4 -4
  169. package/dist/esm/query-builder/case-builder.d.ts +5 -4
  170. package/dist/esm/query-builder/delete-query-builder.d.ts +8 -6
  171. package/dist/esm/query-builder/function-module.d.ts +98 -27
  172. package/dist/esm/query-builder/function-module.js +17 -3
  173. package/dist/esm/query-builder/having-interface.d.ts +3 -5
  174. package/dist/esm/query-builder/insert-query-builder.d.ts +32 -12
  175. package/dist/esm/query-builder/insert-query-builder.js +4 -4
  176. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  177. package/dist/esm/query-builder/insert-result.js +8 -1
  178. package/dist/esm/query-builder/json-path-builder.d.ts +3 -2
  179. package/dist/esm/query-builder/json-path-builder.js +6 -3
  180. package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
  181. package/dist/esm/query-builder/on-conflict-builder.js +2 -7
  182. package/dist/esm/query-builder/over-builder.d.ts +2 -2
  183. package/dist/esm/query-builder/returning-interface.d.ts +3 -2
  184. package/dist/esm/query-builder/select-query-builder-expression.d.ts +20 -0
  185. package/dist/esm/query-builder/select-query-builder-expression.js +2 -0
  186. package/dist/esm/query-builder/select-query-builder.d.ts +48 -29
  187. package/dist/esm/query-builder/select-query-builder.js +5 -2
  188. package/dist/esm/query-builder/update-query-builder.d.ts +25 -7
  189. package/dist/esm/query-builder/update-query-builder.js +3 -3
  190. package/dist/esm/query-builder/where-interface.d.ts +3 -3
  191. package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
  192. package/dist/esm/query-compiler/default-query-compiler.js +65 -12
  193. package/dist/esm/query-creator.d.ts +5 -3
  194. package/dist/esm/query-creator.js +0 -47
  195. package/dist/esm/raw-builder/raw-builder.d.ts +0 -3
  196. package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
  197. package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
  198. package/dist/esm/schema/alter-table-builder.d.ts +41 -1
  199. package/dist/esm/schema/alter-table-builder.js +59 -2
  200. package/dist/esm/schema/column-definition-builder.d.ts +25 -0
  201. package/dist/esm/schema/column-definition-builder.js +27 -0
  202. package/dist/esm/schema/create-index-builder.d.ts +23 -0
  203. package/dist/esm/schema/create-index-builder.js +30 -0
  204. package/dist/esm/schema/create-table-builder.d.ts +28 -2
  205. package/dist/esm/schema/create-table-builder.js +38 -3
  206. package/dist/esm/schema/create-view-builder.d.ts +2 -2
  207. package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
  208. package/dist/esm/schema/unique-constraint-builder.js +21 -0
  209. package/dist/esm/util/infer-result.d.ts +2 -1
  210. package/dist/esm/util/log.js +5 -1
  211. package/dist/esm/util/object-utils.d.ts +1 -1
  212. package/dist/esm/util/type-utils.d.ts +27 -20
  213. package/helpers/mssql.d.ts +1 -0
  214. package/helpers/mssql.js +1 -0
  215. package/package.json +17 -6
@@ -48,7 +48,7 @@ import { RootOperationNode, QueryCompiler } from './query-compiler.js';
48
48
  import { HavingNode } from '../operation-node/having-node.js';
49
49
  import { CreateSchemaNode } from '../operation-node/create-schema-node.js';
50
50
  import { DropSchemaNode } from '../operation-node/drop-schema-node.js';
51
- import { AlterTableNode } from '../operation-node/alter-table-node.js';
51
+ import { AlterTableColumnAlterationNode, AlterTableNode } from '../operation-node/alter-table-node.js';
52
52
  import { DropColumnNode } from '../operation-node/drop-column-node.js';
53
53
  import { RenameColumnNode } from '../operation-node/rename-column-node.js';
54
54
  import { AlterColumnNode } from '../operation-node/alter-column-node.js';
@@ -88,6 +88,7 @@ import { JSONPathNode } from '../operation-node/json-path-node.js';
88
88
  import { JSONPathLegNode } from '../operation-node/json-path-leg-node.js';
89
89
  import { JSONOperatorChainNode } from '../operation-node/json-operator-chain-node.js';
90
90
  import { TupleNode } from '../operation-node/tuple-node.js';
91
+ import { AddIndexNode } from '../operation-node/add-index-node.js';
91
92
  export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
92
93
  #private;
93
94
  protected get numParameters(): number;
@@ -184,6 +185,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
184
185
  protected visitJSONPath(node: JSONPathNode): void;
185
186
  protected visitJSONPathLeg(node: JSONPathLegNode): void;
186
187
  protected visitJSONOperatorChain(node: JSONOperatorChainNode): void;
188
+ protected visitAddIndex(node: AddIndexNode): void;
187
189
  protected append(str: string): void;
188
190
  protected appendValue(parameter: unknown): void;
189
191
  protected getLeftIdentifierWrapper(): string;
@@ -197,4 +199,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
197
199
  protected addParameter(parameter: unknown): void;
198
200
  protected appendImmediateValue(value: unknown): void;
199
201
  protected sortSelectModifiers(arr: SelectModifierNode[]): ReadonlyArray<SelectModifierNode>;
202
+ protected compileColumnAlterations(columnAlterations: readonly AlterTableColumnAlterationNode[]): void;
203
+ /**
204
+ * controls whether the dialect adds a "type" keyword before a column's new data
205
+ * type in an ALTER TABLE statement.
206
+ */
207
+ protected announcesNewColumnDataType(): boolean;
200
208
  }
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DefaultQueryCompiler = void 0;
4
+ const create_table_node_js_1 = require("../operation-node/create-table-node.js");
4
5
  const insert_query_node_js_1 = require("../operation-node/insert-query-node.js");
5
6
  const operation_node_visitor_js_1 = require("../operation-node/operation-node-visitor.js");
6
7
  const operator_node_js_1 = require("../operation-node/operator-node.js");
@@ -32,6 +33,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
32
33
  const wrapInParens = this.parentNode !== undefined &&
33
34
  !parens_node_js_1.ParensNode.is(this.parentNode) &&
34
35
  !insert_query_node_js_1.InsertQueryNode.is(this.parentNode) &&
36
+ !create_table_node_js_1.CreateTableNode.is(this.parentNode) &&
35
37
  !create_view_node_js_1.CreateViewNode.is(this.parentNode) &&
36
38
  !set_operation_node_js_1.SetOperationNode.is(this.parentNode);
37
39
  if (this.parentNode === undefined && node.explain) {
@@ -348,16 +350,22 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
348
350
  this.append('if not exists ');
349
351
  }
350
352
  this.visitNode(node.table);
351
- this.append(' (');
352
- this.compileList([...node.columns, ...(node.constraints ?? [])]);
353
- this.append(')');
354
- if (node.onCommit) {
355
- this.append(' on commit ');
356
- this.append(node.onCommit);
353
+ if (node.selectQuery) {
354
+ this.append(' as ');
355
+ this.visitNode(node.selectQuery);
357
356
  }
358
- if (node.endModifiers && node.endModifiers.length > 0) {
359
- this.append(' ');
360
- this.compileList(node.endModifiers, ' ');
357
+ else {
358
+ this.append(' (');
359
+ this.compileList([...node.columns, ...(node.constraints ?? [])]);
360
+ this.append(')');
361
+ if (node.onCommit) {
362
+ this.append(' on commit ');
363
+ this.append(node.onCommit);
364
+ }
365
+ if (node.endModifiers && node.endModifiers.length > 0) {
366
+ this.append(' ');
367
+ this.compileList(node.endModifiers, ' ');
368
+ }
361
369
  }
362
370
  }
363
371
  visitColumnDefinition(node) {
@@ -385,6 +393,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
385
393
  if (node.unique) {
386
394
  this.append(' unique');
387
395
  }
396
+ if (node.nullsNotDistinct) {
397
+ this.append(' nulls not distinct');
398
+ }
388
399
  if (node.primaryKey) {
389
400
  this.append(' primary key');
390
401
  }
@@ -565,6 +576,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
565
576
  this.compileList(node.columns);
566
577
  this.append(')');
567
578
  }
579
+ if (node.nullsNotDistinct) {
580
+ this.append(' nulls not distinct');
581
+ }
568
582
  if (node.where) {
569
583
  this.append(' ');
570
584
  this.visitNode(node.where);
@@ -617,7 +631,11 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
617
631
  this.visitNode(node.name);
618
632
  this.append(' ');
619
633
  }
620
- this.append('unique (');
634
+ this.append('unique');
635
+ if (node.nullsNotDistinct) {
636
+ this.append(' nulls not distinct');
637
+ }
638
+ this.append(' (');
621
639
  this.compileList(node.columns);
622
640
  this.append(')');
623
641
  }
@@ -698,7 +716,13 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
698
716
  this.visitNode(node.dropConstraint);
699
717
  }
700
718
  if (node.columnAlterations) {
701
- this.compileList(node.columnAlterations);
719
+ this.compileColumnAlterations(node.columnAlterations);
720
+ }
721
+ if (node.addIndex) {
722
+ this.visitNode(node.addIndex);
723
+ }
724
+ if (node.dropIndex) {
725
+ this.visitNode(node.dropIndex);
702
726
  }
703
727
  }
704
728
  visitAddColumn(node) {
@@ -720,7 +744,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
720
744
  this.visitNode(node.column);
721
745
  this.append(' ');
722
746
  if (node.dataType) {
723
- this.append('type ');
747
+ if (this.announcesNewColumnDataType()) {
748
+ this.append('type ');
749
+ }
724
750
  this.visitNode(node.dataType);
725
751
  if (node.dataTypeExpression) {
726
752
  this.append('using ');
@@ -1006,6 +1032,23 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
1006
1032
  this.visitNode(node.values[i]);
1007
1033
  }
1008
1034
  }
1035
+ visitAddIndex(node) {
1036
+ this.append('add ');
1037
+ if (node.unique) {
1038
+ this.append('unique ');
1039
+ }
1040
+ this.append('index ');
1041
+ this.visitNode(node.name);
1042
+ if (node.columns) {
1043
+ this.append(' (');
1044
+ this.compileList(node.columns);
1045
+ this.append(')');
1046
+ }
1047
+ if (node.using) {
1048
+ this.append(' using ');
1049
+ this.visitNode(node.using);
1050
+ }
1051
+ }
1009
1052
  append(str) {
1010
1053
  this.#sql += str;
1011
1054
  }
@@ -1079,6 +1122,16 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
1079
1122
  : 1);
1080
1123
  return (0, object_utils_js_1.freeze)(arr);
1081
1124
  }
1125
+ compileColumnAlterations(columnAlterations) {
1126
+ this.compileList(columnAlterations);
1127
+ }
1128
+ /**
1129
+ * controls whether the dialect adds a "type" keyword before a column's new data
1130
+ * type in an ALTER TABLE statement.
1131
+ */
1132
+ announcesNewColumnDataType() {
1133
+ return true;
1134
+ }
1082
1135
  }
1083
1136
  exports.DefaultQueryCompiler = DefaultQueryCompiler;
1084
1137
  const SELECT_MODIFIER_SQL = (0, object_utils_js_1.freeze)({
@@ -11,7 +11,7 @@ import { DeleteResult } from './query-builder/delete-result.js';
11
11
  import { UpdateResult } from './query-builder/update-result.js';
12
12
  import { KyselyPlugin } from './plugin/kysely-plugin.js';
13
13
  import { CTEBuilderCallback } from './query-builder/cte-builder.js';
14
- import { SelectArg, SelectExpression, Selection } from './parser/select-parser.js';
14
+ import { CallbackSelection, SelectCallback, SelectExpression, Selection } from './parser/select-parser.js';
15
15
  export declare class QueryCreator<DB> {
16
16
  #private;
17
17
  constructor(props: QueryCreatorProps);
@@ -139,7 +139,7 @@ export declare class QueryCreator<DB> {
139
139
  * ### Examples
140
140
  *
141
141
  * ```ts
142
- * const result = db.select((eb) => [
142
+ * const result = db.selectNoFrom((eb) => [
143
143
  * eb.selectFrom('person')
144
144
  * .select('id')
145
145
  * .where('first_name', '=', 'Jennifer')
@@ -174,7 +174,9 @@ export declare class QueryCreator<DB> {
174
174
  * ) as "doggo_id"
175
175
  * ```
176
176
  */
177
- selectNoFrom<SE extends SelectExpression<DB, never>>(selection: SelectArg<DB, never, SE>): SelectQueryBuilder<DB, never, Selection<DB, never, SE>>;
177
+ selectNoFrom<SE extends SelectExpression<DB, never>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, never, Selection<DB, never, SE>>;
178
+ selectNoFrom<CB extends SelectCallback<DB, never>>(callback: CB): SelectQueryBuilder<DB, never, CallbackSelection<DB, never, CB>>;
179
+ selectNoFrom<SE extends SelectExpression<DB, never>>(selection: SE): SelectQueryBuilder<DB, never, Selection<DB, never, SE>>;
178
180
  /**
179
181
  * Creates an insert query.
180
182
  *
@@ -28,53 +28,6 @@ class QueryCreator {
28
28
  queryNode: select_query_node_js_1.SelectQueryNode.createFrom((0, table_parser_js_1.parseTableExpressionOrList)(from), this.#props.withNode),
29
29
  });
30
30
  }
31
- /**
32
- * Creates a `select` query builder without a `from` clause.
33
- *
34
- * If you want to create a `select from` query, use the `selectFrom` method instead.
35
- * This one can be used to create a plain `select` statement without a `from` clause.
36
- *
37
- * This method accepts the same inputs as {@link SelectQueryBuilder.select}. See its
38
- * documentation for more examples.
39
- *
40
- * ### Examples
41
- *
42
- * ```ts
43
- * const result = db.select((eb) => [
44
- * eb.selectFrom('person')
45
- * .select('id')
46
- * .where('first_name', '=', 'Jennifer')
47
- * .limit(1)
48
- * .as('jennifer_id'),
49
- *
50
- * eb.selectFrom('pet')
51
- * .select('id')
52
- * .where('name', '=', 'Doggo')
53
- * .limit(1)
54
- * .as('doggo_id')
55
- * ])
56
- * .executeTakeFirstOrThrow()
57
- *
58
- * console.log(result.jennifer_id)
59
- * console.log(result.doggo_id)
60
- * ```
61
- *
62
- * The generated SQL (PostgreSQL):
63
- *
64
- * ```sql
65
- * select (
66
- * select "id"
67
- * from "person"
68
- * where "first_name" = $1
69
- * limit $2
70
- * ) as "jennifer_id", (
71
- * select "id"
72
- * from "pet"
73
- * where "name" = $3
74
- * limit $4
75
- * ) as "doggo_id"
76
- * ```
77
- */
78
31
  selectNoFrom(selection) {
79
32
  return (0, select_query_builder_js_1.createSelectQueryBuilder)({
80
33
  queryId: (0, query_id_js_1.createQueryId)(),
@@ -12,9 +12,6 @@ import { AliasableExpression, AliasedExpression, Expression } from '../expressio
12
12
  * use the {@link sql} template tag.
13
13
  */
14
14
  export interface RawBuilder<O> extends AliasableExpression<O> {
15
- /**
16
- * @private Without this SelectQueryBuilder extends RawBuilder and things break.
17
- */
18
15
  get isRawBuilder(): true;
19
16
  /**
20
17
  * Returns an aliased version of the SQL expression.
@@ -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
  *