kysely 0.27.1 → 0.27.3

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 (161) hide show
  1. package/dist/cjs/dialect/database-introspector.d.ts +1 -0
  2. package/dist/cjs/dialect/mssql/mssql-introspector.js +13 -2
  3. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  4. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +8 -0
  5. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
  6. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  7. package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
  8. package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -0
  9. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
  10. package/dist/cjs/driver/database-connection.d.ts +1 -1
  11. package/dist/cjs/expression/expression-builder.d.ts +30 -4
  12. package/dist/cjs/expression/expression-builder.js +5 -0
  13. package/dist/cjs/index.d.ts +7 -1
  14. package/dist/cjs/index.js +6 -0
  15. package/dist/cjs/migration/migrator.d.ts +19 -2
  16. package/dist/cjs/migration/migrator.js +77 -43
  17. package/dist/cjs/operation-node/add-index-node.js +1 -1
  18. package/dist/cjs/operation-node/cast-node.d.ts +13 -0
  19. package/dist/cjs/operation-node/cast-node.js +19 -0
  20. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  21. package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
  22. package/dist/cjs/operation-node/data-type-node.js +55 -1
  23. package/dist/cjs/operation-node/delete-query-node.d.ts +4 -0
  24. package/dist/cjs/operation-node/delete-query-node.js +12 -0
  25. package/dist/cjs/operation-node/fetch-node.d.ts +15 -0
  26. package/dist/cjs/operation-node/fetch-node.js +19 -0
  27. package/dist/cjs/operation-node/insert-query-node.d.ts +4 -1
  28. package/dist/cjs/operation-node/insert-query-node.js +5 -0
  29. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  30. package/dist/cjs/operation-node/matched-node.d.ts +13 -0
  31. package/dist/cjs/operation-node/matched-node.js +19 -0
  32. package/dist/cjs/operation-node/merge-query-node.d.ts +25 -0
  33. package/dist/cjs/operation-node/merge-query-node.js +45 -0
  34. package/dist/cjs/operation-node/operation-node-transformer.d.ts +10 -0
  35. package/dist/cjs/operation-node/operation-node-transformer.js +50 -0
  36. package/dist/cjs/operation-node/operation-node-visitor.d.ts +10 -0
  37. package/dist/cjs/operation-node/operation-node-visitor.js +5 -0
  38. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/query-node.d.ts +10 -3
  40. package/dist/cjs/operation-node/query-node.js +15 -1
  41. package/dist/cjs/operation-node/select-query-node.d.ts +5 -0
  42. package/dist/cjs/operation-node/select-query-node.js +6 -0
  43. package/dist/cjs/operation-node/top-node.d.ts +14 -0
  44. package/dist/cjs/operation-node/top-node.js +19 -0
  45. package/dist/cjs/operation-node/update-query-node.d.ts +7 -1
  46. package/dist/cjs/operation-node/update-query-node.js +11 -0
  47. package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
  48. package/dist/cjs/parser/binary-operation-parser.js +2 -2
  49. package/dist/cjs/parser/data-type-parser.js +7 -3
  50. package/dist/cjs/parser/fetch-parser.d.ts +2 -0
  51. package/dist/cjs/parser/fetch-parser.js +18 -0
  52. package/dist/cjs/parser/insert-values-parser.d.ts +3 -3
  53. package/dist/cjs/parser/merge-parser.d.ts +9 -0
  54. package/dist/cjs/parser/merge-parser.js +32 -0
  55. package/dist/cjs/parser/table-parser.d.ts +4 -3
  56. package/dist/cjs/parser/top-parser.d.ts +2 -0
  57. package/dist/cjs/parser/top-parser.js +20 -0
  58. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
  59. package/dist/cjs/query-builder/delete-query-builder.d.ts +99 -0
  60. package/dist/cjs/query-builder/delete-query-builder.js +120 -0
  61. package/dist/cjs/query-builder/insert-query-builder.d.ts +73 -3
  62. package/dist/cjs/query-builder/insert-query-builder.js +242 -0
  63. package/dist/cjs/query-builder/merge-query-builder.d.ts +557 -0
  64. package/dist/cjs/query-builder/merge-query-builder.js +518 -0
  65. package/dist/cjs/query-builder/merge-result.d.ts +4 -0
  66. package/dist/cjs/query-builder/merge-result.js +10 -0
  67. package/dist/cjs/query-builder/select-query-builder.d.ts +102 -7
  68. package/dist/cjs/query-builder/select-query-builder.js +14 -0
  69. package/dist/cjs/query-builder/update-query-builder.d.ts +82 -3
  70. package/dist/cjs/query-builder/update-query-builder.js +98 -0
  71. package/dist/cjs/query-compiler/default-query-compiler.d.ts +10 -0
  72. package/dist/cjs/query-compiler/default-query-compiler.js +94 -10
  73. package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
  74. package/dist/cjs/query-creator.d.ts +40 -2
  75. package/dist/cjs/query-creator.js +9 -0
  76. package/dist/cjs/schema/alter-table-add-index-builder.js +6 -2
  77. package/dist/cjs/schema/column-definition-builder.d.ts +13 -1
  78. package/dist/cjs/schema/column-definition-builder.js +15 -1
  79. package/dist/cjs/util/infer-result.d.ts +2 -1
  80. package/dist/cjs/util/type-utils.d.ts +3 -2
  81. package/dist/esm/dialect/database-introspector.d.ts +1 -0
  82. package/dist/esm/dialect/mssql/mssql-introspector.js +13 -2
  83. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  84. package/dist/esm/dialect/mssql/mssql-query-compiler.js +8 -0
  85. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
  86. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  87. package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
  88. package/dist/esm/dialect/postgres/postgres-introspector.js +2 -0
  89. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
  90. package/dist/esm/driver/database-connection.d.ts +1 -1
  91. package/dist/esm/expression/expression-builder.d.ts +30 -4
  92. package/dist/esm/expression/expression-builder.js +5 -0
  93. package/dist/esm/index.d.ts +7 -1
  94. package/dist/esm/index.js +6 -0
  95. package/dist/esm/migration/migrator.d.ts +19 -2
  96. package/dist/esm/migration/migrator.js +76 -42
  97. package/dist/esm/operation-node/add-index-node.js +1 -1
  98. package/dist/esm/operation-node/cast-node.d.ts +13 -0
  99. package/dist/esm/operation-node/cast-node.js +17 -0
  100. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  101. package/dist/esm/operation-node/data-type-node.d.ts +5 -1
  102. package/dist/esm/operation-node/data-type-node.js +53 -0
  103. package/dist/esm/operation-node/delete-query-node.d.ts +4 -0
  104. package/dist/esm/operation-node/delete-query-node.js +12 -0
  105. package/dist/esm/operation-node/fetch-node.d.ts +15 -0
  106. package/dist/esm/operation-node/fetch-node.js +17 -0
  107. package/dist/esm/operation-node/insert-query-node.d.ts +4 -1
  108. package/dist/esm/operation-node/insert-query-node.js +5 -0
  109. package/dist/esm/operation-node/join-node.d.ts +1 -1
  110. package/dist/esm/operation-node/matched-node.d.ts +13 -0
  111. package/dist/esm/operation-node/matched-node.js +17 -0
  112. package/dist/esm/operation-node/merge-query-node.d.ts +25 -0
  113. package/dist/esm/operation-node/merge-query-node.js +43 -0
  114. package/dist/esm/operation-node/operation-node-transformer.d.ts +10 -0
  115. package/dist/esm/operation-node/operation-node-transformer.js +50 -0
  116. package/dist/esm/operation-node/operation-node-visitor.d.ts +10 -0
  117. package/dist/esm/operation-node/operation-node-visitor.js +5 -0
  118. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  119. package/dist/esm/operation-node/query-node.d.ts +10 -3
  120. package/dist/esm/operation-node/query-node.js +15 -1
  121. package/dist/esm/operation-node/select-query-node.d.ts +5 -0
  122. package/dist/esm/operation-node/select-query-node.js +6 -0
  123. package/dist/esm/operation-node/top-node.d.ts +14 -0
  124. package/dist/esm/operation-node/top-node.js +17 -0
  125. package/dist/esm/operation-node/update-query-node.d.ts +7 -1
  126. package/dist/esm/operation-node/update-query-node.js +11 -0
  127. package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
  128. package/dist/esm/parser/binary-operation-parser.js +2 -2
  129. package/dist/esm/parser/data-type-parser.js +8 -4
  130. package/dist/esm/parser/fetch-parser.d.ts +2 -0
  131. package/dist/esm/parser/fetch-parser.js +15 -0
  132. package/dist/esm/parser/insert-values-parser.d.ts +3 -3
  133. package/dist/esm/parser/merge-parser.d.ts +9 -0
  134. package/dist/esm/parser/merge-parser.js +28 -0
  135. package/dist/esm/parser/table-parser.d.ts +4 -3
  136. package/dist/esm/parser/top-parser.d.ts +2 -0
  137. package/dist/esm/parser/top-parser.js +17 -0
  138. package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
  139. package/dist/esm/query-builder/delete-query-builder.d.ts +99 -0
  140. package/dist/esm/query-builder/delete-query-builder.js +120 -0
  141. package/dist/esm/query-builder/insert-query-builder.d.ts +73 -3
  142. package/dist/esm/query-builder/insert-query-builder.js +242 -0
  143. package/dist/esm/query-builder/merge-query-builder.d.ts +557 -0
  144. package/dist/esm/query-builder/merge-query-builder.js +512 -0
  145. package/dist/esm/query-builder/merge-result.d.ts +4 -0
  146. package/dist/esm/query-builder/merge-result.js +7 -0
  147. package/dist/esm/query-builder/select-query-builder.d.ts +102 -7
  148. package/dist/esm/query-builder/select-query-builder.js +14 -0
  149. package/dist/esm/query-builder/update-query-builder.d.ts +82 -3
  150. package/dist/esm/query-builder/update-query-builder.js +98 -0
  151. package/dist/esm/query-compiler/default-query-compiler.d.ts +10 -0
  152. package/dist/esm/query-compiler/default-query-compiler.js +94 -10
  153. package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
  154. package/dist/esm/query-creator.d.ts +40 -2
  155. package/dist/esm/query-creator.js +10 -1
  156. package/dist/esm/schema/alter-table-add-index-builder.js +7 -3
  157. package/dist/esm/schema/column-definition-builder.d.ts +13 -1
  158. package/dist/esm/schema/column-definition-builder.js +15 -1
  159. package/dist/esm/util/infer-result.d.ts +2 -1
  160. package/dist/esm/util/type-utils.d.ts +3 -2
  161. package/package.json +22 -21
