kysely 0.8.1 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +47 -4
  2. package/dist/cjs/dialect/mysql/mysql-driver.js +2 -2
  3. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -2
  4. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -29
  5. package/dist/cjs/operation-node/create-schema-node.d.ts +1 -1
  6. package/dist/cjs/operation-node/create-schema-node.js +2 -2
  7. package/dist/cjs/operation-node/create-table-node.d.ts +1 -5
  8. package/dist/cjs/operation-node/create-table-node.js +1 -31
  9. package/dist/cjs/operation-node/join-node.d.ts +2 -1
  10. package/dist/cjs/operation-node/join-node.js +8 -6
  11. package/dist/cjs/operation-node/operation-node-source.d.ts +1 -1
  12. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  13. package/dist/cjs/operation-node/operation-node-transformer.js +11 -1
  14. package/dist/cjs/operation-node/operation-node-visitor.d.ts +61 -59
  15. package/dist/cjs/operation-node/operation-node-visitor.js +1 -316
  16. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  17. package/dist/cjs/operation-node/primitive-value-list-node.js +1 -1
  18. package/dist/cjs/operation-node/query-node.d.ts +4 -3
  19. package/dist/cjs/operation-node/query-node.js +10 -2
  20. package/dist/cjs/operation-node/select-query-node.d.ts +5 -1
  21. package/dist/cjs/operation-node/select-query-node.js +18 -2
  22. package/dist/cjs/operation-node/union-node.d.ts +16 -0
  23. package/dist/cjs/operation-node/union-node.js +19 -0
  24. package/dist/cjs/parser/group-by-parser.d.ts +4 -0
  25. package/dist/cjs/parser/group-by-parser.js +9 -0
  26. package/dist/cjs/parser/insert-values-parser.d.ts +1 -1
  27. package/dist/cjs/parser/join-parser.d.ts +6 -3
  28. package/dist/cjs/parser/order-by-parser.d.ts +2 -4
  29. package/dist/cjs/parser/order-by-parser.js +6 -3
  30. package/dist/cjs/parser/reference-parser.d.ts +1 -1
  31. package/dist/cjs/parser/reference-parser.js +1 -1
  32. package/dist/cjs/parser/table-parser.d.ts +8 -8
  33. package/dist/cjs/parser/union-parser.d.ts +5 -0
  34. package/dist/cjs/parser/union-parser.js +13 -0
  35. package/dist/cjs/parser/value-parser.d.ts +1 -1
  36. package/dist/cjs/query-builder/function-builder.d.ts +6 -6
  37. package/dist/cjs/query-builder/function-builder.js +6 -6
  38. package/dist/cjs/query-builder/join-builder.js +8 -8
  39. package/dist/cjs/query-builder/query-builder.d.ts +30 -1
  40. package/dist/cjs/query-builder/query-builder.js +66 -22
  41. package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
  42. package/dist/cjs/query-compiler/default-query-compiler.d.ts +8 -2
  43. package/dist/cjs/query-compiler/default-query-compiler.js +33 -22
  44. package/dist/cjs/query-creator.d.ts +6 -3
  45. package/dist/cjs/query-creator.js +5 -2
  46. package/dist/cjs/schema/alter-table-builder.d.ts +3 -0
  47. package/dist/cjs/schema/alter-table-builder.js +3 -0
  48. package/dist/cjs/schema/column-definition-builder.d.ts +14 -5
  49. package/dist/cjs/schema/create-schema-builder.js +1 -1
  50. package/dist/cjs/schema/create-table-builder.d.ts +55 -10
  51. package/dist/cjs/schema/create-table-builder.js +59 -17
  52. package/dist/cjs/schema/schema.d.ts +37 -2
  53. package/dist/cjs/schema/schema.js +36 -1
  54. package/dist/cjs/util/object-utils.d.ts +12 -11
  55. package/dist/cjs/util/object-utils.js +6 -2
  56. package/dist/esm/dialect/mysql/mysql-driver.js +3 -3
  57. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -2
  58. package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -29
  59. package/dist/esm/operation-node/create-schema-node.d.ts +1 -1
  60. package/dist/esm/operation-node/create-schema-node.js +2 -2
  61. package/dist/esm/operation-node/create-table-node.d.ts +1 -5
  62. package/dist/esm/operation-node/create-table-node.js +1 -31
  63. package/dist/esm/operation-node/join-node.d.ts +2 -1
  64. package/dist/esm/operation-node/join-node.js +8 -6
  65. package/dist/esm/operation-node/operation-node-source.d.ts +1 -1
  66. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  67. package/dist/esm/operation-node/operation-node-transformer.js +11 -1
  68. package/dist/esm/operation-node/operation-node-visitor.d.ts +61 -59
  69. package/dist/esm/operation-node/operation-node-visitor.js +1 -316
  70. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  71. package/dist/esm/operation-node/primitive-value-list-node.js +1 -1
  72. package/dist/esm/operation-node/query-node.d.ts +4 -3
  73. package/dist/esm/operation-node/query-node.js +10 -2
  74. package/dist/esm/operation-node/select-query-node.d.ts +5 -1
  75. package/dist/esm/operation-node/select-query-node.js +18 -2
  76. package/dist/esm/operation-node/union-node.d.ts +16 -0
  77. package/dist/esm/operation-node/union-node.js +16 -0
  78. package/dist/esm/parser/group-by-parser.d.ts +4 -0
  79. package/dist/esm/parser/group-by-parser.js +5 -0
  80. package/dist/esm/parser/insert-values-parser.d.ts +1 -1
  81. package/dist/esm/parser/join-parser.d.ts +6 -3
  82. package/dist/esm/parser/order-by-parser.d.ts +2 -4
  83. package/dist/esm/parser/order-by-parser.js +6 -2
  84. package/dist/esm/parser/reference-parser.d.ts +1 -1
  85. package/dist/esm/parser/reference-parser.js +2 -2
  86. package/dist/esm/parser/table-parser.d.ts +8 -8
  87. package/dist/esm/parser/union-parser.d.ts +5 -0
  88. package/dist/esm/parser/union-parser.js +9 -0
  89. package/dist/esm/parser/value-parser.d.ts +1 -1
  90. package/dist/esm/query-builder/function-builder.d.ts +6 -6
  91. package/dist/esm/query-builder/function-builder.js +6 -6
  92. package/dist/esm/query-builder/join-builder.js +8 -8
  93. package/dist/esm/query-builder/query-builder.d.ts +30 -1
  94. package/dist/esm/query-builder/query-builder.js +67 -23
  95. package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
  96. package/dist/esm/query-compiler/default-query-compiler.d.ts +8 -2
  97. package/dist/esm/query-compiler/default-query-compiler.js +33 -22
  98. package/dist/esm/query-creator.d.ts +6 -3
  99. package/dist/esm/query-creator.js +5 -2
  100. package/dist/esm/schema/alter-table-builder.d.ts +3 -0
  101. package/dist/esm/schema/alter-table-builder.js +3 -0
  102. package/dist/esm/schema/column-definition-builder.d.ts +14 -5
  103. package/dist/esm/schema/create-schema-builder.js +1 -1
  104. package/dist/esm/schema/create-table-builder.d.ts +55 -10
  105. package/dist/esm/schema/create-table-builder.js +60 -18
  106. package/dist/esm/schema/schema.d.ts +37 -2
  107. package/dist/esm/schema/schema.js +36 -1
  108. package/dist/esm/util/object-utils.d.ts +12 -11
  109. package/dist/esm/util/object-utils.js +4 -1
  110. package/package.json +1 -1
