kysely 0.7.1 → 0.7.5

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 (194) hide show
  1. package/README.md +24 -19
  2. package/dist/cjs/dialect/dialect-adapter.d.ts +11 -9
  3. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +1 -1
  4. package/dist/cjs/dialect/mysql/mysql-driver.js +1 -0
  5. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +0 -1
  6. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -2
  7. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -4
  8. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -18
  9. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +0 -1
  10. package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -2
  11. package/dist/cjs/driver/database-connection.d.ts +2 -1
  12. package/dist/cjs/driver/driver.d.ts +1 -1
  13. package/dist/cjs/driver/single-connection-provider.d.ts +0 -1
  14. package/dist/cjs/driver/single-connection-provider.js +2 -2
  15. package/dist/cjs/index.d.ts +2 -1
  16. package/dist/cjs/index.js +2 -1
  17. package/dist/cjs/kysely.d.ts +7 -6
  18. package/dist/cjs/kysely.js +8 -6
  19. package/dist/cjs/migration/migration.js +11 -10
  20. package/dist/cjs/operation-node/alter-column-node.d.ts +2 -2
  21. package/dist/cjs/operation-node/alter-column-node.js +2 -2
  22. package/dist/cjs/operation-node/alter-table-node.d.ts +2 -2
  23. package/dist/cjs/operation-node/alter-table-node.js +2 -2
  24. package/dist/cjs/operation-node/column-definition-node.d.ts +2 -2
  25. package/dist/cjs/operation-node/column-definition-node.js +2 -2
  26. package/dist/cjs/operation-node/create-index-node.d.ts +2 -2
  27. package/dist/cjs/operation-node/create-index-node.js +2 -2
  28. package/dist/cjs/operation-node/create-table-node.d.ts +2 -1
  29. package/dist/cjs/operation-node/create-table-node.js +1 -5
  30. package/dist/cjs/operation-node/drop-index-node.d.ts +3 -3
  31. package/dist/cjs/operation-node/drop-index-node.js +2 -2
  32. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +12 -1
  33. package/dist/cjs/operation-node/foreign-key-constraint-node.js +6 -0
  34. package/dist/cjs/operation-node/insert-query-node.d.ts +5 -2
  35. package/dist/cjs/operation-node/insert-query-node.js +2 -9
  36. package/dist/cjs/operation-node/join-node.d.ts +1 -0
  37. package/dist/cjs/operation-node/join-node.js +8 -0
  38. package/dist/cjs/operation-node/on-conflict-node.d.ts +2 -2
  39. package/dist/cjs/operation-node/on-conflict-node.js +2 -2
  40. package/dist/cjs/operation-node/on-duplicate-key-node.d.ts +14 -0
  41. package/dist/cjs/operation-node/on-duplicate-key-node.js +18 -0
  42. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  43. package/dist/cjs/operation-node/operation-node-transformer.js +12 -0
  44. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  45. package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
  46. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  47. package/dist/cjs/operation-node/references-node.d.ts +5 -3
  48. package/dist/cjs/operation-node/references-node.js +6 -0
  49. package/dist/cjs/operation-node/table-node.js +2 -2
  50. package/dist/cjs/parser/data-type-parser.d.ts +5 -0
  51. package/dist/cjs/parser/data-type-parser.js +11 -0
  52. package/dist/cjs/parser/default-value-parser.d.ts +6 -0
  53. package/dist/cjs/parser/default-value-parser.js +11 -0
  54. package/dist/cjs/parser/filter-parser.d.ts +2 -2
  55. package/dist/cjs/parser/filter-parser.js +34 -36
  56. package/dist/cjs/parser/join-parser.d.ts +1 -1
  57. package/dist/cjs/parser/join-parser.js +9 -11
  58. package/dist/cjs/parser/parse-context.d.ts +34 -7
  59. package/dist/cjs/parser/parse-context.js +42 -34
  60. package/dist/cjs/parser/reference-parser.d.ts +2 -2
  61. package/dist/cjs/parser/reference-parser.js +16 -12
  62. package/dist/cjs/parser/select-parser.d.ts +1 -2
  63. package/dist/cjs/parser/select-parser.js +4 -5
  64. package/dist/cjs/parser/table-parser.js +11 -6
  65. package/dist/cjs/parser/update-set-parser.js +1 -1
  66. package/dist/cjs/parser/value-parser.js +1 -1
  67. package/dist/cjs/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +7 -7
  68. package/dist/cjs/query-builder/{sub-query-builder.js → expression-builder.js} +6 -10
  69. package/dist/cjs/query-builder/join-builder.d.ts +2 -2
  70. package/dist/cjs/query-builder/join-builder.js +8 -12
  71. package/dist/cjs/query-builder/query-builder.d.ts +47 -8
  72. package/dist/cjs/query-builder/query-builder.js +163 -91
  73. package/dist/cjs/query-builder/type-utils.d.ts +5 -5
  74. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -1
  75. package/dist/cjs/query-compiler/default-query-compiler.js +26 -6
  76. package/dist/cjs/query-creator.d.ts +2 -2
  77. package/dist/cjs/query-creator.js +8 -12
  78. package/dist/cjs/schema/alter-table-builder.d.ts +31 -8
  79. package/dist/cjs/schema/alter-table-builder.js +80 -7
  80. package/dist/cjs/schema/column-definition-builder.d.ts +10 -4
  81. package/dist/cjs/schema/column-definition-builder.js +11 -6
  82. package/dist/cjs/schema/create-index-builder.d.ts +5 -5
  83. package/dist/cjs/schema/create-index-builder.js +19 -28
  84. package/dist/cjs/schema/create-schema-builder.d.ts +5 -5
  85. package/dist/cjs/schema/create-schema-builder.js +9 -13
  86. package/dist/cjs/schema/create-table-builder.d.ts +22 -10
  87. package/dist/cjs/schema/create-table-builder.js +41 -34
  88. package/dist/cjs/schema/drop-index-builder.d.ts +5 -5
  89. package/dist/cjs/schema/drop-index-builder.js +11 -16
  90. package/dist/cjs/schema/drop-schema-builder.d.ts +5 -5
  91. package/dist/cjs/schema/drop-schema-builder.js +9 -13
  92. package/dist/cjs/schema/drop-table-builder.d.ts +5 -5
  93. package/dist/cjs/schema/drop-table-builder.js +9 -13
  94. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +14 -0
  95. package/dist/cjs/schema/foreign-key-constraint-builder.js +26 -0
  96. package/dist/cjs/transformers/with-schema-transformer.d.ts +0 -5
  97. package/dist/cjs/transformers/with-schema-transformer.js +21 -21
  98. package/dist/esm/dialect/dialect-adapter.d.ts +11 -9
  99. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +1 -1
  100. package/dist/esm/dialect/mysql/mysql-driver.js +1 -0
  101. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +0 -1
  102. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -2
  103. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -4
  104. package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -18
  105. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +0 -1
  106. package/dist/esm/dialect/postgres/postgres-introspector.js +2 -2
  107. package/dist/esm/driver/database-connection.d.ts +2 -1
  108. package/dist/esm/driver/driver.d.ts +1 -1
  109. package/dist/esm/driver/single-connection-provider.d.ts +0 -1
  110. package/dist/esm/driver/single-connection-provider.js +2 -2
  111. package/dist/esm/index.d.ts +2 -1
  112. package/dist/esm/index.js +2 -1
  113. package/dist/esm/kysely.d.ts +7 -6
  114. package/dist/esm/kysely.js +8 -6
  115. package/dist/esm/migration/migration.js +12 -11
  116. package/dist/esm/operation-node/alter-column-node.d.ts +2 -2
  117. package/dist/esm/operation-node/alter-column-node.js +2 -2
  118. package/dist/esm/operation-node/alter-table-node.d.ts +2 -2
  119. package/dist/esm/operation-node/alter-table-node.js +2 -2
  120. package/dist/esm/operation-node/column-definition-node.d.ts +2 -2
  121. package/dist/esm/operation-node/column-definition-node.js +2 -2
  122. package/dist/esm/operation-node/create-index-node.d.ts +2 -2
  123. package/dist/esm/operation-node/create-index-node.js +2 -2
  124. package/dist/esm/operation-node/create-table-node.d.ts +2 -1
  125. package/dist/esm/operation-node/create-table-node.js +1 -5
  126. package/dist/esm/operation-node/drop-index-node.d.ts +3 -3
  127. package/dist/esm/operation-node/drop-index-node.js +2 -2
  128. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +12 -1
  129. package/dist/esm/operation-node/foreign-key-constraint-node.js +6 -0
  130. package/dist/esm/operation-node/insert-query-node.d.ts +5 -2
  131. package/dist/esm/operation-node/insert-query-node.js +2 -9
  132. package/dist/esm/operation-node/join-node.d.ts +1 -0
  133. package/dist/esm/operation-node/join-node.js +8 -0
  134. package/dist/esm/operation-node/on-conflict-node.d.ts +2 -2
  135. package/dist/esm/operation-node/on-conflict-node.js +2 -2
  136. package/dist/esm/operation-node/on-duplicate-key-node.d.ts +14 -0
  137. package/dist/esm/operation-node/on-duplicate-key-node.js +15 -0
  138. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  139. package/dist/esm/operation-node/operation-node-transformer.js +12 -0
  140. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  141. package/dist/esm/operation-node/operation-node-visitor.js +4 -0
  142. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  143. package/dist/esm/operation-node/references-node.d.ts +5 -3
  144. package/dist/esm/operation-node/references-node.js +6 -0
  145. package/dist/esm/operation-node/table-node.js +2 -2
  146. package/dist/esm/parser/data-type-parser.d.ts +5 -0
  147. package/dist/esm/parser/data-type-parser.js +7 -0
  148. package/dist/esm/parser/default-value-parser.d.ts +6 -0
  149. package/dist/esm/parser/default-value-parser.js +7 -0
  150. package/dist/esm/parser/filter-parser.d.ts +2 -2
  151. package/dist/esm/parser/filter-parser.js +31 -33
  152. package/dist/esm/parser/join-parser.d.ts +1 -1
  153. package/dist/esm/parser/join-parser.js +7 -9
  154. package/dist/esm/parser/parse-context.d.ts +34 -7
  155. package/dist/esm/parser/parse-context.js +40 -32
  156. package/dist/esm/parser/reference-parser.d.ts +2 -2
  157. package/dist/esm/parser/reference-parser.js +16 -12
  158. package/dist/esm/parser/select-parser.d.ts +1 -2
  159. package/dist/esm/parser/select-parser.js +3 -3
  160. package/dist/esm/parser/table-parser.js +11 -6
  161. package/dist/esm/parser/update-set-parser.js +1 -1
  162. package/dist/esm/parser/value-parser.js +1 -1
  163. package/dist/esm/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +7 -7
  164. package/dist/esm/query-builder/{sub-query-builder.js → expression-builder.js} +4 -8
  165. package/dist/esm/query-builder/join-builder.d.ts +2 -2
  166. package/dist/esm/query-builder/join-builder.js +9 -13
  167. package/dist/esm/query-builder/query-builder.d.ts +47 -8
  168. package/dist/esm/query-builder/query-builder.js +165 -93
  169. package/dist/esm/query-builder/type-utils.d.ts +5 -5
  170. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -1
  171. package/dist/esm/query-compiler/default-query-compiler.js +27 -7
  172. package/dist/esm/query-creator.d.ts +2 -2
  173. package/dist/esm/query-creator.js +8 -12
  174. package/dist/esm/schema/alter-table-builder.d.ts +31 -8
  175. package/dist/esm/schema/alter-table-builder.js +78 -6
  176. package/dist/esm/schema/column-definition-builder.d.ts +10 -4
  177. package/dist/esm/schema/column-definition-builder.js +12 -7
  178. package/dist/esm/schema/create-index-builder.d.ts +5 -5
  179. package/dist/esm/schema/create-index-builder.js +19 -28
  180. package/dist/esm/schema/create-schema-builder.d.ts +5 -5
  181. package/dist/esm/schema/create-schema-builder.js +9 -13
  182. package/dist/esm/schema/create-table-builder.d.ts +22 -10
  183. package/dist/esm/schema/create-table-builder.js +41 -34
  184. package/dist/esm/schema/drop-index-builder.d.ts +5 -5
  185. package/dist/esm/schema/drop-index-builder.js +11 -16
  186. package/dist/esm/schema/drop-schema-builder.d.ts +5 -5
  187. package/dist/esm/schema/drop-schema-builder.js +9 -13
  188. package/dist/esm/schema/drop-table-builder.d.ts +5 -5
  189. package/dist/esm/schema/drop-table-builder.js +9 -13
  190. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +14 -0
  191. package/dist/esm/schema/foreign-key-constraint-builder.js +22 -0
  192. package/dist/esm/transformers/with-schema-transformer.d.ts +0 -5
  193. package/dist/esm/transformers/with-schema-transformer.js +21 -21
  194. package/package.json +1 -1