@@ -26,6 +26,16 @@ class ColumnDefinitionBuilder {
26
26
  autoIncrement() {
27
27
  return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, { autoIncrement: true }));
28
28
  }
29
+ /**
30
+ * Makes the column an identity column.
31
+ *
32
+ * This only works on some dialects like MS SQL Server (MSSQL).
33
+ *
34
+ * For PostgreSQL's `generated always as identity` use {@link generatedAlwaysAsIdentity}.
35
+ */
36
+ identity() {
37
+ return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, { identity: true }));
38
+ }
29
39
  /**
30
40
  * Makes the column the primary key.
31
41
  *
@@ -193,7 +203,11 @@ class ColumnDefinitionBuilder {
193
203
  }));
194
204
  }
195
205
  /**
196
- * Adds the `generated always as identity` specifier on supported dialects.
206
+ * Adds the `generated always as identity` specifier.
207
+ *
208
+ * This only works on some dialects like PostgreSQL.
209
+ *
210
+ * For MS SQL Server (MSSQL)'s identity column use {@link identity}.
197
211
  */
198
212
  generatedAlwaysAsIdentity() {
199
213
  return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, {
@@ -1,5 +1,6 @@
1
1
  import { DeleteResult } from '../query-builder/delete-result.js';
2
2
  import { InsertResult } from '../query-builder/insert-result.js';
3
+ import { MergeResult } from '../query-builder/merge-result.js';
3
4
  import { UpdateResult } from '../query-builder/update-result.js';
4
5
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
5
6
  import { Compilable } from './compilable.js';
@@ -43,5 +44,5 @@ import { Simplify } from './type-utils.js';
43
44
  * ```
44
45
  */
45
46
  export type InferResult<C extends Compilable<any> | CompiledQuery<any>> = C extends Compilable<infer O> ? ResolveResult<O> : C extends CompiledQuery<infer O> ? ResolveResult<O> : never;
46
- type ResolveResult<O> = O extends InsertResult | UpdateResult | DeleteResult ? O : Simplify<O>[];
47
+ type ResolveResult<O> = O extends InsertResult | UpdateResult | DeleteResult | MergeResult ? O : Simplify<O>[];
47
48
  export {};
@@ -2,6 +2,7 @@ import { InsertResult } from '../query-builder/insert-result.js';
2
2
  import { DeleteResult } from '../query-builder/delete-result.js';
3
3
  import { UpdateResult } from '../query-builder/update-result.js';
4
4
  import { KyselyTypeError } from './type-error.js';
5
+ import { MergeResult } from '../query-builder/merge-result.js';
5
6
  /**
6
7
  * Given a database type and a union of table names in that db, returns
7
8
  * a union type with all possible column names.
@@ -88,8 +89,8 @@ export type AnyAliasedColumnWithTable<DB, TB extends keyof DB> = `${AnyColumnWit
88
89
  * Extracts the item type of an array.
89
90
  */
90
91
  export type ArrayItemType<T> = T extends ReadonlyArray<infer I> ? I : never;
91
- export type SimplifySingleResult<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : Simplify<O> | undefined;
92
- export type SimplifyResult<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : Simplify<O>;
92
+ export type SimplifySingleResult<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : O extends MergeResult ? O : Simplify<O> | undefined;
93
+ export type SimplifyResult<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : O extends MergeResult ? O : Simplify<O>;
93
94
  export type Simplify<T> = DrainOuterGeneric<{
94
95
  [K in keyof T]: T[K];
95
96
  } & {}>;
@@ -58,4 +58,5 @@ export interface ColumnMetadata {
58
58
  readonly isAutoIncrementing: boolean;
59
59
  readonly isNullable: boolean;
60
60
  readonly hasDefaultValue: boolean;
61
+ readonly comment?: string;
61
62
  }
@@ -14,8 +14,12 @@ export class MssqlIntrospector {
14
14
  .selectFrom('sys.tables as tables')
15
15
  .leftJoin('sys.schemas as table_schemas', 'table_schemas.schema_id', 'tables.schema_id')
16
16
  .innerJoin('sys.columns as columns', 'columns.object_id', 'tables.object_id')
17
- .innerJoin('sys.types as types', 'types.system_type_id', 'columns.system_type_id')
17
+ .innerJoin('sys.types as types', 'types.user_type_id', 'columns.user_type_id')
18
18
  .leftJoin('sys.schemas as type_schemas', 'type_schemas.schema_id', 'types.schema_id')
19
+ .leftJoin('sys.extended_properties as comments', (join) => join
20
+ .onRef('comments.major_id', '=', 'tables.object_id')
21
+ .onRef('comments.minor_id', '=', 'columns.column_id')
22
+ .on('comments.name', '=', 'MS_Description'))
19
23
  .$if(!options.withInternalKyselyTables, (qb) => qb
20
24
  .where('tables.name', '!=', DEFAULT_MIGRATION_TABLE)
21
25
  .where('tables.name', '!=', DEFAULT_MIGRATION_LOCK_TABLE))
@@ -36,13 +40,18 @@ export class MssqlIntrospector {
36
40
  'types.is_nullable as type_is_nullable',
37
41
  'types.name as type_name',
38
42
  'type_schemas.name as type_schema_name',
43
+ 'comments.value as column_comment',
39
44
  ])
40
45
  .unionAll(this.#db
41
46
  .selectFrom('sys.views as views')
42
47
  .leftJoin('sys.schemas as view_schemas', 'view_schemas.schema_id', 'views.schema_id')
43
48
  .innerJoin('sys.columns as columns', 'columns.object_id', 'views.object_id')
44
- .innerJoin('sys.types as types', 'types.system_type_id', 'columns.system_type_id')
49
+ .innerJoin('sys.types as types', 'types.user_type_id', 'columns.user_type_id')
45
50
  .leftJoin('sys.schemas as type_schemas', 'type_schemas.schema_id', 'types.schema_id')
51
+ .leftJoin('sys.extended_properties as comments', (join) => join
52
+ .onRef('comments.major_id', '=', 'views.object_id')
53
+ .onRef('comments.minor_id', '=', 'columns.column_id')
54
+ .on('comments.name', '=', 'MS_Description'))
46
55
  .select([
47
56
  'views.name as table_name',
48
57
  'views.type as table_type',
@@ -57,6 +66,7 @@ export class MssqlIntrospector {
57
66
  'types.is_nullable as type_is_nullable',
58
67
  'types.name as type_name',
59
68
  'type_schemas.name as type_schema_name',
69
+ 'comments.value as column_comment',
60
70
  ]))
61
71
  .orderBy('table_schema_name')
62
72
  .orderBy('table_name')
@@ -84,6 +94,7 @@ export class MssqlIntrospector {
84
94
  isAutoIncrementing: rawColumn.column_is_identity,
85
95
  isNullable: rawColumn.column_is_nullable && rawColumn.type_is_nullable,
86
96
  name: rawColumn.column_name,
97
+ comment: rawColumn.column_comment ?? undefined,
87
98
  }));
88
99
  }
89
100
  return Object.values(tableDictionary);
@@ -1,11 +1,15 @@
1
1
  import { AddColumnNode } from '../../operation-node/add-column-node.js';
2
2
  import { AlterTableColumnAlterationNode } from '../../operation-node/alter-table-node.js';
3
3
  import { DropColumnNode } from '../../operation-node/drop-column-node.js';
4
+ import { OffsetNode } from '../../operation-node/offset-node.js';
5
+ import { MergeQueryNode } from '../../operation-node/merge-query-node.js';
4
6
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
5
7
  export declare class MssqlQueryCompiler extends DefaultQueryCompiler {
6
8
  protected getCurrentParameterPlaceholder(): string;
9
+ protected visitOffset(node: OffsetNode): void;
7
10
  protected compileColumnAlterations(columnAlterations: readonly AlterTableColumnAlterationNode[]): void;
8
11
  protected visitAddColumn(node: AddColumnNode): void;
9
12
  protected visitDropColumn(node: DropColumnNode): void;
13
+ protected visitMergeQuery(node: MergeQueryNode): void;
10
14
  protected announcesNewColumnDataType(): boolean;
11
15
  }
@@ -4,6 +4,10 @@ export class MssqlQueryCompiler extends DefaultQueryCompiler {
4
4
  getCurrentParameterPlaceholder() {
5
5
  return `@${this.numParameters}`;
6
6
  }
7
+ visitOffset(node) {
8
+ super.visitOffset(node);
9
+ this.append(' rows');
10
+ }
7
11
  // mssql allows multi-column alterations in a single statement,
8
12
  // but you can only use the command keyword/s once.
9
13
  // it also doesn't support multiple kinds of commands in the same
@@ -55,6 +59,10 @@ export class MssqlQueryCompiler extends DefaultQueryCompiler {
55
59
  visitDropColumn(node) {
56
60
  this.visitNode(node.column);
57
61
  }
62
+ visitMergeQuery(node) {
63
+ super.visitMergeQuery(node);
64
+ this.append(';');
65
+ }
58
66
  announcesNewColumnDataType() {
59
67
  return false;
60
68
  }
@@ -31,6 +31,7 @@ export class MysqlIntrospector {
31
31
  'columns.IS_NULLABLE',
32
32
  'columns.DATA_TYPE',
33
33
  'columns.EXTRA',
34
+ 'columns.COLUMN_COMMENT',
34
35
  ])
35
36
  .where('columns.TABLE_SCHEMA', '=', sql `database()`)
36
37
  .orderBy('columns.TABLE_NAME')
@@ -67,6 +68,7 @@ export class MysqlIntrospector {
67
68
  isNullable: it.IS_NULLABLE === 'YES',
68
69
  isAutoIncrementing: it.EXTRA.toLowerCase().includes('auto_increment'),
69
70
  hasDefaultValue: it.COLUMN_DEFAULT !== null,
71
+ comment: it.COLUMN_COMMENT === '' ? undefined : it.COLUMN_COMMENT,
70
72
  }));
