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
@@ -1,42 +1,50 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createParseContext = void 0;
4
- const index_js_1 = require("../index.js");
3
+ exports.DefaultParseContext = void 0;
5
4
  const join_node_js_1 = require("../operation-node/join-node.js");
5
+ const select_query_node_js_1 = require("../operation-node/select-query-node.js");
6
6
  const join_builder_js_1 = require("../query-builder/join-builder.js");
7
7
  const query_builder_js_1 = require("../query-builder/query-builder.js");
8
- const sub_query_builder_js_1 = require("../query-builder/sub-query-builder.js");
8
+ const expression_builder_js_1 = require("../query-builder/expression-builder.js");
9
9
  const query_creator_js_1 = require("../query-creator.js");
10
- const object_utils_js_1 = require("../util/object-utils.js");
10
+ const noop_query_executor_js_1 = require("../query-executor/noop-query-executor.js");
11
11
  const query_id_js_1 = require("../util/query-id.js");
12
- function createParseContext(adapter) {
13
- return (0, object_utils_js_1.freeze)({
14
- createEmptySelectQuery() {
15
- return new query_builder_js_1.QueryBuilder({
16
- queryId: (0, query_id_js_1.createQueryId)(),
17
- executor: new index_js_1.NoopQueryExecutor(),
18
- queryNode: index_js_1.SelectQueryNode.create([]),
19
- adapter,
20
- });
21
- },
22
- createSubQueryBuilder() {
23
- return new sub_query_builder_js_1.SubQueryBuilder({
24
- executor: new index_js_1.NoopQueryExecutor(),
25
- adapter,
26
- });
27
- },
28
- createQueryCreator() {
29
- return new query_creator_js_1.QueryCreator({
30
- executor: new index_js_1.NoopQueryExecutor(),
31
- adapter,
32
- });
33
- },
34
- createJoinBuilder(joinType, tableNode) {
35
- return new join_builder_js_1.JoinBuilder({
36
- joinNode: join_node_js_1.JoinNode.create(joinType, tableNode),
37
- adapter,
38
- });
39
- },
40
- });
12
+ const table_parser_js_1 = require("./table-parser.js");
13
+ class DefaultParseContext {
14
+ #adapter;
15
+ #noopExecutor;
16
+ constructor(adapter) {
17
+ this.#adapter = adapter;
18
+ this.#noopExecutor = new noop_query_executor_js_1.NoopQueryExecutor();
19
+ }
20
+ get adapter() {
21
+ return this.#adapter;
22
+ }
23
+ createSelectQueryBuilder(tables) {
24
+ return new query_builder_js_1.QueryBuilder({
25
+ queryId: (0, query_id_js_1.createQueryId)(),
26
+ executor: this.#noopExecutor,
27
+ parseContext: this,
28
+ queryNode: select_query_node_js_1.SelectQueryNode.create((0, table_parser_js_1.parseTableExpressionOrList)(this, tables)),
29
+ });
30
+ }
31
+ createJoinBuilder(joinType, table) {
32
+ return new join_builder_js_1.JoinBuilder({
33
+ joinNode: join_node_js_1.JoinNode.create(joinType, (0, table_parser_js_1.parseTableExpression)(this, table)),
34
+ parseContext: this,
35
+ });
36
+ }
37
+ createExpressionBuilder() {
38
+ return new expression_builder_js_1.ExpressionBuilder({
39
+ executor: this.#noopExecutor,
40
+ parseContext: this,
41
+ });
42
+ }
43
+ createQueryCreator() {
44
+ return new query_creator_js_1.QueryCreator({
45
+ executor: this.#noopExecutor,
46
+ parseContext: this,
47
+ });
48
+ }
41
49
  }
42
- exports.createParseContext = createParseContext;
50
+ exports.DefaultParseContext = DefaultParseContext;
@@ -14,7 +14,7 @@ export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB,
14
14
  declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, S extends string, R = RowType<DB, TB>> = S extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : S extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : S extends keyof R ? R[S] : PrimitiveValue;
15
15
  export declare function parseReferenceExpressionOrList(ctx: ParseContext, arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
16
16
  export declare function parseReferenceExpression(ctx: ParseContext, arg: ReferenceExpression<any, any>): ReferenceExpressionNode;
17
- export declare function parseStringReference(str: string): ColumnNode | ReferenceNode;
18
- export declare function parseAliasedStringReference(str: string): ColumnNode | ReferenceNode | AliasNode;
17
+ export declare function parseStringReference(ref: string): ColumnNode | ReferenceNode;
18
+ export declare function parseAliasedStringReference(ref: string): ColumnNode | ReferenceNode | AliasNode;
19
19
  export declare function parseColumnName(column: AnyColumn<any, any>): ColumnNode;
20
20
  export {};
@@ -28,7 +28,7 @@ function parseReferenceExpression(ctx, arg) {
28
28
  }
29
29
  }
30
30
  else if ((0, object_utils_js_1.isFunction)(arg)) {
31
- const node = arg(ctx.createSubQueryBuilder()).toOperationNode();
31
+ const node = arg(ctx.createExpressionBuilder()).toOperationNode();
32
32
  if (!query_node_js_1.QueryNode.isMutating(node)) {
33
33
  return node;
34
34
  }
@@ -36,9 +36,10 @@ function parseReferenceExpression(ctx, arg) {
36
36
  throw new Error(`invalid reference expression ${JSON.stringify(arg)}`);
37
37
  }
38
38
  exports.parseReferenceExpression = parseReferenceExpression;
39
- function parseStringReference(str) {
40
- if (str.includes('.')) {
41
- const parts = str.split('.').map((it) => it.trim());
39
+ function parseStringReference(ref) {
40
+ const COLUMN_SEPARATOR = '.';
41
+ if (ref.includes(COLUMN_SEPARATOR)) {
42
+ const parts = ref.split(COLUMN_SEPARATOR).map(trim);
42
43
  if (parts.length === 3) {
43
44
  return parseStringReferenceWithTableAndSchema(parts);
44
45
  }
@@ -46,22 +47,22 @@ function parseStringReference(str) {
46
47
  return parseStringReferenceWithTable(parts);
47
48
  }
48
49
  else {
49
- throw new Error(`invalid column reference ${str}`);
50
+ throw new Error(`invalid column reference ${ref}`);
50
51
  }
51
52
  }
52
53
  else {
53
- return column_node_js_1.ColumnNode.create(str);
54
+ return column_node_js_1.ColumnNode.create(ref);
54
55
  }
55
56
  }
56
57
  exports.parseStringReference = parseStringReference;
57
- function parseAliasedStringReference(str) {
58
- if (str.includes(' as ')) {
59
- const [tableColumn, alias] = str.split(' as ').map((it) => it.trim());
60
- const tableColumnNode = parseStringReference(tableColumn);
61
- return alias_node_js_1.AliasNode.create(tableColumnNode, alias);
58
+ function parseAliasedStringReference(ref) {
59
+ const ALIAS_SEPARATOR = ' as ';
60
+ if (ref.includes(ALIAS_SEPARATOR)) {
61
+ const [columnRef, alias] = ref.split(ALIAS_SEPARATOR).map(trim);
62
+ return alias_node_js_1.AliasNode.create(parseStringReference(columnRef), alias);
62
63
  }
63
64
  else {
64
- return parseStringReference(str);
65
+ return parseStringReference(ref);
65
66
  }
66
67
  }
67
68
  exports.parseAliasedStringReference = parseAliasedStringReference;
@@ -77,3 +78,6 @@ function parseStringReferenceWithTable(parts) {
77
78
  const [table, column] = parts;
78
79
  return reference_node_js_1.ReferenceNode.create(table_node_js_1.TableNode.create(table), column_node_js_1.ColumnNode.create(column));
79
80
  }
81
+ function trim(str) {
82
+ return str.trim();
83
+ }
@@ -26,6 +26,5 @@ declare type ExtractAliasFromStringSelectExpression<S extends string> = S extend
26
26
  declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, S, A extends keyof any> = S extends string ? ExtractTypeFromStringSelectExpression<DB, TB, S, A> : S extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : S extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : S extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : S extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : S extends DynamicReferenceBuilder<infer RA> ? A extends ExtractAliasFromStringSelectExpression<RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA, A> | undefined : never : never;
27
27
  declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, S extends string, A extends keyof any, R = RowType<DB, TB>> = S extends `${infer SC}.${infer T}.${infer C} as ${infer RA}` ? RA extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : S extends `${infer T}.${infer C} as ${infer RA}` ? RA extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : S extends `${infer C} as ${infer RA}` ? RA extends A ? C extends keyof R ? R[C] : never : never : S extends `${infer SC}.${infer T}.${infer C}` ? C extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : S extends `${infer T}.${infer C}` ? C extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : S extends A ? S extends keyof R ? R[S] : never : never;
28
28
  export declare function parseSelectExpressionOrList(ctx: ParseContext, selection: SelectExpressionOrList<any, any>): SelectionNode[];
29
- export declare function parseSelectAllArgs(table?: string | string[]): SelectionNode[];
30
- export declare function parseSelectAllArg(table: string): SelectionNode;
29
+ export declare function parseSelectAll(table?: string | string[]): SelectionNode[];
31
30
  export {};
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseSelectAllArg = exports.parseSelectAllArgs = exports.parseSelectExpressionOrList = void 0;
3
+ exports.parseSelectAll = exports.parseSelectExpressionOrList = void 0;
4
4
  const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
5
5
  const object_utils_js_1 = require("../util/object-utils.js");
6
6
  const selection_node_js_1 = require("../operation-node/selection-node.js");
@@ -22,13 +22,13 @@ function parseSelectExpression(ctx, selection) {
22
22
  return selection_node_js_1.SelectionNode.create(selection.toOperationNode());
23
23
  }
24
24
  else if ((0, object_utils_js_1.isFunction)(selection)) {
25
- return selection_node_js_1.SelectionNode.create(selection(ctx.createSubQueryBuilder()).toOperationNode());
25
+ return selection_node_js_1.SelectionNode.create(selection(ctx.createExpressionBuilder()).toOperationNode());
26
26
  }
27
27
  else {
28
28
  throw new Error(`invalid value passed to select method: ${JSON.stringify(selection)}`);
29
29
  }
30
30
  }
31
- function parseSelectAllArgs(table) {
31
+ function parseSelectAll(table) {
32
32
  if (!table) {
33
33
  return [selection_node_js_1.SelectionNode.createSelectAll()];
34
34
  }
@@ -39,7 +39,7 @@ function parseSelectAllArgs(table) {
39
39
  return [parseSelectAllArg(table)];
40
40
  }
41
41
  }
42
- exports.parseSelectAllArgs = parseSelectAllArgs;
42
+ exports.parseSelectAll = parseSelectAll;
43
43
  function parseSelectAllArg(table) {
44
44
  if ((0, object_utils_js_1.isString)(table)) {
45
45
  return selection_node_js_1.SelectionNode.createSelectAllFromTable(table);
@@ -48,4 +48,3 @@ function parseSelectAllArg(table) {
48
48
  throw new Error(`invalid value passed to selectAll method: ${JSON.stringify(table)}`);
49
49
  }
50
50
  }
51
- exports.parseSelectAllArg = parseSelectAllArg;
@@ -22,7 +22,7 @@ function parseTableExpression(ctx, table) {
22
22
  return table.toOperationNode();
23
23
  }
24
24
  else if ((0, object_utils_js_1.isFunction)(table)) {
25
- return table(ctx.createSubQueryBuilder()).toOperationNode();
25
+ return table(ctx.createExpressionBuilder()).toOperationNode();
26
26
  }
27
27
  else {
28
28
  throw new Error(`invalid table expression ${JSON.stringify(table)}`);
@@ -30,18 +30,20 @@ function parseTableExpression(ctx, table) {
30
30
  }
31
31
  exports.parseTableExpression = parseTableExpression;
32
32
  function parseAliasedTable(from) {
33
- const [table, alias] = from.split(' as ').map((it) => it.trim());
34
- if (alias) {
33
+ const ALIAS_SEPARATOR = ' as ';
34
+ if (from.includes(ALIAS_SEPARATOR)) {
35
+ const [table, alias] = from.split(ALIAS_SEPARATOR).map(trim);
35
36
  return alias_node_js_1.AliasNode.create(parseTable(table), alias);
36
37
  }
37
38
  else {
38
- return parseTable(table);
39
+ return parseTable(from);
39
40
  }
40
41
  }
41
42
  exports.parseAliasedTable = parseAliasedTable;
42
43
  function parseTable(from) {
43
- if (from.includes('.')) {
44
- const [schema, table] = from.split('.').map((it) => it.trim());
44
+ const SCHEMA_SEPARATOR = '.';
45
+ if (from.includes(SCHEMA_SEPARATOR)) {
46
+ const [schema, table] = from.split(SCHEMA_SEPARATOR).map(trim);
45
47
  return table_node_js_1.TableNode.createWithSchema(schema, table);
46
48
  }
47
49
  else {
@@ -49,3 +51,6 @@ function parseTable(from) {
49
51
  }
50
52
  }
51
53
  exports.parseTable = parseTable;
54
+ function trim(str) {
55
+ return str.trim();
56
+ }
@@ -24,7 +24,7 @@ function parseMutationValueExpression(ctx, value) {
24
24
  }
25
25
  }
26
26
  else if ((0, object_utils_js_1.isFunction)(value)) {
27
- const node = value(ctx.createSubQueryBuilder()).toOperationNode();
27
+ const node = value(ctx.createExpressionBuilder()).toOperationNode();
28
28
  if (!query_node_js_1.QueryNode.isMutating(node)) {
29
29
  return node;
30
30
  }
@@ -28,7 +28,7 @@ function parseValueExpression(ctx, arg) {
28
28
  }
29
29
  }
30
30
  else if ((0, object_utils_js_1.isFunction)(arg)) {
31
- const node = arg(ctx.createSubQueryBuilder()).toOperationNode();
31
+ const node = arg(ctx.createExpressionBuilder()).toOperationNode();
32
32
  if (!query_node_js_1.QueryNode.isMutating(node)) {
33
33
  return node;
34
34
  }
@@ -1,9 +1,9 @@
1
1
  import { TableExpression, QueryBuilderWithTable } from '../parser/table-parser.js';
2
2
  import { NoopQueryExecutor } from '../query-executor/noop-query-executor.js';
3
- import { DialectAdapter } from '../index.js';
4
- export declare class SubQueryBuilder<DB, TB extends keyof DB> {
3
+ import { ParseContext } from '../parser/parse-context.js';
4
+ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
5
5
  #private;
6
- constructor(props: SubQueryBuilderProps);
6
+ constructor(props: ExpressionBuilderProps);
7
7
  /**
8
8
  * Creates a subquery.
9
9
  *
@@ -50,9 +50,9 @@ export declare class SubQueryBuilder<DB, TB extends keyof DB> {
50
50
  /**
51
51
  * See {@link QueryCreator.withSchema}
52
52
  */
53
- withSchema(schema: string): SubQueryBuilder<DB, TB>;
53
+ withSchema(schema: string): ExpressionBuilder<DB, TB>;
54
54
  }
55
- export interface SubQueryBuilderProps {
56
- executor: NoopQueryExecutor;
57
- adapter: DialectAdapter;
55
+ export interface ExpressionBuilderProps {
56
+ readonly executor: NoopQueryExecutor;
57
+ readonly parseContext: ParseContext;
58
58
  }
@@ -1,14 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SubQueryBuilder = void 0;
3
+ exports.ExpressionBuilder = void 0;
4
4
  const query_builder_js_1 = require("./query-builder.js");
5
5
  const select_query_node_js_1 = require("../operation-node/select-query-node.js");
6
6
  const table_parser_js_1 = require("../parser/table-parser.js");
7
7
  const with_schema_plugin_js_1 = require("../plugin/with-schema/with-schema-plugin.js");
8
8
  const query_id_js_1 = require("../util/query-id.js");
9
9
  const object_utils_js_1 = require("../util/object-utils.js");
10
- const parse_context_js_1 = require("../parser/parse-context.js");
11
- class SubQueryBuilder {
10
+ class ExpressionBuilder {
12
11
  #props;
13
12
  constructor(props) {
14
13
  this.#props = (0, object_utils_js_1.freeze)(props);
@@ -17,21 +16,18 @@ class SubQueryBuilder {
17
16
  return new query_builder_js_1.QueryBuilder({
18
17
  queryId: (0, query_id_js_1.createQueryId)(),
19
18
  executor: this.#props.executor,
20
- adapter: this.#props.adapter,
21
- queryNode: select_query_node_js_1.SelectQueryNode.create((0, table_parser_js_1.parseTableExpressionOrList)(this.#parseContext, table)),
19
+ parseContext: this.#props.parseContext,
20
+ queryNode: select_query_node_js_1.SelectQueryNode.create((0, table_parser_js_1.parseTableExpressionOrList)(this.#props.parseContext, table)),
22
21
  });
23
22
  }
24
23
  /**
25
24
  * See {@link QueryCreator.withSchema}
26
25
  */
27
26
  withSchema(schema) {
28
- return new SubQueryBuilder({
27
+ return new ExpressionBuilder({
29
28
  ...this.#props,
30
29
  executor: this.#props.executor.withPluginAtFront(new with_schema_plugin_js_1.WithSchemaPlugin(schema)),
31
30
  });
32
31
  }
33
- get #parseContext() {
34
- return (0, parse_context_js_1.createParseContext)(this.#props.adapter);
35
- }
36
32
  }
37
- exports.SubQueryBuilder = SubQueryBuilder;
33
+ exports.ExpressionBuilder = ExpressionBuilder;
@@ -1,7 +1,7 @@
1
- import { DialectAdapter } from '../dialect/dialect-adapter.js';
2
1
  import { JoinNode } from '../operation-node/join-node.js';
3
2
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
4
3
  import { ExistsExpression, FilterOperator } from '../parser/filter-parser.js';
4
+ import { ParseContext } from '../parser/parse-context.js';
5
5
  import { ReferenceExpression } from '../parser/reference-parser.js';
6
6
  import { ValueExpressionOrList } from '../parser/value-parser.js';
7
7
  export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNodeSource {
@@ -69,5 +69,5 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
69
69
  }
70
70
  export interface JoinBuilderProps {
71
71
  readonly joinNode: JoinNode;
72
- readonly adapter: DialectAdapter;
72
+ readonly parseContext: ParseContext;
73
73
  }
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.JoinBuilder = void 0;
4
4
  const join_node_js_1 = require("../operation-node/join-node.js");
5
5
  const filter_parser_js_1 = require("../parser/filter-parser.js");
6
- const parse_context_js_1 = require("../parser/parse-context.js");
7
6
  const object_utils_js_1 = require("../util/object-utils.js");
8
7
  const prevent_await_js_1 = require("../util/prevent-await.js");
9
8
  class JoinBuilder {
@@ -14,13 +13,13 @@ class JoinBuilder {
14
13
  on(...args) {
15
14
  return new JoinBuilder({
16
15
  ...this.#props,
17
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'And', (0, filter_parser_js_1.parseOnFilter)(this.#parseContext, args)),
16
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'And', (0, filter_parser_js_1.parseOnFilter)(this.#props.parseContext, args)),
18
17
  });
19
18
  }
20
19
  orOn(...args) {
21
20
  return new JoinBuilder({
22
21
  ...this.#props,
23
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'Or', (0, filter_parser_js_1.parseOnFilter)(this.#parseContext, args)),
22
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'Or', (0, filter_parser_js_1.parseOnFilter)(this.#props.parseContext, args)),
24
23
  });
25
24
  }
26
25
  /**
@@ -32,7 +31,7 @@ class JoinBuilder {
32
31
  onRef(lhs, op, rhs) {
33
32
  return new JoinBuilder({
34
33
  ...this.#props,
35
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'And', (0, filter_parser_js_1.parseReferenceFilter)(this.#parseContext, lhs, op, rhs)),
34
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'And', (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
36
35
  });
37
36
  }
38
37
  /**
@@ -44,7 +43,7 @@ class JoinBuilder {
44
43
  orOnRef(lhs, op, rhs) {
45
44
  return new JoinBuilder({
46
45
  ...this.#props,
47
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'Or', (0, filter_parser_js_1.parseReferenceFilter)(this.#parseContext, lhs, op, rhs)),
46
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'Or', (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
48
47
  });
49
48
  }
50
49
  /**
@@ -56,7 +55,7 @@ class JoinBuilder {
56
55
  onExists(arg) {
57
56
  return new JoinBuilder({
58
57
  ...this.#props,
59
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'And', (0, filter_parser_js_1.parseExistExpression)(this.#parseContext, arg)),
58
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'And', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
60
59
  });
61
60
  }
62
61
  /**
@@ -68,7 +67,7 @@ class JoinBuilder {
68
67
  onNotExists(arg) {
69
68
  return new JoinBuilder({
70
69
  ...this.#props,
71
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'And', (0, filter_parser_js_1.parseNotExistExpression)(this.#parseContext, arg)),
70
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'And', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
72
71
  });
73
72
  }
74
73
  /**
@@ -80,7 +79,7 @@ class JoinBuilder {
80
79
  orOnExists(arg) {
81
80
  return new JoinBuilder({
82
81
  ...this.#props,
83
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'Or', (0, filter_parser_js_1.parseExistExpression)(this.#parseContext, arg)),
82
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'Or', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
84
83
  });
85
84
  }
86
85
  /**
@@ -92,15 +91,12 @@ class JoinBuilder {
92
91
  orOnNotExists(arg) {
93
92
  return new JoinBuilder({
94
93
  ...this.#props,
95
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'Or', (0, filter_parser_js_1.parseNotExistExpression)(this.#parseContext, arg)),
94
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'Or', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
96
95
  });
97
96
  }
98
97
  toOperationNode() {
99
98
  return this.#props.joinNode;
100
99
  }
101
- get #parseContext() {
102
- return (0, parse_context_js_1.createParseContext)(this.#props.adapter);
103
- }
104
100
  }
105
101
  exports.JoinBuilder = JoinBuilder;
106
102
  (0, prevent_await_js_1.preventAwait)(JoinBuilder, "don't await JoinBuilder instances. They are never executed directly and are always just a part of a query.");
@@ -18,7 +18,7 @@ import { Compilable } from '../util/compilable.js';
18
18
  import { QueryExecutor } from '../query-executor/query-executor.js';
19
19
  import { QueryId } from '../util/query-id.js';
20
20
  import { OnConflictConstraintTarget } from '../parser/on-conflict-parser.js';
21
- import { DialectAdapter } from '../index.js';
21
+ import { ParseContext } from '../parser/parse-context.js';
22
22
  /**
23
23
  * The main query builder class.
24
24
  *
@@ -1010,9 +1010,9 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
1010
1010
  * database, calling `onConflictDoNothing('name')` will ignore the conflict
1011
1011
  * and do nothing. By default the query would throw.
1012
1012
  *
1013
- * This method generates different SQL on different dialects. For example
1014
- * `insert ignore` is used on mysql and `on conflict (columns) do nothing`
1015
- * on postgres and sqlite.
1013
+ * Only some dialects like postgres and sqlite implement the `on conflict`
1014
+ * statement. On MySQL you should use the {@link ignore} method to achieve
1015
+ * similar results.
1016
1016
  *
1017
1017
  * Also see the {@link QueryBuilder.onConflictUpdate | onConflictUpdate}
1018
1018
  * method if you want to perform an update in case of a conflict (upsert).
@@ -1067,6 +1067,27 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
1067
1067
  onConflictDoNothing(column: AnyColumn<DB, TB>): QueryBuilder<DB, TB, O>;
1068
1068
  onConflictDoNothing(columns: ReadonlyArray<AnyColumn<DB, TB>>): QueryBuilder<DB, TB, O>;
1069
1069
  onConflictDoNothing(constraint: OnConflictConstraintTarget): QueryBuilder<DB, TB, O>;
1070
+ /**
1071
+ * Changes an `insert into` query to an `insert ignore into` query.
1072
+ *
1073
+ * If you use the ignore modifier, ignorable errors that occur while executing the
1074
+ * insert statement are ignored. For example, without ignore, a row that duplicates
1075
+ * an existing unique index or primary key value in the table causes a duplicate-key
1076
+ * error and the statement is aborted. With ignore, the row is discarded and no error
1077
+ * occurs.
1078
+ *
1079
+ * This is only supported on some dialects like MySQL. On most dialects you should
1080
+ * use the {@link onConflictDoNothing} method.
1081
+ *
1082
+ * @example
1083
+ * ```ts
1084
+ * await db.insertInto('person')
1085
+ * .ignore()
1086
+ * .values(values)
1087
+ * .execute()
1088
+ * ```
1089
+ */
1090
+ ignore(): QueryBuilder<DB, TB, O>;
1070
1091
  /**
1071
1092
  * Ignores an insert if the column or constraint given as the first
1072
1093
  * argument conflicts with the current rows in the database and
@@ -1082,9 +1103,9 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
1082
1103
  * The second argument (updates) can be anything the {@link QueryBuilder.set | set}
1083
1104
  * method accepts.
1084
1105
  *
1085
- * This method generates different SQL on different dialects. For example
1086
- * `on duplicate key update` is used on mysql and `on conflict (columns) do update`
1087
- * on postgres and sqlite.
1106
+ * The `on conflict do update` statement is only implemented by some dialects
1107
+ * like postgres and sqlite. On MySQL you should use the {@link onDuplicateKeyUpdate}
1108
+ * method instead.
1088
1109
  *
1089
1110
  * Also see the {@link QueryBuilder.onConflictDoNothing | onConflictDoNothing}
1090
1111
  * method.
@@ -1140,6 +1161,24 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
1140
1161
  onConflictUpdate(column: AnyColumn<DB, TB>, updates: MutationObject<DB, TB>): QueryBuilder<DB, TB, O>;
1141
1162
  onConflictUpdate(columns: ReadonlyArray<AnyColumn<DB, TB>>, updates: MutationObject<DB, TB>): QueryBuilder<DB, TB, O>;
1142
1163
  onConflictUpdate(constraint: OnConflictConstraintTarget, updates: MutationObject<DB, TB>): QueryBuilder<DB, TB, O>;
1164
+ /**
1165
+ * Adds `on duplicate key update` to an insert query.
1166
+ *
1167
+ * If you specify `on duplicate key update`, and a row is inserted that would cause
1168
+ * a duplicate value in a unique index or primary key, an update of the old row occurs.
1169
+ *
1170
+ * This is only implemented by some dialects like MySQL. On most dialects you should
1171
+ * use {@link onConflictUpdate} instead.
1172
+ *
1173
+ * @example
1174
+ * ```ts
1175
+ * await db
1176
+ * .insertInto('person')
1177
+ * .values(values)
1178
+ * .onDuplicateKeyUpdate({ species: 'hamster' })
1179
+ * ```
1180
+ */
1181
+ onDuplicateKeyUpdate(updates: MutationObject<DB, TB>): QueryBuilder<DB, TB, O>;
1143
1182
  /**
1144
1183
  * Sets the values to update for an {@link Kysely.updateTable | update} query.
1145
1184
  *
@@ -1566,7 +1605,7 @@ export interface QueryBuilderProps {
1566
1605
  readonly queryId: QueryId;
1567
1606
  readonly queryNode: QueryNode;
1568
1607
  readonly executor: QueryExecutor;
1569
- readonly adapter: DialectAdapter;
1608
+ readonly parseContext: ParseContext;
1570
1609
  }
1571
1610
  /**
1572
1611
  * {@link QueryBuilder} with an alias. The result of calling {@link QueryBuilder.as}.