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
@@ -18,13 +18,13 @@ function parseSelectExpression(ctx, selection) {
18
18
  return SelectionNode.create(selection.toOperationNode());
19
19
  }
20
20
  else if (isFunction(selection)) {
21
- return SelectionNode.create(selection(ctx.createSubQueryBuilder()).toOperationNode());
21
+ return SelectionNode.create(selection(ctx.createExpressionBuilder()).toOperationNode());
22
22
  }
23
23
  else {
24
24
  throw new Error(`invalid value passed to select method: ${JSON.stringify(selection)}`);
25
25
  }
26
26
  }
27
- export function parseSelectAllArgs(table) {
27
+ export function parseSelectAll(table) {
28
28
  if (!table) {
29
29
  return [SelectionNode.createSelectAll()];
30
30
  }
@@ -35,7 +35,7 @@ export function parseSelectAllArgs(table) {
35
35
  return [parseSelectAllArg(table)];
36
36
  }
37
37
  }
38
- export function parseSelectAllArg(table) {
38
+ function parseSelectAllArg(table) {
39
39
  if (isString(table)) {
40
40
  return SelectionNode.createSelectAllFromTable(table);
41
41
  }
@@ -18,27 +18,32 @@ export function parseTableExpression(ctx, table) {
18
18
  return table.toOperationNode();
19
19
  }
20
20
  else if (isFunction(table)) {
21
- return table(ctx.createSubQueryBuilder()).toOperationNode();
21
+ return table(ctx.createExpressionBuilder()).toOperationNode();
22
22
  }
23
23
  else {
24
24
  throw new Error(`invalid table expression ${JSON.stringify(table)}`);
25
25
  }
26
26
  }
27
27
  export function parseAliasedTable(from) {
28
- const [table, alias] = from.split(' as ').map((it) => it.trim());
29
- if (alias) {
28
+ const ALIAS_SEPARATOR = ' as ';
29
+ if (from.includes(ALIAS_SEPARATOR)) {
30
+ const [table, alias] = from.split(ALIAS_SEPARATOR).map(trim);
30
31
  return AliasNode.create(parseTable(table), alias);
31
32
  }
32
33
  else {
33
- return parseTable(table);
34
+ return parseTable(from);
34
35
  }
35
36
  }
36
37
  export function parseTable(from) {
37
- if (from.includes('.')) {
38
- const [schema, table] = from.split('.').map((it) => it.trim());
38
+ const SCHEMA_SEPARATOR = '.';
39
+ if (from.includes(SCHEMA_SEPARATOR)) {
40
+ const [schema, table] = from.split(SCHEMA_SEPARATOR).map(trim);
39
41
  return TableNode.createWithSchema(schema, table);
40
42
  }
41
43
  else {
42
44
  return TableNode.create(from);
43
45
  }
44
46
  }
47
+ function trim(str) {
48
+ return str.trim();
49
+ }
@@ -20,7 +20,7 @@ export function parseMutationValueExpression(ctx, value) {
20
20
  }
21
21
  }
22
22
  else if (isFunction(value)) {
23
- const node = value(ctx.createSubQueryBuilder()).toOperationNode();
23
+ const node = value(ctx.createExpressionBuilder()).toOperationNode();
24
24
  if (!QueryNode.isMutating(node)) {
25
25
  return node;
26
26
  }
@@ -24,7 +24,7 @@ export function parseValueExpression(ctx, arg) {
24
24
  }
25
25
  }
26
26
  else if (isFunction(arg)) {
27
- const node = arg(ctx.createSubQueryBuilder()).toOperationNode();
27
+ const node = arg(ctx.createExpressionBuilder()).toOperationNode();
28
28
  if (!QueryNode.isMutating(node)) {
29
29
  return node;
30
30
  }
@@ -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
  }
@@ -4,8 +4,7 @@ import { parseTableExpressionOrList, } from '../parser/table-parser.js';
4
4
  import { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js';
5
5
  import { createQueryId } from '../util/query-id.js';
6
6
  import { freeze } from '../util/object-utils.js';
7
- import { createParseContext } from '../parser/parse-context.js';
8
- export class SubQueryBuilder {
7
+ export class ExpressionBuilder {
9
8
  #props;
10
9
  constructor(props) {
11
10
  this.#props = freeze(props);
@@ -14,20 +13,17 @@ export class SubQueryBuilder {
14
13
  return new QueryBuilder({
15
14
  queryId: createQueryId(),
16
15
  executor: this.#props.executor,
17
- adapter: this.#props.adapter,
18
- queryNode: SelectQueryNode.create(parseTableExpressionOrList(this.#parseContext, table)),
16
+ parseContext: this.#props.parseContext,
17
+ queryNode: SelectQueryNode.create(parseTableExpressionOrList(this.#props.parseContext, table)),
19
18
  });
20
19
  }
21
20
  /**
22
21
  * See {@link QueryCreator.withSchema}
23
22
  */
24
23
  withSchema(schema) {
25
- return new SubQueryBuilder({
24
+ return new ExpressionBuilder({
26
25
  ...this.#props,
27
26
  executor: this.#props.executor.withPluginAtFront(new WithSchemaPlugin(schema)),
28
27
  });
29
28
  }
30
- get #parseContext() {
31
- return createParseContext(this.#props.adapter);
32
- }
33
29
  }
@@ -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
  }
@@ -1,6 +1,5 @@
1
1
  import { JoinNode } from '../operation-node/join-node.js';
2
- import { parseExistExpression, parseNotExistExpression, parseOnFilter, parseReferenceFilter, } from '../parser/filter-parser.js';
3
- import { createParseContext } from '../parser/parse-context.js';
2
+ import { parseExistFilter, parseNotExistFilter, parseOnFilter, parseReferenceFilter, } from '../parser/filter-parser.js';
4
3
  import { freeze } from '../util/object-utils.js';
5
4
  import { preventAwait } from '../util/prevent-await.js';
6
5
  export class JoinBuilder {
@@ -11,13 +10,13 @@ export class JoinBuilder {
11
10
  on(...args) {
12
11
  return new JoinBuilder({
13
12
  ...this.#props,
14
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'And', parseOnFilter(this.#parseContext, args)),
13
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'And', parseOnFilter(this.#props.parseContext, args)),
15
14
  });
16
15
  }
17
16
  orOn(...args) {
18
17
  return new JoinBuilder({
19
18
  ...this.#props,
20
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'Or', parseOnFilter(this.#parseContext, args)),
19
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'Or', parseOnFilter(this.#props.parseContext, args)),
21
20
  });
22
21
  }
23
22
  /**
@@ -29,7 +28,7 @@ export class JoinBuilder {
29
28
  onRef(lhs, op, rhs) {
30
29
  return new JoinBuilder({
31
30
  ...this.#props,
32
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'And', parseReferenceFilter(this.#parseContext, lhs, op, rhs)),
31
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'And', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
33
32
  });
34
33
  }
35
34
  /**
@@ -41,7 +40,7 @@ export class JoinBuilder {
41
40
  orOnRef(lhs, op, rhs) {
42
41
  return new JoinBuilder({
43
42
  ...this.#props,
44
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'Or', parseReferenceFilter(this.#parseContext, lhs, op, rhs)),
43
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'Or', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
45
44
  });
46
45
  }
47
46
  /**
@@ -53,7 +52,7 @@ export class JoinBuilder {
53
52
  onExists(arg) {
54
53
  return new JoinBuilder({
55
54
  ...this.#props,
56
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'And', parseExistExpression(this.#parseContext, arg)),
55
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'And', parseExistFilter(this.#props.parseContext, arg)),
57
56
  });
58
57
  }
59
58
  /**
@@ -65,7 +64,7 @@ export class JoinBuilder {
65
64
  onNotExists(arg) {
66
65
  return new JoinBuilder({
67
66
  ...this.#props,
68
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'And', parseNotExistExpression(this.#parseContext, arg)),
67
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'And', parseNotExistFilter(this.#props.parseContext, arg)),
69
68
  });
70
69
  }
71
70
  /**
@@ -77,7 +76,7 @@ export class JoinBuilder {
77
76
  orOnExists(arg) {
78
77
  return new JoinBuilder({
79
78
  ...this.#props,
80
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'Or', parseExistExpression(this.#parseContext, arg)),
79
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'Or', parseExistFilter(this.#props.parseContext, arg)),
81
80
  });
82
81
  }
83
82
  /**
@@ -89,14 +88,11 @@ export class JoinBuilder {
89
88
  orOnNotExists(arg) {
90
89
  return new JoinBuilder({
91
90
  ...this.#props,
92
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'Or', parseNotExistExpression(this.#parseContext, arg)),
91
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'Or', parseNotExistFilter(this.#props.parseContext, arg)),
93
92
  });
94
93
  }
95
94
  toOperationNode() {
96
95
  return this.#props.joinNode;
97
96
  }
98
- get #parseContext() {
99
- return createParseContext(this.#props.adapter);
100
- }
101
97
  }
102
98
  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}.