71
73
  return tables;
72
74
  }, []);
@@ -52,7 +52,7 @@ export interface PostgresCursor<T> {
52
52
  }
53
53
  export type PostgresCursorConstructor = new <T>(sql: string, parameters: unknown[]) => PostgresCursor<T>;
54
54
  export interface PostgresQueryResult<R> {
55
- command: 'UPDATE' | 'DELETE' | 'INSERT' | 'SELECT';
55
+ command: 'UPDATE' | 'DELETE' | 'INSERT' | 'SELECT' | 'MERGE';
56
56
  rowCount: number;
57
57
  rows: R[];
58
58
  }
@@ -71,7 +71,8 @@ class PostgresConnection {
71
71
  ]);
72
72
  if (result.command === 'INSERT' ||
73
73
  result.command === 'UPDATE' ||
74
- result.command === 'DELETE') {
74
+ result.command === 'DELETE' ||
75
+ result.command === 'MERGE') {
75
76
  const numAffectedRows = BigInt(result.rowCount);
76
77
  return {
77
78
  // TODO: remove.
@@ -36,6 +36,7 @@ export class PostgresIntrospector {
36
36
  'ns.nspname as schema',
37
37
  'typ.typname as type',
38
38
  'dtns.nspname as type_schema',
39
+ sql `col_description(a.attrelid, a.attnum)`.as('column_description'),
39
40
  // Detect if the column is auto incrementing by finding the sequence
40
41
  // that is created for `serial` and `bigserial` columns.
41
42
  this.#db
@@ -90,6 +91,7 @@ export class PostgresIntrospector {
90
91
  isNullable: !it.not_null,
91
92
  isAutoIncrementing: !!it.auto_incrementing,
92
93
  hasDefaultValue: it.has_default,
94
+ comment: it.column_description ?? undefined,
93
95
  }));
94
96
  return tables;
95
97
  }, []);