@@ -66,9 +66,9 @@ export declare class FunctionBuilder<DB, TB extends keyof DB> {
66
66
  * Calls the `sum` function for the column given as the argument.
67
67
  *
68
68
  * If this is used in a `select` statement the type of the selected expression
69
- * will be `number | string` by default. This is because Kysely can't know the
70
- * type the db driver outputs. Sometimes the output can be larger than the
71
- * largest javascript number and a string is returned instead. Most drivers
69
+ * will be `number | string | BigInt` by default. This is because Kysely can't
70
+ * know the type the db driver outputs. Sometimes the output can be larger than
71
+ * the largest javascript number and a string is returned instead. Most drivers
72
72
  * allow you to configure the output type of large numbers and Kysely can't
73
73
  * know if you've done so.
74
74
  *
@@ -88,9 +88,9 @@ export declare class FunctionBuilder<DB, TB extends keyof DB> {
88
88
  * Calls the `count` function for the column given as the argument.
89
89
  *
90
90
  * If this is used in a `select` statement the type of the selected expression
91
- * will be `number | string` by default. This is because Kysely can't know the
92
- * type the db driver outputs. Sometimes the output can be larger than the
93
- * largest javascript number and a string is returned instead. Most drivers
91
+ * will be `number | string | BigInt` by default. This is because Kysely can't
92
+ * know the type the db driver outputs. Sometimes the output can be larger than
93
+ * the largest javascript number and a string is returned instead. Most drivers
94
94
  * allow you to configure the output type of large numbers and Kysely can't
95
95
  * know if you've done so.
96
96
  *
@@ -82,9 +82,9 @@ class FunctionBuilder {
82
82
  * Calls the `sum` function for the column given as the argument.
83
83
  *
84
84
  * If this is used in a `select` statement the type of the selected expression
85
- * will be `number | string` by default. This is because Kysely can't know the
86
- * type the db driver outputs. Sometimes the output can be larger than the
87
- * largest javascript number and a string is returned instead. Most drivers
85
+ * will be `number | string | BigInt` by default. This is because Kysely can't
86
+ * know the type the db driver outputs. Sometimes the output can be larger than
87
+ * the largest javascript number and a string is returned instead. Most drivers
88
88
  * allow you to configure the output type of large numbers and Kysely can't
89
89
  * know if you've done so.
90
90
  *
@@ -106,9 +106,9 @@ class FunctionBuilder {
106
106
  * Calls the `count` function for the column given as the argument.
107
107
  *
108
108
  * If this is used in a `select` statement the type of the selected expression
109
- * will be `number | string` by default. This is because Kysely can't know the
110
- * type the db driver outputs. Sometimes the output can be larger than the
111
- * largest javascript number and a string is returned instead. Most drivers
109
+ * will be `number | string | BigInt` by default. This is because Kysely can't
110
+ * know the type the db driver outputs. Sometimes the output can be larger than
111
+ * the largest javascript number and a string is returned instead. Most drivers
112
112
  * allow you to configure the output type of large numbers and Kysely can't
113
113
  * know if you've done so.
114
114
  *
@@ -13,13 +13,13 @@ class JoinBuilder {
13
13
  on(...args) {
14
14
  return new JoinBuilder({
15
15
  ...this.#props,
16
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'And', (0, filter_parser_js_1.parseOnFilter)(this.#props.parseContext, args)),
16
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, filter_parser_js_1.parseOnFilter)(this.#props.parseContext, args)),
17
17
  });
18
18
  }
19
19
  orOn(...args) {
20
20
  return new JoinBuilder({
21
21
  ...this.#props,
22
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'Or', (0, filter_parser_js_1.parseOnFilter)(this.#props.parseContext, args)),
22
+ joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, filter_parser_js_1.parseOnFilter)(this.#props.parseContext, args)),
23
23
  });
24
24
  }
25
25
  /**
@@ -31,7 +31,7 @@ class JoinBuilder {
31
31
  onRef(lhs, op, rhs) {
32
32
  return new JoinBuilder({
33
33
  ...this.#props,
34
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'And', (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
34
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
35
35
  });
36
36
  }
37
37
  /**
@@ -43,7 +43,7 @@ class JoinBuilder {
43
43
  orOnRef(lhs, op, rhs) {
44
44
  return new JoinBuilder({
45
45
  ...this.#props,
46
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'Or', (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
46
+ joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
47
47
  });
48
48
  }
49
49
  /**
@@ -55,7 +55,7 @@ class JoinBuilder {
55
55
  onExists(arg) {
56
56
  return new JoinBuilder({
57
57
  ...this.#props,
58
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'And', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
58
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
59
59
  });
60
60
  }
61
61
  /**
@@ -67,7 +67,7 @@ class JoinBuilder {
67
67
  onNotExists(arg) {
68
68
  return new JoinBuilder({
69
69
  ...this.#props,
70
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'And', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
70
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
71
71
  });
72
72
  }
73
73
  /**
@@ -79,7 +79,7 @@ class JoinBuilder {
79
79
  orOnExists(arg) {
80
80
  return new JoinBuilder({
81
81
  ...this.#props,
82
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'Or', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
82
+ joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
83
83
  });
84
84
  }
85
85
  /**
@@ -91,7 +91,7 @@ class JoinBuilder {
91
91
  orOnNotExists(arg) {
92
92
  return new JoinBuilder({
93
93
  ...this.#props,
94
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, 'Or', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
94
+ joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
95
95
  });
96
96
  }
97
97
  toOperationNode() {
@@ -18,6 +18,7 @@ import { QueryExecutor } from '../query-executor/query-executor.js';
18
18
  import { QueryId } from '../util/query-id.js';
19
19
  import { OnConflictConstraintTarget } from '../parser/on-conflict-parser.js';
20
20
  import { ParseContext } from '../parser/parse-context.js';
21
+ import { UnionExpression } from '../parser/union-parser.js';
21
22
  /**
22
23
  * The main query builder class.
23
24
  *
@@ -998,7 +999,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
998
999
  * ```
999
1000
  */
1000
1001
  values(row: InsertObject<DB, TB>): QueryBuilder<DB, TB, O>;
1001
- values(row: InsertObject<DB, TB>[]): QueryBuilder<DB, TB, O>;
1002
+ values(row: ReadonlyArray<InsertObject<DB, TB>>): QueryBuilder<DB, TB, O>;
1002
1003
  /**
1003
1004
  * Ignores the insert if the column or constraint given as the first
1004
1005
  * argument conflicts with the current rows in the database. The
@@ -1553,6 +1554,34 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
1553
1554
  * ```
1554
1555
  */
1555
1556
  offset(offset: number): QueryBuilder<DB, TB, O>;
1557
+ /**
1558
+ * Combines another select query or raw expression to this query using `union`.
1559
+ *
1560
+ * The output row type of the combined query must match `this` query.
1561
+ *
1562
+ * @xample
1563
+ * ```ts
1564
+ * db.selectFrom('person')
1565
+ * .select(['id', 'first_name as name'])
1566
+ * .union(db.selectFrom('pet').select(['id', 'name']))
1567
+ * .orderBy('name')
1568
+ * ```
1569
+ */
1570
+ union(expression: UnionExpression<DB, O>): QueryBuilder<DB, TB, O>;
1571
+ /**
1572
+ * Combines another select query or raw expression to this query using `union all`.
1573
+ *
1574
+ * The output row type of the combined query must match `this` query.
1575
+ *
1576
+ * @xample
1577
+ * ```ts
1578
+ * db.selectFrom('person')
1579
+ * .select(['id', 'first_name as name'])
1580
+ * .unionAll(db.selectFrom('pet').select(['id', 'name']))
1581
+ * .orderBy('name')
1582
+ * ```
1583
+ */
1584
+ unionAll(expression: UnionExpression<DB, O>): QueryBuilder<DB, TB, O>;
1556
1585
  /**
1557
1586
  * Gives an alias for the query. This method is only useful for sub queries.
1558
1587
  *
@@ -6,13 +6,10 @@ const join_parser_js_1 = require("../parser/join-parser.js");
6
6
  const select_parser_js_1 = require("../parser/select-parser.js");
7
7
  const filter_parser_js_1 = require("../parser/filter-parser.js");
8
8
  const insert_values_parser_js_1 = require("../parser/insert-values-parser.js");
9
- const reference_parser_js_1 = require("../parser/reference-parser.js");
10
- const order_by_item_node_js_1 = require("../operation-node/order-by-item-node.js");
11
9
  const select_query_node_js_1 = require("../operation-node/select-query-node.js");
12
10
  const insert_query_node_js_1 = require("../operation-node/insert-query-node.js");
13
11
  const query_node_js_1 = require("../operation-node/query-node.js");
14
12
  const order_by_parser_js_1 = require("../parser/order-by-parser.js");
15
- const group_by_item_node_js_1 = require("../operation-node/group-by-item-node.js");
16
13
  const update_query_node_js_1 = require("../operation-node/update-query-node.js");
17
14
  const update_set_parser_js_1 = require("../parser/update-set-parser.js");
18
15
  const prevent_await_js_1 = require("../util/prevent-await.js");
@@ -22,6 +19,8 @@ const on_conflict_parser_js_1 = require("../parser/on-conflict-parser.js");
22
19
  const object_utils_js_1 = require("../util/object-utils.js");
23
20
  const delete_query_node_js_1 = require("../operation-node/delete-query-node.js");
24
21
  const on_duplicate_key_node_js_1 = require("../operation-node/on-duplicate-key-node.js");
22
+ const group_by_parser_js_1 = require("../parser/group-by-parser.js");
23
+ const union_parser_js_1 = require("../parser/union-parser.js");
25
24
  /**
26
25
  * The main query builder class.
27
26
  *
@@ -46,7 +45,7 @@ class QueryBuilder {
46
45
  assertCanHaveWhereClause(this.#props.queryNode);
47
46
  return new QueryBuilder({
48
47
  ...this.#props,
49
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
48
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
50
49
  });
51
50
  }
52
51
  /**
@@ -104,14 +103,14 @@ class QueryBuilder {
104
103
  assertCanHaveWhereClause(this.#props.queryNode);
105
104
  return new QueryBuilder({
106
105
  ...this.#props,
107
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
106
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
108
107
  });
109
108
  }
110
109
  orWhere(...args) {
111
110
  assertCanHaveWhereClause(this.#props.queryNode);
112
111
  return new QueryBuilder({
113
112
  ...this.#props,
114
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
113
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
115
114
  });
116
115
  }
117
116
  /**
@@ -124,7 +123,7 @@ class QueryBuilder {
124
123
  assertCanHaveWhereClause(this.#props.queryNode);
125
124
  return new QueryBuilder({
126
125
  ...this.#props,
127
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
126
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
128
127
  });
129
128
  }
130
129
  /**
@@ -190,7 +189,7 @@ class QueryBuilder {
190
189
  assertCanHaveWhereClause(this.#props.queryNode);
191
190
  return new QueryBuilder({
192
191
  ...this.#props,
193
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
192
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
194
193
  });
195
194
  }
196
195
  /**
@@ -200,7 +199,7 @@ class QueryBuilder {
200
199
  assertCanHaveWhereClause(this.#props.queryNode);
201
200
  return new QueryBuilder({
202
201
  ...this.#props,
203
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
202
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
204
203
  });
205
204
  }
206
205
  /**
@@ -210,7 +209,7 @@ class QueryBuilder {
210
209
  assertCanHaveWhereClause(this.#props.queryNode);
211
210
  return new QueryBuilder({
212
211
  ...this.#props,
213
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
212
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
214
213
  });
215
214
  }
216
215
  /**
@@ -220,14 +219,14 @@ class QueryBuilder {
220
219
  assertCanHaveWhereClause(this.#props.queryNode);
221
220
  return new QueryBuilder({
222
221
  ...this.#props,
223
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
222
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
224
223
  });
225
224
  }
226
225
  having(...args) {
227
226
  assertCanHaveHavingClause(this.#props.queryNode);
228
227
  return new QueryBuilder({
229
228
  ...this.#props,
230
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
229
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
231
230
  });
232
231
  }
233
232
  /**
@@ -238,14 +237,14 @@ class QueryBuilder {
238
237
  assertCanHaveHavingClause(this.#props.queryNode);
239
238
  return new QueryBuilder({
240
239
  ...this.#props,
241
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
240
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
242
241
  });
243
242
  }
244
243
  orHaving(...args) {
245
244
  assertCanHaveHavingClause(this.#props.queryNode);
246
245
  return new QueryBuilder({
247
246
  ...this.#props,
248
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
247
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
249
248
  });
250
249
  }
251
250
  /**
@@ -256,7 +255,7 @@ class QueryBuilder {
256
255
  assertCanHaveHavingClause(this.#props.queryNode);
257
256
  return new QueryBuilder({
258
257
  ...this.#props,
259
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
258
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
260
259
  });
261
260
  }
262
261
  /**
@@ -267,7 +266,7 @@ class QueryBuilder {
267
266
  assertCanHaveHavingClause(this.#props.queryNode);
268
267
  return new QueryBuilder({
269
268
  ...this.#props,
270
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
269
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
271
270
  });
272
271
  }
273
272
  /**
@@ -278,7 +277,7 @@ class QueryBuilder {
278
277
  assertCanHaveHavingClause(this.#props.queryNode);
279
278
  return new QueryBuilder({
280
279
  ...this.#props,
281
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
280
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
282
281
  });
283
282
  }
284
283
  /**
@@ -289,7 +288,7 @@ class QueryBuilder {
289
288
  assertCanHaveHavingClause(this.#props.queryNode);
290
289
  return new QueryBuilder({
291
290
  ...this.#props,
292
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
291
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
293
292
  });
294
293
  }
295
294
  /**
@@ -300,7 +299,7 @@ class QueryBuilder {
300
299
  assertCanHaveHavingClause(this.#props.queryNode);
301
300
  return new QueryBuilder({
302
301
  ...this.#props,
303
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
302
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
304
303
  });
305
304
  }
306
305
  select(selection) {
@@ -717,14 +716,14 @@ class QueryBuilder {
717
716
  assertCanHaveOrderByClause(this.#props.queryNode);
718
717
  return new QueryBuilder({
719
718
  ...this.#props,
720
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, order_by_item_node_js_1.OrderByItemNode.create((0, order_by_parser_js_1.parseOrderByExpression)(this.#props.parseContext, orderBy), (0, order_by_parser_js_1.parseOrderByDirectionExpression)(direction))),
719
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, (0, order_by_parser_js_1.parseOrderBy)(this.#props.parseContext, orderBy, direction)),
721
720
  });
722
721
  }
723
722
  groupBy(orderBy) {
724
723
  assertCanHaveGroupByClause(this.#props.queryNode);
725
724
  return new QueryBuilder({
726
725
  ...this.#props,
727
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, (0, reference_parser_js_1.parseReferenceExpressionOrList)(this.#props.parseContext, orderBy).map(group_by_item_node_js_1.GroupByItemNode.create)),
726
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, (0, group_by_parser_js_1.parseGroupBy)(this.#props.parseContext, orderBy)),
728
727
  });
729
728
  }
730
729
  /**
@@ -779,6 +778,46 @@ class QueryBuilder {
779
778
  queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOffset(this.#props.queryNode, offset_node_js_1.OffsetNode.create(offset)),
780
779
  });
781
780
  }
781
+ /**
782
+ * Combines another select query or raw expression to this query using `union`.
783
+ *
784
+ * The output row type of the combined query must match `this` query.
785
+ *
786
+ * @xample
787
+ * ```ts
788
+ * db.selectFrom('person')
789
+ * .select(['id', 'first_name as name'])
790
+ * .union(db.selectFrom('pet').select(['id', 'name']))
791
+ * .orderBy('name')
792
+ * ```
793
+ */
794
+ union(expression) {
795
+ assertCanHaveUnion(this.#props.queryNode);
796
+ return new QueryBuilder({
797
+ ...this.#props,
798
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithUnion(this.#props.queryNode, (0, union_parser_js_1.parseUnion)(expression, false)),
799
+ });
800
+ }
801
+ /**
802
+ * Combines another select query or raw expression to this query using `union all`.
803
+ *
804
+ * The output row type of the combined query must match `this` query.
805
+ *
806
+ * @xample
807
+ * ```ts
808
+ * db.selectFrom('person')
809
+ * .select(['id', 'first_name as name'])
810
+ * .unionAll(db.selectFrom('pet').select(['id', 'name']))
811
+ * .orderBy('name')
812
+ * ```
813
+ */
814
+ unionAll(expression) {
815
+ assertCanHaveUnion(this.#props.queryNode);
816
+ return new QueryBuilder({
817
+ ...this.#props,
818
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithUnion(this.#props.queryNode, (0, union_parser_js_1.parseUnion)(expression, true)),
819
+ });
820
+ }
782
821
  /**
783
822
  * Gives an alias for the query. This method is only useful for sub queries.
784
823
  *
@@ -964,7 +1003,7 @@ function assertCanHaveUpdates(node) {
964
1003
  }
965
1004
  function assertCanHaveReturningClause(node) {
966
1005
  if (!query_node_js_1.QueryNode.isMutating(node)) {
967
- throw new Error('only an insert, delete and update queries can have a returning clause');
1006
+ throw new Error('only insert, delete and update queries can have a returning clause');
968
1007
  }
969
1008
  }
970
1009
  function assertCanHaveOrderByClause(node) {
@@ -987,3 +1026,8 @@ function assertCanHaveOffset(node) {
987
1026
  throw new Error('only a select query can have an offset');
988
1027
  }
989
1028
  }
1029
+ function assertCanHaveUnion(node) {
1030
+ if (!select_query_node_js_1.SelectQueryNode.is(node)) {
1031
+ throw new Error('only a select query can have an union');
1032
+ }
1033
+ }
@@ -1,4 +1,4 @@
1
1
  export interface CompiledQuery {
2
2
  readonly sql: string;
3
- readonly parameters: ReadonlyArray<any>;
3
+ readonly parameters: ReadonlyArray<unknown>;
4
4
  }
@@ -60,6 +60,8 @@ import { ForeignKeyConstraintNode } from '../operation-node/foreign-key-constrai
60
60
  import { ColumnDefinitionNode } from '../operation-node/column-definition-node.js';
61
61
  import { ModifyColumnNode } from '../operation-node/modify-column-node.js';
62
62
  import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
63
+ import { ColumnNode } from '../operation-node/column-node.js';
64
+ import { UnionNode } from '../operation-node/union-node.js';
63
65
  export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
64
66
  #private;
65
67
  protected get numParameters(): number;
@@ -67,6 +69,8 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
67
69
  protected getSql(): string;
68
70
  protected visitSelectQuery(node: SelectQueryNode): void;
69
71
  protected visitFrom(node: FromNode): void;
72
+ protected visitSelection(node: SelectionNode): void;
73
+ protected visitColumn(node: ColumnNode): void;
70
74
  protected compileDistinctOn(selections: ReadonlyArray<SelectionNode>): void;
71
75
  protected compileList(nodes: ReadonlyArray<OperationNode>, separator?: string): void;
72
76
  protected visitWhere(node: WhereNode): void;
@@ -92,6 +96,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
92
96
  protected visitTable(node: TableNode): void;
93
97
  protected visitCreateTable(node: CreateTableNode): void;
94
98
  protected visitColumnDefinition(node: ColumnDefinitionNode): void;
99
+ protected getAutoIncrement(): string;
95
100
  protected visitReferences(node: ReferencesNode): void;
96
101
  protected visitDropTable(node: DropTableNode): void;
97
102
  protected visitDataType(node: DataTypeNode): void;
@@ -124,11 +129,12 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
124
129
  protected visitModifyColumn(node: ModifyColumnNode): void;
125
130
  protected visitAddConstraint(node: AddConstraintNode): void;
126
131
  protected visitDropConstraint(node: DropConstraintNode): void;
132
+ protected visitUnion(node: UnionNode): void;
127
133
  protected append(str: string): void;
128
- protected appendValue(value: PrimitiveValue): void;
134
+ protected appendValue(parameter: unknown): void;
129
135
  protected getLeftIdentifierWrapper(): string;
130
136
  protected getRightIdentifierWrapper(): string;
131
137
  protected getCurrentParameterPlaceholder(): string;
132
- protected addParameter(parameter: any): void;
138
+ protected addParameter(parameter: unknown): void;
133
139
  protected appendImmediateValue(value: PrimitiveValue): void;
134
140
  }
@@ -1,28 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DefaultQueryCompiler = void 0;
4
- const data_type_node_js_1 = require("../operation-node/data-type-node.js");
5
4
  const operation_node_visitor_js_1 = require("../operation-node/operation-node-visitor.js");
6
5
  const query_node_js_1 = require("../operation-node/query-node.js");
7
6
  const raw_node_js_1 = require("../operation-node/raw-node.js");
8
7
  const object_utils_js_1 = require("../util/object-utils.js");
9
8
  class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisitor {
10
- #sqlFragments = [];
9
+ #sql = '';
11
10
  #parameters = [];
12
11
  get numParameters() {
13
12
  return this.#parameters.length;
14
13
  }
15
14
  compileQuery(node) {
16
- this.#sqlFragments = [];
15
+ this.#sql = '';
17
16
  this.#parameters = [];
18
17
  this.visitNode(node);
19
18
  return (0, object_utils_js_1.freeze)({
20
19
  sql: this.getSql(),
21
- parameters: this.#parameters,
20
+ parameters: [...this.#parameters],
22
21
  });
23
22
  }
24
23
  getSql() {
25
- return this.#sqlFragments.join('');
24
+ return this.#sql;
26
25
  }
27
26
  visitSelectQuery(node) {
28
27
  // This is a sub query if this is not the root node.
@@ -64,6 +63,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
64
63
  this.append(' ');
65
64
  this.visitNode(node.having);
66
65
  }
66
+ if (node.union) {
67
+ this.append(' ');
68
+ this.compileList(node.union, ' ');
69
+ }
67
70
  if (node.orderBy) {
68
71
  this.append(' ');
69
72
  this.visitNode(node.orderBy);
@@ -90,6 +93,12 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
90
93
  this.append('from ');
91
94
  this.compileList(node.froms);
92
95
  }
96
+ visitSelection(node) {
97
+ this.visitNode(node.selection);
98
+ }
99
+ visitColumn(node) {
100
+ this.visitNode(node.column);
101
+ }
93
102
  compileDistinctOn(selections) {
94
103
  this.append('distinct on (');
95
104
  this.compileList(selections);
@@ -292,19 +301,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
292
301
  visitColumnDefinition(node) {
293
302
  this.visitNode(node.column);
294
303
  this.append(' ');
295
- if (node.isAutoIncrementing) {
296
- // Postgres overrides the data type for autoincrementing columns.
297
- if (data_type_node_js_1.DataTypeNode.is(node.dataType) &&
298
- node.dataType.dataType === 'bigint') {
299
- this.append('bigserial');
300
- }
301
- else {
302
- this.append('serial');
303
- }
304
- }
305
- else {
306
- this.visitNode(node.dataType);
307
- }
304
+ this.visitNode(node.dataType);
308
305
  if (node.defaultTo) {
309
306
  this.append(' default ');
310
307
  this.visitNode(node.defaultTo);
@@ -312,6 +309,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
312
309
  if (!node.isNullable) {
313
310
  this.append(' not null');
314
311
  }
312
+ if (node.isAutoIncrementing) {
313
+ this.append(' ');
314
+ this.append(this.getAutoIncrement());
315
+ }
315
316
  if (node.isUnique) {
316
317
  this.append(' unique');
317
318
  }
@@ -327,6 +328,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
327
328
  this.visitNode(node.check);
328
329
  }
329
330
  }
331
+ getAutoIncrement() {
332
+ return 'auto_increment';
333
+ }
330
334
  visitReferences(node) {
331
335
  this.append('references ');
332
336
  this.visitNode(node.table);
@@ -636,11 +640,18 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
636
640
  this.append('drop constraint ');
637
641
  this.visitNode(node.constraintName);
638
642
  }
643
+ visitUnion(node) {
644
+ this.append('union ');
645
+ if (node.all) {
646
+ this.append('all ');
647
+ }
648
+ this.visitNode(node.union);
649
+ }
639
650
  append(str) {
640
- this.#sqlFragments.push(str);
651
+ this.#sql += str;
641
652
  }
642
- appendValue(value) {
643
- this.addParameter(value);
653
+ appendValue(parameter) {
654
+ this.addParameter(parameter);
644
655
  this.append(this.getCurrentParameterPlaceholder());
645
656
  }
646
657
  getLeftIdentifierWrapper() {
@@ -682,7 +693,7 @@ const SELECT_MODIFIER_SQL = {
682
693
  ForNoKeyUpdate: 'for no key update',
683
694
  ForUpdate: 'for update',
684
695
  ForShare: 'for share',
685
- NoWait: 'no wait',
696
+ NoWait: 'nowait',
686
697
  SkipLocked: 'skip locked',
687
698
  };
688
699
  const JOIN_TYPE_SQL = {
@@ -10,7 +10,7 @@ export declare class QueryCreator<DB> {
10
10
  #private;
11
11
  constructor(props: QueryCreatorProps);
12
12
  /**
13
- * Creates a `select` query builder against the given table/tables.
13
+ * Creates a `select` query builder for the given table or tables.
14
14
  *
15
15
  * The tables passed to this method are built as the query's `from` clause.
16
16
  *
@@ -221,6 +221,9 @@ export declare class QueryCreator<DB> {
221
221
  * Sets the schema to be used for all table references that don't explicitly
222
222
  * specify a schema.
223
223
  *
224
+ * This only affects the query created through the builder returned from
225
+ * this method and doesn't modify the `db` instance.
226
+ *
224
227
  * @example
225
228
  * ```
226
229
  * await db.withSchema('mammals')
@@ -261,10 +264,10 @@ export declare class QueryCreator<DB> {
261
264
  * Provides a way to pass arbitrary SQL into your query and executing completely
262
265
  * raw queries.
263
266
  *
264
- * You can use strings `?` and `??` in the `sql` to bind parameters such as
267
+ * You can use the strings `?` and `??` in the `sql` to bind parameters such as
265
268
  * user input to the SQL. You should never EVER concatenate untrusted user
266
269
  * input to the SQL string to avoid injection vulnerabilities. Instead use `?`
267
- * in place of the value and pass the actual value in the `params` list. See
270
+ * in place of a value and pass the actual value in the `parameters` list. See
268
271
  * the examples below.
269
272
  *
270
273
  * You should only use `raw` when there is no other way to get the job done. This is
@@ -158,6 +158,9 @@ class QueryCreator {
158
158
  * Sets the schema to be used for all table references that don't explicitly
159
159
  * specify a schema.
160
160
  *
161
+ * This only affects the query created through the builder returned from
162
+ * this method and doesn't modify the `db` instance.
163
+ *
161
164
  * @example
162
165
  * ```
163
166
  * await db.withSchema('mammals')
@@ -203,10 +206,10 @@ class QueryCreator {
203
206
  * Provides a way to pass arbitrary SQL into your query and executing completely
204
207
  * raw queries.
205
208
  *
206
- * You can use strings `?` and `??` in the `sql` to bind parameters such as
209
+ * You can use the strings `?` and `??` in the `sql` to bind parameters such as
207
210
  * user input to the SQL. You should never EVER concatenate untrusted user
208
211
  * input to the SQL string to avoid injection vulnerabilities. Instead use `?`
209
- * in place of the value and pass the actual value in the `params` list. See
212
+ * in place of a value and pass the actual value in the `parameters` list. See
210
213
  * the examples below.
211
214
  *
212
215
  * You should only use `raw` when there is no other way to get the job done. This is
@@ -12,6 +12,9 @@ import { QueryId } from '../util/query-id.js';
12
12
  import { QueryExecutor } from '../query-executor/query-executor.js';
13
13
  import { DataTypeExpression } from '../parser/data-type-parser.js';
14
14
  import { ForeignKeyConstraintBuilder, ForeignKeyConstraintBuilderInterface } from './foreign-key-constraint-builder.js';
15
+ /**
16
+ * This builder can be used to create a `alter table` query.
17
+ */
15
18
  export declare class AlterTableBuilder {
16
19
  #private;
17
20
  constructor(props: AlterTableBuilderProps);