@@ -4,5 +4,4 @@ export declare class MysqlIntrospector implements DatabaseIntrospector {
4
4
  #private;
5
5
  constructor(db: Kysely<any>);
6
6
  getMetadata(options?: DatabaseMetadataOptions): Promise<DatabaseMetadata>;
7
- private parseTableMetadata;
8
7
  }
@@ -18,10 +18,10 @@ export class MysqlIntrospector {
18
18
  }
19
19
  const rawColumns = await query.execute();
20
20
  return {
21
- tables: this.parseTableMetadata(rawColumns),
21
+ tables: this.#parseTableMetadata(rawColumns),
22
22
  };
23
23
  }
24
- parseTableMetadata(columns) {
24
+ #parseTableMetadata(columns) {
25
25
  return columns.reduce((tables, it) => {
26
26
  let table = tables.find((tbl) => tbl.name === it.TABLE_NAME);
27
27
  if (!table) {
@@ -1,12 +1,8 @@
1
1
  import { ColumnDefinitionNode } from '../../operation-node/column-definition-node.js';
2
- import { InsertQueryNode } from '../../operation-node/insert-query-node.js';
3
- import { OnConflictNode } from '../../operation-node/on-conflict-node.js';
4
2
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
5
3
  export declare class MysqlQueryCompiler extends DefaultQueryCompiler {
6
4
  protected visitColumnDefinition(node: ColumnDefinitionNode): void;
7
- protected visitOnConflict(node: OnConflictNode): void;
8
5
  protected visitReturning(): void;
9
- protected getInsertInto(node: InsertQueryNode): string;
10
6
  protected getSql(): string;
11
7
  protected getCurrentParameterPlaceholder(): string;
12
8
  protected getLeftIdentifierWrapper(): string;
@@ -29,27 +29,9 @@ export class MysqlQueryCompiler extends DefaultQueryCompiler {
29
29
  this.visitNode(node.check);
30
30
  }
31
31
  }
32
- visitOnConflict(node) {
33
- if (node.doNothing) {
34
- // This is already handled by `getInsertInto`.
35
- return;
36
- }
37
- if (node.updates) {
38
- this.append('on duplicate key update ');
39
- this.compileList(node.updates);
40
- }
41
- }
42
32
  visitReturning() {
43
33
  // Do nothing.
44
34
  }
45
- getInsertInto(node) {
46
- if (node.onConflict?.doNothing) {
47
- return 'insert ignore into';
48
- }
49
- else {
50
- return 'insert into';
51
- }
52
- }
53
35
  getSql() {
54
36
  return super.getSql().trimEnd();
55
37
  }
@@ -4,5 +4,4 @@ export declare class PostgresIntrospector implements DatabaseIntrospector {
4
4
  #private;
5
5
  constructor(db: Kysely<any>);
6
6
  getMetadata(options?: DatabaseMetadataOptions): Promise<DatabaseMetadata>;
7
- private parseTableMetadata;
8
7
  }
@@ -30,10 +30,10 @@ export class PostgresIntrospector {
30
30
  }
31
31
  const rawColumns = await query.execute();
32
32
  return {
33
- tables: this.parseTableMetadata(rawColumns),
33
+ tables: this.#parseTableMetadata(rawColumns),
34
34
  };
35
35
  }
36
- parseTableMetadata(columns) {
36
+ #parseTableMetadata(columns) {
37
37
  return columns.reduce((tables, it) => {
38
38
  let table = tables.find((tbl) => tbl.name === it.table && tbl.schema === it.schema);
39
39
  if (!table) {
@@ -14,7 +14,8 @@ export interface QueryResult<O> {
14
14
  */
15
15
  readonly insertedPrimaryKey?: number;
16
16
  /**
17
- * This is defined if the query returned any rows.
17
+ * The rows returned by the query. This is always defined and is
18
+ * empty if the query returned no rows.
18
19
  */
19
20
  readonly rows: O[];
20
21
  }
@@ -45,7 +45,7 @@ export interface Driver {
45
45
  destroy(): Promise<void>;
46
46
  }
47
47
  export interface TransactionSettings {
48
- isolationLevel?: IsolationLevel;
48
+ readonly isolationLevel?: IsolationLevel;
49
49
  }
50
50
  export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable"];
51
51
  export declare type IsolationLevel = ArrayItemType<typeof TRANSACTION_ISOLATION_LEVELS>;
@@ -4,5 +4,4 @@ export declare class SingleConnectionProvider implements ConnectionProvider {
4
4
  #private;
5
5
  constructor(connection: DatabaseConnection);
6
6
  withConnection<T>(runner: (connection: DatabaseConnection) => Promise<T>): Promise<T>;
7
- private run;
8
7
  }
@@ -8,7 +8,7 @@ export class SingleConnectionProvider {
8
8
  while (this.#runningPromise) {
9
9
  await this.#runningPromise;
10
10
  }
11
- const promise = this.run(runner);
11
+ const promise = this.#run(runner);
12
12
  this.#runningPromise = promise
13
13
  .then(() => {
14
14
  this.#runningPromise = undefined;
@@ -20,7 +20,7 @@ export class SingleConnectionProvider {
20
20
  }
21
21
  // Run the runner in an async function to make sure it doesn't
22
22
  // throw synchronous errors.
23
- async run(runner) {
23
+ async #run(runner) {
24
24
  return await runner(this.#connection);
25
25
  }
26
26
  }
@@ -2,7 +2,7 @@ export * from './kysely.js';
2
2
  export * from './query-creator.js';
3
3
  export * from './query-builder/query-builder.js';
4
4
  export * from './query-builder/join-builder.js';
5
- export * from './query-builder/sub-query-builder.js';
5
+ export * from './query-builder/expression-builder.js';
6
6
  export * from './raw-builder/raw-builder.js';
7
7
  export * from './query-executor/query-executor.js';
8
8
  export * from './query-executor/default-query-executor.js';
@@ -17,6 +17,7 @@ export * from './schema/drop-index-builder.js';
17
17
  export * from './schema/create-schema-builder.js';
18
18
  export * from './schema/drop-schema-builder.js';
19
19
  export * from './schema/column-definition-builder.js';
20
+ export * from './schema/foreign-key-constraint-builder.js';
20
21
  export * from './schema/alter-table-builder.js';
21
22
  export * from './dynamic/dynamic.js';
22
23
  export * from './driver/driver.js';
package/dist/esm/index.js CHANGED
@@ -2,7 +2,7 @@ export * from './kysely.js';
2
2
  export * from './query-creator.js';
3
3
  export * from './query-builder/query-builder.js';
4
4
  export * from './query-builder/join-builder.js';
5
- export * from './query-builder/sub-query-builder.js';
5
+ export * from './query-builder/expression-builder.js';
6
6
  export * from './raw-builder/raw-builder.js';
7
7
  export * from './query-executor/query-executor.js';
8
8
  export * from './query-executor/default-query-executor.js';
@@ -17,6 +17,7 @@ export * from './schema/drop-index-builder.js';
17
17
  export * from './schema/create-schema-builder.js';
18
18
  export * from './schema/drop-schema-builder.js';
19
19
  export * from './schema/column-definition-builder.js';
20
+ export * from './schema/foreign-key-constraint-builder.js';
20
21
  export * from './schema/alter-table-builder.js';
21
22
  export * from './dynamic/dynamic.js';
22
23
  export * from './driver/driver.js';
@@ -8,7 +8,7 @@ import { KyselyPlugin } from './plugin/kysely-plugin.js';
8
8
  import { GeneratedPlaceholder } from './query-builder/type-utils.js';
9
9
  import { DatabaseIntrospector } from './introspection/database-introspector.js';
10
10
  import { Driver, IsolationLevel } from './driver/driver.js';
11
- import { DialectAdapter } from './dialect/dialect-adapter.js';
11
+ import { ParseContext } from './parser/parse-context.js';
12
12
  /**
13
13
  * The main Kysely class.
14
14
  *
@@ -152,7 +152,7 @@ export declare class Kysely<DB> extends QueryCreator<DB> {
152
152
  * .execute(async (db) => {
153
153
  * // `db` is an instance of `Kysely` that's bound to a single
154
154
  * // database connection. All queries executed through `db` use
155
- * // the same donnection and not the connection pool.
155
+ * // the same connection.
156
156
  * await doStuff(db)
157
157
  * })
158
158
  * ```
@@ -186,7 +186,7 @@ export interface KyselyProps {
186
186
  readonly driver: Driver;
187
187
  readonly executor: QueryExecutor;
188
188
  readonly dialect: Dialect;
189
- readonly adapter: DialectAdapter;
189
+ readonly parseContext: ParseContext;
190
190
  }
191
191
  export declare function isKyselyProps(obj: unknown): obj is KyselyProps;
192
192
  export interface KyselyConfig {
@@ -198,14 +198,15 @@ export declare class ConnectionBuilder<DB> {
198
198
  constructor(props: ConnectionBuilderProps);
199
199
  execute<T>(callback: (db: Kysely<DB>) => Promise<T>): Promise<T>;
200
200
  }
201
- export interface ConnectionBuilderProps extends KyselyProps {
201
+ interface ConnectionBuilderProps extends KyselyProps {
202
202
  }
203
203
  export declare class TransactionBuilder<DB> {
204
204
  #private;
205
- constructor(props: TransactionBuilerProps);
205
+ constructor(props: TransactionBuilderProps);
206
206
  setIsolationLevel(isolationLevel: IsolationLevel): TransactionBuilder<DB>;
207
207
  execute<T>(callback: (trx: Transaction<DB>) => Promise<T>): Promise<T>;
208
208
  }
209
- export interface TransactionBuilerProps extends KyselyProps {
209
+ interface TransactionBuilderProps extends KyselyProps {
210
210
  readonly isolationLevel?: IsolationLevel;
211
211
  }
212
+ export {};
@@ -10,6 +10,7 @@ import { RuntimeDriver } from './driver/runtime-driver.js';
10
10
  import { SingleConnectionProvider } from './driver/single-connection-provider.js';
11
11
  import { TRANSACTION_ISOLATION_LEVELS, } from './driver/driver.js';
12
12
  import { preventAwait } from './util/prevent-await.js';
13
+ import { DefaultParseContext } from './parser/parse-context.js';
13
14
  /**
14
15
  * The main Kysely class.
15
16
  *
@@ -54,7 +55,7 @@ export class Kysely extends QueryCreator {
54
55
  #props;
55
56
  constructor(args) {
56
57
  if (isKyselyProps(args)) {
57
- super({ executor: args.executor, adapter: args.adapter });
58
+ super({ executor: args.executor, parseContext: args.parseContext });
58
59
  this.#props = freeze(args);
59
60
  }
60
61
  else {
@@ -62,16 +63,17 @@ export class Kysely extends QueryCreator {
62
63
  const driver = dialect.createDriver();
63
64
  const compiler = dialect.createQueryCompiler();
64
65
  const adapter = dialect.createAdapter();
66
+ const parseContext = new DefaultParseContext(adapter);
65
67
  const runtimeDriver = new RuntimeDriver(driver);
66
68
  const connectionProvider = new DefaultConnectionProvider(runtimeDriver);
67
69
  const executor = new DefaultQueryExecutor(compiler, connectionProvider, args.plugins ?? []);
68
- super({ executor, adapter });
70
+ super({ executor, parseContext });
69
71
  this.#props = freeze({
70
72
  config: args,
71
73
  executor,
72
- adapter,
73
74
  dialect,
74
75
  driver,
76
+ parseContext,
75
77
  });
76
78
  }
77
79
  }
@@ -85,7 +87,7 @@ export class Kysely extends QueryCreator {
85
87
  * Returns the {@link MigrationModule} module for managing and running migrations.
86
88
  */
87
89
  get migration() {
88
- return new MigrationModule(this, this.#props.adapter);
90
+ return new MigrationModule(this, this.#props.parseContext.adapter);
89
91
  }
90
92
  /**
91
93
  * Returns a the {@link DynamicModule} module.
@@ -186,7 +188,7 @@ export class Kysely extends QueryCreator {
186
188
  * .execute(async (db) => {
187
189
  * // `db` is an instance of `Kysely` that's bound to a single
188
190
  * // database connection. All queries executed through `db` use
189
- * // the same donnection and not the connection pool.
191
+ * // the same connection.
190
192
  * await doStuff(db)
191
193
  * })
192
194
  * ```
@@ -243,7 +245,7 @@ export function isKyselyProps(obj) {
243
245
  isObject(obj.driver) &&
244
246
  isObject(obj.executor) &&
245
247
  isObject(obj.dialect) &&
246
- isObject(obj.adapter));
248
+ isObject(obj.parseContext));
247
249
  }
248
250
  export class ConnectionBuilder {
249
251
  #props;
@@ -1,6 +1,6 @@
1
1
  import * as path from 'path';
2
2
  import { promises as fs } from 'fs';
3
- import { getLast, isFunction, isString } from '../util/object-utils.js';
3
+ import { getLast, isFunction, isObject, isString, } from '../util/object-utils.js';
4
4
  export const MIGRATION_TABLE = 'kysely_migration';
5
5
  export const MIGRATION_LOCK_TABLE = 'kysely_migration_lock';
6
6
  export const MIGRATION_LOCK_ID = 'migration_lock';
@@ -11,20 +11,21 @@ export class MigrationModule {
11
11
  this.#db = db;
12
12
  this.#adapter = adapter;
13
13
  }
14
- async migrateToLatest(migrationsFolderPath) {
14
+ async migrateToLatest(migrationsOrFolderPath) {
15
15
  await ensureMigrationTablesExists(this.#db);
16
- if (isString(migrationsFolderPath)) {
17
- return this.#migrateToLatest(await readMigrationsFromFolder(migrationsFolderPath));
18
- }
19
- else {
20
- return this.#migrateToLatest(migrationsFolderPath);
21
- }
16
+ const allMigrations = await this.#getAllMigrations(migrationsOrFolderPath);
17
+ await this.#migrateToLatest(allMigrations);
18
+ }
19
+ async #getAllMigrations(migrationsOrFolderPath) {
20
+ return isString(migrationsOrFolderPath)
21
+ ? await readMigrationsFromFolder(migrationsOrFolderPath)
22
+ : migrationsOrFolderPath;
22
23
  }
23
- async #migrateToLatest(migrations) {
24
+ async #migrateToLatest(allMigrations) {
24
25
  const run = async (db) => {
25
26
  try {
26
27
  await this.#adapter.acquireMigrationLock(db);
27
- await runNewMigrations(db, migrations);
28
+ await runNewMigrations(db, allMigrations);
28
29
  }
29
30
  finally {
30
31
  await this.#adapter.releaseMigrationLock(db);
@@ -178,5 +179,5 @@ function ensureMigrationsAreNotCorrupted(executedMigrationNames, oldMigrationNam
178
179
  }
179
180
  }
180
181
  function isMigration(obj) {
181
- return obj && isFunction(obj.up) && isFunction(obj.down);
182
+ return isObject(obj) && isFunction(obj.up) && isFunction(obj.down);
182
183
  }
@@ -3,7 +3,7 @@ import { ColumnNode } from './column-node.js';
3
3
  import { DataTypeNode } from './data-type-node.js';
4
4
  import { ValueNode } from './value-node.js';
5
5
  import { RawNode } from './raw-node.js';
6
- export declare type AlterColumnNodeParams = Omit<Partial<AlterColumnNode>, 'kind' | 'column'>;
6
+ export declare type AlterColumnNodeProps = Omit<AlterColumnNode, 'kind' | 'column'>;
7
7
  export interface AlterColumnNode extends OperationNode {
8
8
  readonly kind: 'AlterColumnNode';
9
9
  readonly column: ColumnNode;
@@ -20,5 +20,5 @@ export interface AlterColumnNode extends OperationNode {
20
20
  export declare const AlterColumnNode: Readonly<{
21
21
  is(node: OperationNode): node is AlterColumnNode;
22
22
  create(column: string): AlterColumnNode;
23
- cloneWith(node: AlterColumnNode, params: AlterColumnNodeParams): AlterColumnNode;
23
+ cloneWith(node: AlterColumnNode, props: AlterColumnNodeProps): AlterColumnNode;
24
24
  }>;
@@ -13,10 +13,10 @@ export const AlterColumnNode = freeze({
13
13
  column: ColumnNode.create(column),
14
14
  });
15
15
  },
16
- cloneWith(node, params) {
16
+ cloneWith(node, props) {
17
17
  return freeze({
18
18
  ...node,
19
- ...params,
19
+ ...props,
20
20
  });
21
21
  },
22
22
  });
@@ -8,7 +8,7 @@ import { AlterColumnNode } from './alter-column-node.js';
8
8
  import { AddConstraintNode } from './add-constraint-node.js';
9
9
  import { DropConstraintNode } from './drop-constraint-node.js';
10
10
  import { ModifyColumnNode } from './modify-column-node.js';
11
- export declare type AlterTableNodeParams = Omit<Partial<AlterTableNode>, 'kind' | 'table'>;
11
+ export declare type AlterTableNodeProps = Omit<AlterTableNode, 'kind' | 'table'>;
12
12
  export interface AlterTableNode extends OperationNode {
13
13
  readonly kind: 'AlterTableNode';
14
14
  readonly table: TableNode;
@@ -28,5 +28,5 @@ export interface AlterTableNode extends OperationNode {
28
28
  export declare const AlterTableNode: Readonly<{
29
29
  is(node: OperationNode): node is AlterTableNode;
30
30
  create(table: string): AlterTableNode;
31
- cloneWith(node: AlterTableNode, params: AlterTableNodeParams): AlterTableNode;
31
+ cloneWith(node: AlterTableNode, props: AlterTableNodeProps): AlterTableNode;
32
32
  }>;
@@ -13,10 +13,10 @@ export const AlterTableNode = freeze({
13
13
  table: TableNode.create(table),
14
14
  });
15
15
  },
16
- cloneWith(node, params) {
16
+ cloneWith(node, props) {
17
17
  return freeze({
18
18
  ...node,
19
- ...params,
19
+ ...props,
20
20
  });
21
21
  },
22
22
  });
@@ -5,7 +5,7 @@ import { OperationNode } from './operation-node.js';
5
5
  import { RawNode } from './raw-node.js';
6
6
  import { ReferencesNode } from './references-node.js';
7
7
  import { ValueNode } from './value-node.js';
8
- export declare type ColumnDefinitionNodeParams = Omit<Partial<ColumnDefinitionNode>, 'kind'>;
8
+ export declare type ColumnDefinitionNodeProps = Omit<Partial<ColumnDefinitionNode>, 'kind'>;
9
9
  export declare type ColumnDataTypeNode = DataTypeNode | RawNode;
10
10
  export interface ColumnDefinitionNode extends OperationNode {
11
11
  readonly kind: 'ColumnDefinitionNode';
@@ -25,5 +25,5 @@ export interface ColumnDefinitionNode extends OperationNode {
25
25
  export declare const ColumnDefinitionNode: Readonly<{
26
26
  is(node: OperationNode): node is ColumnDefinitionNode;
27
27
  create(column: string, dataType: ColumnDataTypeNode): ColumnDefinitionNode;
28
- cloneWith(node: ColumnDefinitionNode, params: ColumnDefinitionNodeParams): ColumnDefinitionNode;
28
+ cloneWith(node: ColumnDefinitionNode, props: ColumnDefinitionNodeProps): ColumnDefinitionNode;
29
29
  }>;
@@ -18,10 +18,10 @@ export const ColumnDefinitionNode = freeze({
18
18
  isNullable: true,
19
19
  });
20
20
  },
21
- cloneWith(node, params) {
21
+ cloneWith(node, props) {
22
22
  return freeze({
23
23
  ...node,
24
- ...params,
24
+ ...props,
25
25
  });
26
26
  },
27
27
  });
@@ -4,7 +4,7 @@ import { ListNode } from './list-node.js';
4
4
  import { OperationNode } from './operation-node.js';
5
5
  import { RawNode } from './raw-node.js';
6
6
  import { TableNode } from './table-node.js';
7
- export declare type CreateIndexNodeParams = Omit<Partial<CreateIndexNode>, 'kind'>;
7
+ export declare type CreateIndexNodeProps = Omit<CreateIndexNode, 'kind' | 'name'>;
8
8
  export declare type IndexType = 'btree' | 'hash' | 'gist' | 'gin';
9
9
  export interface CreateIndexNode extends OperationNode {
10
10
  readonly kind: 'CreateIndexNode';
@@ -20,5 +20,5 @@ export interface CreateIndexNode extends OperationNode {
20
20
  export declare const CreateIndexNode: Readonly<{
21
21
  is(node: OperationNode): node is CreateIndexNode;
22
22
  create(name: string): CreateIndexNode;
23
- cloneWith(node: CreateIndexNode, params: CreateIndexNodeParams): CreateIndexNode;
23
+ cloneWith(node: CreateIndexNode, props: CreateIndexNodeProps): CreateIndexNode;
24
24
  }>;
@@ -13,10 +13,10 @@ export const CreateIndexNode = freeze({
13
13
  name: IdentifierNode.create(name),
14
14
  });
15
15
  },
16
- cloneWith(node, params) {
16
+ cloneWith(node, props) {
17
17
  return freeze({
18
18
  ...node,
19
- ...params,
19
+ ...props,
20
20
  });
21
21
  },
22
22
  });
@@ -1,5 +1,6 @@
1
1
  import { OperationNode } from './operation-node.js';
2
2
  import { TableNode } from './table-node.js';
3
+ import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
3
4
  import { ConstraintNode } from './constraint-node.js';
4
5
  import { ColumnDefinitionNode } from './column-definition-node.js';
5
6
  export declare type CreateTableNodeModifier = 'IfNotExists';
@@ -21,5 +22,5 @@ export declare const CreateTableNode: Readonly<{
21
22
  cloneWithPrimaryKeyConstraint(createTable: CreateTableNode, constraintName: string, columns: string[]): CreateTableNode;
22
23
  cloneWithUniqueConstraint(createTable: CreateTableNode, constraintName: string, columns: string[]): CreateTableNode;
23
24
  cloneWithCheckConstraint(createTable: CreateTableNode, constraintName: string, sql: string): CreateTableNode;
24
- cloneWithForeignKeyConstraint(createTable: CreateTableNode, constraintName: string, sourceColumns: string[], targetTable: string, targetColumns: string[]): CreateTableNode;
25
+ cloneWithForeignKeyConstraint(createTable: CreateTableNode, constraint: ForeignKeyConstraintNode): CreateTableNode;
25
26
  }>;
@@ -1,10 +1,7 @@
1
1
  import { freeze } from '../util/object-utils.js';
2
2
  import { CheckConstraintNode } from './check-constraint-node.js';
3
- import { TableNode } from './table-node.js';
4
3
  import { PrimaryConstraintNode } from './primary-constraint-node.js';
5
4
  import { UniqueConstraintNode } from './unique-constraint-node.js';
6
- import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
7
- import { ColumnNode } from './column-node.js';
8
5
  /**
9
6
  * @internal
10
7
  */
@@ -58,8 +55,7 @@ export const CreateTableNode = freeze({
58
55
  : freeze([constraint]),
59
56
  });
60
57
  },
61
- cloneWithForeignKeyConstraint(createTable, constraintName, sourceColumns, targetTable, targetColumns) {
62
- const constraint = ForeignKeyConstraintNode.create(sourceColumns.map(ColumnNode.create), TableNode.create(targetTable), targetColumns.map(ColumnNode.create), constraintName);
58
+ cloneWithForeignKeyConstraint(createTable, constraint) {
63
59
  return freeze({
64
60
  ...createTable,
65
61
  constraints: createTable.constraints
@@ -1,7 +1,7 @@
1
1
  import { IdentifierNode } from './identifier-node.js';
2
2
  import { OperationNode } from './operation-node.js';
3
3
  import { TableNode } from './table-node.js';
4
- export declare type DropIndexNodeParams = Omit<Partial<DropIndexNode>, 'kind' | 'name'>;
4
+ export declare type DropIndexNodeProps = Omit<DropIndexNode, 'kind' | 'name'>;
5
5
  export declare type DropIndexNodeModifier = 'IfExists';
6
6
  export interface DropIndexNode extends OperationNode {
7
7
  readonly kind: 'DropIndexNode';
@@ -14,6 +14,6 @@ export interface DropIndexNode extends OperationNode {
14
14
  */
15
15
  export declare const DropIndexNode: Readonly<{
16
16
  is(node: OperationNode): node is DropIndexNode;
17
- create(name: string, params?: DropIndexNodeParams | undefined): DropIndexNode;
18
- cloneWith(dropIndex: DropIndexNode, params: DropIndexNodeParams): DropIndexNode;
17
+ create(name: string, params?: DropIndexNodeProps | undefined): DropIndexNode;
18
+ cloneWith(dropIndex: DropIndexNode, props: DropIndexNodeProps): DropIndexNode;
19
19
  }>;
@@ -14,10 +14,10 @@ export const DropIndexNode = freeze({
14
14
  ...params,
15
15
  });
16
16
  },
17
- cloneWith(dropIndex, params) {
17
+ cloneWith(dropIndex, props) {
18
18
  return freeze({
19
19
  ...dropIndex,
20
- ...params,
20
+ ...props,
21
21
  });
22
22
  },
23
23
  });
@@ -1,12 +1,15 @@
1
1
  import { ColumnNode } from './column-node.js';
2
2
  import { IdentifierNode } from './identifier-node.js';
3
3
  import { OperationNode } from './operation-node.js';
4
- import { ReferencesNode } from './references-node.js';
4
+ import { OnModifyForeignAction, ReferencesNode } from './references-node.js';
5
5
  import { TableNode } from './table-node.js';
6
+ export declare type ForeignKeyConstraintNodeProps = Omit<ForeignKeyConstraintNode, 'kind' | 'columns' | 'references'>;
6
7
  export interface ForeignKeyConstraintNode extends OperationNode {
7
8
  readonly kind: 'ForeignKeyConstraintNode';
8
9
  readonly columns: ReadonlyArray<ColumnNode>;
9
10
  readonly references: ReferencesNode;
11
+ readonly onDelete?: OnModifyForeignAction;
12
+ readonly onUpdate?: OnModifyForeignAction;
10
13
  readonly name?: IdentifierNode;
11
14
  }
12
15
  /**
@@ -15,4 +18,12 @@ export interface ForeignKeyConstraintNode extends OperationNode {
15
18
  export declare const ForeignKeyConstraintNode: Readonly<{
16
19
  is(node: OperationNode): node is ForeignKeyConstraintNode;
17
20
  create(sourceColumns: ReadonlyArray<ColumnNode>, targetTable: TableNode, targetColumns: ReadonlyArray<ColumnNode>, constraintName?: string | undefined): ForeignKeyConstraintNode;
21
+ cloneWith(node: ForeignKeyConstraintNode, props: ForeignKeyConstraintNodeProps): Readonly<{
22
+ name?: IdentifierNode | undefined;
23
+ onDelete?: OnModifyForeignAction | undefined;
24
+ onUpdate?: OnModifyForeignAction | undefined;
25
+ kind: 'ForeignKeyConstraintNode';
26
+ columns: ReadonlyArray<ColumnNode>;
27
+ references: ReferencesNode;
28
+ }>;
18
29
  }>;
@@ -16,4 +16,10 @@ export const ForeignKeyConstraintNode = freeze({
16
16
  name: constraintName ? IdentifierNode.create(constraintName) : undefined,
17
17
  });
18
18
  },
19
+ cloneWith(node, props) {
20
+ return freeze({
21
+ ...node,
22
+ ...props,
23
+ });
24
+ },
19
25
  });
@@ -1,5 +1,6 @@
1
1
  import { ColumnNode } from './column-node.js';
2
2
  import { OnConflictNode } from './on-conflict-node.js';
3
+ import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
3
4
  import { OperationNode } from './operation-node.js';
4
5
  import { PrimitiveValueListNode } from './primitive-value-list-node.js';
5
6
  import { ReturningNode } from './returning-node.js';
@@ -7,6 +8,7 @@ import { TableNode } from './table-node.js';
7
8
  import { ValueListNode } from './value-list-node.js';
8
9
  import { WithNode } from './with-node.js';
9
10
  export declare type InsertValuesNode = ValueListNode | PrimitiveValueListNode;
11
+ export declare type InsertQueryNodeProps = Omit<InsertQueryNode, 'kind' | 'into'>;
10
12
  export interface InsertQueryNode extends OperationNode {
11
13
  readonly kind: 'InsertQueryNode';
12
14
  readonly into: TableNode;
@@ -14,7 +16,9 @@ export interface InsertQueryNode extends OperationNode {
14
16
  readonly values?: ReadonlyArray<InsertValuesNode>;
15
17
  readonly returning?: ReturningNode;
16
18
  readonly onConflict?: OnConflictNode;
19
+ readonly onDuplicateKey?: OnDuplicateKeyNode;
17
20
  readonly with?: WithNode;
21
+ readonly ignore?: boolean;
18
22
  }
19
23
  /**
20
24
  * @internal
@@ -22,6 +26,5 @@ export interface InsertQueryNode extends OperationNode {
22
26
  export declare const InsertQueryNode: Readonly<{
23
27
  is(node: OperationNode): node is InsertQueryNode;
24
28
  create(into: TableNode, withNode?: WithNode | undefined): InsertQueryNode;
25
- cloneWithColumnsAndValues(insertQuery: InsertQueryNode, columns: ReadonlyArray<ColumnNode>, values: ReadonlyArray<InsertValuesNode>): InsertQueryNode;
26
- cloneWithOnConflict(insertQuery: InsertQueryNode, onConflict: OnConflictNode): InsertQueryNode;
29
+ cloneWith(insertQuery: InsertQueryNode, props: InsertQueryNodeProps): InsertQueryNode;
27
30
  }>;
@@ -13,17 +13,10 @@ export const InsertQueryNode = freeze({
13
13
  ...(withNode && { with: withNode }),
14
14
  });
15
15
  },
16
- cloneWithColumnsAndValues(insertQuery, columns, values) {
16
+ cloneWith(insertQuery, props) {
17
17
  return freeze({
18
18
  ...insertQuery,
19
- columns,
20
- values,
21
- });
22
- },
23
- cloneWithOnConflict(insertQuery, onConflict) {
24
- return freeze({
25
- ...insertQuery,
26
- onConflict,
19
+ ...props,
27
20
  });
28
21
  },
29
22
  });
@@ -20,5 +20,6 @@ export interface JoinNode extends OperationNode {
20
20
  export declare const JoinNode: Readonly<{
21
21
  is(node: OperationNode): node is JoinNode;
22
22
  create(joinType: JoinType, table: JoinTableNode): JoinNode;
23
+ createWithOn(joinType: JoinType, table: JoinTableNode, on: JoinNodeOnNode): JoinNode;
23
24
  cloneWithOn(joinNode: JoinNode, op: 'And' | 'Or', on: JoinNodeOnNode): JoinNode;
24
25
  }>;
@@ -16,6 +16,14 @@ export const JoinNode = freeze({
16
16
  on: undefined,
17
17
  });
18
18
  },
19
+ createWithOn(joinType, table, on) {
20
+ return freeze({
21
+ kind: 'JoinNode',
22
+ joinType,
23
+ table,
24
+ on,
25
+ });
26
+ },
19
27
  cloneWithOn(joinNode, op, on) {
20
28
  return freeze({
21
29
  ...joinNode,