@@ -61,6 +61,7 @@ export class SqliteIntrospector {
61
61
  isNullable: !col.notnull,
62
62
  isAutoIncrementing: col.name === autoIncrementCol,
63
63
  hasDefaultValue: col.dflt_value != null,
64
+ comment: undefined,
64
65
  })),
65
66
  };
66
67
  }
@@ -14,7 +14,7 @@ export interface QueryResult<O> {
14
14
  */
15
15
  readonly numUpdatedOrDeletedRows?: bigint;
16
16
  /**
17
- * This is defined for insert, update and delete queries and contains
17
+ * This is defined for insert, update, delete and merge queries and contains
18
18
  * the number of rows the query inserted/updated/deleted.
19
19
  */
20
20
  readonly numAffectedRows?: bigint;
@@ -15,6 +15,7 @@ import { OperandExpression } from '../parser/expression-parser.js';
15
15
  import { RefTuple2, RefTuple3, RefTuple4, RefTuple5, ValTuple2, ValTuple3, ValTuple4, ValTuple5 } from '../parser/tuple-parser.js';
16
16
  import { Selectable } from '../util/column-type.js';
17
17
  import { KyselyTypeError } from '../util/type-error.js';
18
+ import { DataTypeExpression } from '../parser/data-type-parser.js';
18
19
  export interface ExpressionBuilder<DB, TB extends keyof DB> {
19
20
  /**
20
21
  * Creates a binary expression.
@@ -194,7 +195,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
194
195
  selectFrom<TE extends keyof DB & string>(from: TE[]): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
195
196
  selectFrom<TE extends TableExpression<DB, TB>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
196
197
  selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
197
- selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, TB | ExtractTableAlias<DB, TE>, {}>;
198
+ selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, TB | ExtractTableAlias<DB & PickTableWithAlias<DB, TE>, TE>, {}>;
198
199
  selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
199
200
  /**
200
201
  * Creates a `case` statement/operator.
@@ -218,7 +219,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
218
219
  * .when('gender', '=', 'female')
219
220
  * .then(
220
221
  * eb
221
- * .case('martialStatus')
222
+ * .case('maritalStatus')
222
223
  * .when('single')
223
224
  * .then('Ms.')
224
225
  * .else('Mrs.')
@@ -238,7 +239,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
238
239
  * case
239
240
  * when "gender" = $1 then $2
240
241
  * when "gender" = $3 then
241
- * case "martialStatus"
242
+ * case "maritalStatus"
242
243
  * when $4 then $5
243
244
  * else $6
244
245
  * end
@@ -775,7 +776,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
775
776
  * ```ts
776
777
  * db.selectFrom('person')
777
778
  * .selectAll('person')
778
- * .where((eb) => parens(
779
+ * .where((eb) => eb.parens(
779
780
  * eb('age', '=', 1).or('age', '=', 2))
780
781
  * ).and(
781
782
  * eb('first_name', '=', 'Jennifer').or('first_name', '=', 'Arnold')
@@ -792,6 +793,31 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
792
793
  */
793
794
  parens<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: OP, rhs: VE): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
794
795
  parens<T>(expr: Expression<T>): ExpressionWrapper<DB, TB, T>;
796
+ /**
797
+ * Creates a `cast(expr as dataType)` expression.
798
+ *
799
+ * Since Kysely can't know the mapping between javascript and database types,
800
+ * you need to provide both explicitly.
801
+ *
802
+ * ### Examples
803
+ *
804
+ * ```ts
805
+ * db.selectFrom('person')
806
+ * .select((eb) => [
807
+ * 'id',
808
+ * 'first_name',
809
+ * eb.cast<number>('age', 'integer').as('age')
810
+ * ])
811
+ * ```
812
+ *
813
+ * The generated SQL (PostgreSQL):
814
+ *
815
+ * ```sql
816
+ * select cast("age" as integer) as "age"
817
+ * from "person"
818
+ * ```
819
+ */
820
+ cast<T, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE, dataType: DataTypeExpression): ExpressionWrapper<DB, TB, T>;
795
821
  /**
796
822
  * See {@link QueryCreator.withSchema}
797
823
  *
@@ -21,6 +21,8 @@ import { BinaryOperationNode } from '../operation-node/binary-operation-node.js'
21
21
  import { AndNode } from '../operation-node/and-node.js';
22
22
  import { TupleNode } from '../operation-node/tuple-node.js';
23
23
  import { JSONPathNode } from '../operation-node/json-path-node.js';
24
+ import { parseDataTypeExpression, } from '../parser/data-type-parser.js';
25
+ import { CastNode } from '../operation-node/cast-node.js';
24
26
  export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
25
27
  function binary(lhs, op, rhs) {
26
28
  return new ExpressionWrapper(parseValueBinaryOperation(lhs, op, rhs));
@@ -107,6 +109,9 @@ export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
107
109
  return new ExpressionWrapper(ParensNode.create(node));
108
110
  }
109
111
  },
112
+ cast(expr, dataType) {
113
+ return new ExpressionWrapper(CastNode.create(parseReferenceExpression(expr), parseDataTypeExpression(dataType)));
114
+ },
110
115
  withSchema(schema) {
111
116
  return createExpressionBuilder(executor.withPluginAtFront(new WithSchemaPlugin(schema)));
112
117
  },
@@ -20,6 +20,8 @@ export * from './query-builder/on-conflict-builder.js';
20
20
  export * from './query-builder/aggregate-function-builder.js';
21
21
  export * from './query-builder/case-builder.js';
22
22
  export * from './query-builder/json-path-builder.js';
23
+ export * from './query-builder/merge-query-builder.js';
24
+ export * from './query-builder/merge-result.js';
23
25
  export * from './raw-builder/raw-builder.js';
24
26
  export * from './raw-builder/sql.js';
25
27
  export * from './query-executor/query-executor.js';
@@ -177,6 +179,10 @@ export * from './operation-node/json-path-leg-node.js';
177
179
  export * from './operation-node/json-path-node.js';
178
180
  export * from './operation-node/json-operator-chain-node.js';
179
181
  export * from './operation-node/tuple-node.js';
182
+ export * from './operation-node/merge-query-node.js';
183
+ export * from './operation-node/matched-node.js';
184
+ export * from './operation-node/fetch-node.js';
185
+ export * from './operation-node/top-node.js';
180
186
  export * from './util/column-type.js';
181
187
  export * from './util/compilable.js';
182
188
  export * from './util/explainable.js';
@@ -188,7 +194,7 @@ export { logOnce } from './util/log-once.js';
188
194
  export { SelectExpression, SelectCallback, SelectArg, Selection, CallbackSelection, } from './parser/select-parser.js';
189
195
  export { ReferenceExpression, ReferenceExpressionOrList, SimpleReferenceExpression, StringReference, ExtractTypeFromStringReference, ExtractTypeFromReferenceExpression, } from './parser/reference-parser.js';
190
196
  export { ValueExpression, ValueExpressionOrList, } from './parser/value-parser.js';
191
- export { TableExpression, TableExpressionOrList, } from './parser/table-parser.js';
197
+ export { SimpleTableReference, TableExpression, TableExpressionOrList, } from './parser/table-parser.js';
192
198
  export { JoinReferenceExpression, JoinCallbackExpression, } from './parser/join-parser.js';
193
199
  export { InsertObject } from './parser/insert-values-parser.js';
194
200
  export { UpdateObject } from './parser/update-set-parser.js';
package/dist/esm/index.js CHANGED
@@ -21,6 +21,8 @@ export * from './query-builder/on-conflict-builder.js';
21
21
  export * from './query-builder/aggregate-function-builder.js';
22
22
  export * from './query-builder/case-builder.js';
23
23
  export * from './query-builder/json-path-builder.js';
24
+ export * from './query-builder/merge-query-builder.js';
25
+ export * from './query-builder/merge-result.js';
24
26
  export * from './raw-builder/raw-builder.js';
25
27
  export * from './raw-builder/sql.js';
26
28
  export * from './query-executor/query-executor.js';
@@ -178,6 +180,10 @@ export * from './operation-node/json-path-leg-node.js';
178
180
  export * from './operation-node/json-path-node.js';
179
181
  export * from './operation-node/json-operator-chain-node.js';
180
182
  export * from './operation-node/tuple-node.js';
183
+ export * from './operation-node/merge-query-node.js';
184
+ export * from './operation-node/matched-node.js';
185
+ export * from './operation-node/fetch-node.js';
186
+ export * from './operation-node/top-node.js';
181
187
  export * from './util/column-type.js';
182
188
  export * from './util/compilable.js';
183
189
  export * from './util/explainable.js';
@@ -1,6 +1,7 @@
1
1
  import { Kysely } from '../kysely.js';
2
2
  export declare const DEFAULT_MIGRATION_TABLE = "kysely_migration";
3
3
  export declare const DEFAULT_MIGRATION_LOCK_TABLE = "kysely_migration_lock";
4
+ export declare const DEFAULT_ALLOW_UNORDERED_MIGRATIONS = false;
4
5
  export declare const MIGRATION_LOCK_ID = "migration_lock";
5
6
  export declare const NO_MIGRATIONS: NoMigrations;
6
7
  export interface Migration {
@@ -58,7 +59,7 @@ export declare class Migrator {
58
59
  * This method goes through all possible migrations provided by the provider and runs the
59
60
  * ones whose names come alphabetically after the last migration that has been run. If the
60
61
  * list of executed migrations doesn't match the beginning of the list of possible migrations
61
- * an error is thrown.
62
+ * an error is returned.
62
63
  *
63
64
  * ### Examples
64
65
  *
@@ -197,6 +198,20 @@ export interface MigratorProps {
197
198
  * This only works on postgres.
198
199
  */
199
200
  readonly migrationTableSchema?: string;
201
+ /**
202
+ * Enforces whether or not migrations must be run in alpha-numeric order.
203
+ *
204
+ * When false, migrations must be run in their exact alpha-numeric order.
205
+ * This is checked against the migrations already run in the database
206
+ * (`migrationTableName'). This ensures your migrations are always run in
207
+ * the same order and is the safest option.
208
+ *
209
+ * When true, migrations are still run in alpha-numeric order, but
210
+ * the order is not checked against already-run migrations in the database.
211
+ * Kysely will simply run all migrations that haven't run yet, in alpha-numeric
212
+ * order.
213
+ */
214
+ readonly allowUnorderedMigrations?: boolean;
200
215
  }
201
216
  /**
202
217
  * All migration methods ({@link Migrator.migrateTo | migrateTo},
@@ -231,12 +246,13 @@ export interface MigrationResultSet {
231
246
  */
232
247
  readonly results?: MigrationResult[];
233
248
  }
249
+ type MigrationDirection = 'Up' | 'Down';
234
250
  export interface MigrationResult {
235
251
  readonly migrationName: string;
236
252
  /**
237
253
  * The direction in which this migration was executed.
238
254
  */
239
- readonly direction: 'Up' | 'Down';
255
+ readonly direction: MigrationDirection;
240
256
  /**
241
257
  * The execution status.
242
258
  *
@@ -293,3 +309,4 @@ export interface MigrationInfo {
293
309
  */
294
310
  executedAt?: Date;
295
311
  }
312
+ export {};