kysely 0.9.1 → 0.9.2

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 (41) hide show
  1. package/dist/cjs/dialect/mysql/mysql-driver.js +2 -2
  2. package/dist/cjs/operation-node/join-node.d.ts +2 -1
  3. package/dist/cjs/operation-node/join-node.js +8 -6
  4. package/dist/cjs/operation-node/query-node.d.ts +4 -3
  5. package/dist/cjs/operation-node/query-node.js +10 -2
  6. package/dist/cjs/operation-node/select-query-node.d.ts +2 -1
  7. package/dist/cjs/operation-node/select-query-node.js +10 -2
  8. package/dist/cjs/parser/group-by-parser.d.ts +4 -0
  9. package/dist/cjs/parser/group-by-parser.js +9 -0
  10. package/dist/cjs/parser/order-by-parser.d.ts +2 -4
  11. package/dist/cjs/parser/order-by-parser.js +6 -3
  12. package/dist/cjs/parser/reference-parser.d.ts +1 -1
  13. package/dist/cjs/parser/reference-parser.js +1 -1
  14. package/dist/cjs/query-builder/join-builder.js +8 -8
  15. package/dist/cjs/query-builder/query-builder.js +20 -22
  16. package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
  17. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -2
  18. package/dist/cjs/query-compiler/default-query-compiler.js +2 -2
  19. package/dist/cjs/util/object-utils.d.ts +11 -11
  20. package/dist/cjs/util/object-utils.js +1 -1
  21. package/dist/esm/dialect/mysql/mysql-driver.js +3 -3
  22. package/dist/esm/operation-node/join-node.d.ts +2 -1
  23. package/dist/esm/operation-node/join-node.js +8 -6
  24. package/dist/esm/operation-node/query-node.d.ts +4 -3
  25. package/dist/esm/operation-node/query-node.js +10 -2
  26. package/dist/esm/operation-node/select-query-node.d.ts +2 -1
  27. package/dist/esm/operation-node/select-query-node.js +10 -2
  28. package/dist/esm/parser/group-by-parser.d.ts +4 -0
  29. package/dist/esm/parser/group-by-parser.js +5 -0
  30. package/dist/esm/parser/order-by-parser.d.ts +2 -4
  31. package/dist/esm/parser/order-by-parser.js +6 -2
  32. package/dist/esm/parser/reference-parser.d.ts +1 -1
  33. package/dist/esm/parser/reference-parser.js +2 -2
  34. package/dist/esm/query-builder/join-builder.js +8 -8
  35. package/dist/esm/query-builder/query-builder.js +21 -23
  36. package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
  37. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -2
  38. package/dist/esm/query-compiler/default-query-compiler.js +2 -2
  39. package/dist/esm/util/object-utils.d.ts +11 -11
  40. package/dist/esm/util/object-utils.js +1 -1
  41. package/package.json +1 -1
@@ -107,13 +107,13 @@ class MysqlConnection {
107
107
  async executeQuery(compiledQuery) {
108
108
  const result = await this.#executeQuery(compiledQuery);
109
109
  if ((0, object_utils_js_1.isObject)(result) && 'insertId' in result && 'affectedRows' in result) {
110
- if (result.insertId) {
110
+ if ((0, object_utils_js_1.isNumber)(result.insertId) && result.insertId > 0) {
111
111
  return {
112
112
  insertedPrimaryKey: result.insertId,
113
113
  rows: [],
114
114
  };
115
115
  }
116
- else {
116
+ else if ((0, object_utils_js_1.isNumber)(result.affectedRows)) {
117
117
  return {
118
118
  numUpdatedOrDeletedRows: result.affectedRows,
119
119
  rows: [],
@@ -21,5 +21,6 @@ export declare const JoinNode: Readonly<{
21
21
  is(node: OperationNode): node is JoinNode;
22
22
  create(joinType: JoinType, table: JoinTableNode): JoinNode;
23
23
  createWithOn(joinType: JoinType, table: JoinTableNode, on: JoinNodeOnNode): JoinNode;
24
- cloneWithOn(joinNode: JoinNode, op: 'And' | 'Or', on: JoinNodeOnNode): JoinNode;
24
+ cloneWithOn(joinNode: JoinNode, on: JoinNodeOnNode): JoinNode;
25
+ cloneWithOrOn(joinNode: JoinNode, on: JoinNodeOnNode): JoinNode;
25
26
  }>;
@@ -27,14 +27,16 @@ exports.JoinNode = (0, object_utils_js_1.freeze)({
27
27
  on,
28
28
  });
29
29
  },
30
- cloneWithOn(joinNode, op, on) {
30
+ cloneWithOn(joinNode, on) {
31
31
  return (0, object_utils_js_1.freeze)({
32
32
  ...joinNode,
33
- on: joinNode.on
34
- ? op === 'And'
35
- ? and_node_js_1.AndNode.create(joinNode.on, on)
36
- : or_node_js_1.OrNode.create(joinNode.on, on)
37
- : on,
33
+ on: joinNode.on ? and_node_js_1.AndNode.create(joinNode.on, on) : on,
34
+ });
35
+ },
36
+ cloneWithOrOn(joinNode, on) {
37
+ return (0, object_utils_js_1.freeze)({
38
+ ...joinNode,
39
+ on: joinNode.on ? or_node_js_1.OrNode.create(joinNode.on, on) : on,
38
40
  });
39
41
  },
40
42
  });
@@ -16,7 +16,8 @@ export declare const QueryNode: Readonly<{
16
16
  is(node: OperationNode): node is QueryNode;
17
17
  isMutating(node: OperationNode): node is MutatingQueryNode;
18
18
  isFilterable(node: OperationNode): node is FilterableQueryNode;
19
- cloneWithWhere<T extends FilterableQueryNode>(node: T, op: 'And' | 'Or', filter: WhereChildNode): T;
20
- cloneWithJoin<T_1 extends FilterableQueryNode>(node: T_1, join: JoinNode): T_1;
21
- cloneWithReturning<T_2 extends MutatingQueryNode>(node: T_2, selections: ReadonlyArray<SelectionNode>): T_2;
19
+ cloneWithWhere<T extends FilterableQueryNode>(node: T, filter: WhereChildNode): T;
20
+ cloneWithOrWhere<T_1 extends FilterableQueryNode>(node: T_1, filter: WhereChildNode): T_1;
21
+ cloneWithJoin<T_2 extends FilterableQueryNode>(node: T_2, join: JoinNode): T_2;
22
+ cloneWithReturning<T_3 extends MutatingQueryNode>(node: T_3, selections: ReadonlyArray<SelectionNode>): T_3;
22
23
  }>;
@@ -28,11 +28,19 @@ exports.QueryNode = (0, object_utils_js_1.freeze)({
28
28
  delete_query_node_js_1.DeleteQueryNode.is(node) ||
29
29
  update_query_node_js_1.UpdateQueryNode.is(node));
30
30
  },
31
- cloneWithWhere(node, op, filter) {
31
+ cloneWithWhere(node, filter) {
32
32
  return (0, object_utils_js_1.freeze)({
33
33
  ...node,
34
34
  where: node.where
35
- ? where_node_js_1.WhereNode.cloneWithFilter(node.where, op, filter)
35
+ ? where_node_js_1.WhereNode.cloneWithFilter(node.where, 'And', filter)
36
+ : where_node_js_1.WhereNode.create(filter),
37
+ });
38
+ },
39
+ cloneWithOrWhere(node, filter) {
40
+ return (0, object_utils_js_1.freeze)({
41
+ ...node,
42
+ where: node.where
43
+ ? where_node_js_1.WhereNode.cloneWithFilter(node.where, 'Or', filter)
36
44
  : where_node_js_1.WhereNode.create(filter),
37
45
  });
38
46
  },
@@ -42,6 +42,7 @@ export declare const SelectQueryNode: Readonly<{
42
42
  cloneWithGroupByItems(selectNode: SelectQueryNode, items: ReadonlyArray<GroupByItemNode>): SelectQueryNode;
43
43
  cloneWithLimit(selectNode: SelectQueryNode, limit: LimitNode): SelectQueryNode;
44
44
  cloneWithOffset(selectNode: SelectQueryNode, offset: OffsetNode): SelectQueryNode;
45
- cloneWithHaving(selectNode: SelectQueryNode, op: 'And' | 'Or', filter: HavingNodeChild): SelectQueryNode;
45
+ cloneWithHaving(selectNode: SelectQueryNode, filter: HavingNodeChild): SelectQueryNode;
46
+ cloneWithOrHaving(selectNode: SelectQueryNode, filter: HavingNodeChild): SelectQueryNode;
46
47
  cloneWithDistinct(selectNode: SelectQueryNode): SelectQueryNode;
47
48
  }>;
@@ -72,11 +72,19 @@ exports.SelectQueryNode = (0, object_utils_js_1.freeze)({
72
72
  offset,
73
73
  });
74
74
  },
75
- cloneWithHaving(selectNode, op, filter) {
75
+ cloneWithHaving(selectNode, filter) {
76
76
  return (0, object_utils_js_1.freeze)({
77
77
  ...selectNode,
78
78
  having: selectNode.having
79
- ? having_node_js_1.HavingNode.cloneWithFilter(selectNode.having, op, filter)
79
+ ? having_node_js_1.HavingNode.cloneWithFilter(selectNode.having, 'And', filter)
80
+ : having_node_js_1.HavingNode.create(filter),
81
+ });
82
+ },
83
+ cloneWithOrHaving(selectNode, filter) {
84
+ return (0, object_utils_js_1.freeze)({
85
+ ...selectNode,
86
+ having: selectNode.having
87
+ ? having_node_js_1.HavingNode.cloneWithFilter(selectNode.having, 'Or', filter)
80
88
  : having_node_js_1.HavingNode.create(filter),
81
89
  });
82
90
  },
@@ -0,0 +1,4 @@
1
+ import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
2
+ import { ParseContext } from './parse-context.js';
3
+ import { ReferenceExpressionOrList } from './reference-parser.js';
4
+ export declare function parseGroupBy(ctx: ParseContext, orderBy: ReferenceExpressionOrList<any, any>): GroupByItemNode[];
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseGroupBy = void 0;
4
+ const group_by_item_node_js_1 = require("../operation-node/group-by-item-node.js");
5
+ const reference_parser_js_1 = require("./reference-parser.js");
6
+ function parseGroupBy(ctx, orderBy) {
7
+ return (0, reference_parser_js_1.parseReferenceExpressionOrList)(ctx, orderBy).map(group_by_item_node_js_1.GroupByItemNode.create);
8
+ }
9
+ exports.parseGroupBy = parseGroupBy;
@@ -1,10 +1,8 @@
1
- import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js';
2
- import { RawNode } from '../operation-node/raw-node.js';
1
+ import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
3
2
  import { AnyRawBuilder } from '../util/type-utils.js';
4
3
  import { ParseContext } from './parse-context.js';
5
4
  import { ReferenceExpression } from './reference-parser.js';
6
5
  export declare type OrderByDirection = 'asc' | 'desc';
7
6
  export declare type OrderByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | keyof O;
8
7
  export declare type OrderByDirectionExpression = OrderByDirection | AnyRawBuilder;
9
- export declare function parseOrderByExpression(ctx: ParseContext, expr: OrderByExpression<any, any, any>): ReferenceExpressionNode;
10
- export declare function parseOrderByDirectionExpression(expr?: OrderByDirectionExpression): RawNode | undefined;
8
+ export declare function parseOrderBy(ctx: ParseContext, orderBy: OrderByExpression<any, any, any>, direction?: OrderByDirectionExpression): OrderByItemNode;
@@ -1,12 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseOrderByDirectionExpression = exports.parseOrderByExpression = void 0;
3
+ exports.parseOrderBy = void 0;
4
+ const order_by_item_node_js_1 = require("../operation-node/order-by-item-node.js");
4
5
  const raw_node_js_1 = require("../operation-node/raw-node.js");
5
6
  const reference_parser_js_1 = require("./reference-parser.js");
7
+ function parseOrderBy(ctx, orderBy, direction) {
8
+ return order_by_item_node_js_1.OrderByItemNode.create(parseOrderByExpression(ctx, orderBy), parseOrderByDirectionExpression(direction));
9
+ }
10
+ exports.parseOrderBy = parseOrderBy;
6
11
  function parseOrderByExpression(ctx, expr) {
7
12
  return (0, reference_parser_js_1.parseReferenceExpression)(ctx, expr);
8
13
  }
9
- exports.parseOrderByExpression = parseOrderByExpression;
10
14
  function parseOrderByDirectionExpression(expr) {
11
15
  if (!expr) {
12
16
  return undefined;
@@ -18,4 +22,3 @@ function parseOrderByDirectionExpression(expr) {
18
22
  return expr.toOperationNode();
19
23
  }
20
24
  }
21
- exports.parseOrderByDirectionExpression = parseOrderByDirectionExpression;
@@ -9,7 +9,7 @@ import { RawBuilder } from '../raw-builder/raw-builder.js';
9
9
  import { QueryBuilder } from '../query-builder/query-builder.js';
10
10
  import { ParseContext } from './parse-context.js';
11
11
  export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB> | DynamicReferenceBuilder<any>;
12
- export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReferenceExpression<DB, TB>[];
12
+ export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
13
13
  export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
14
14
  export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends QueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => QueryBuilder<any, any, infer O> ? ValueType<O> : PrimitiveValue;
15
15
  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;
@@ -9,7 +9,7 @@ const table_node_js_1 = require("../operation-node/table-node.js");
9
9
  const object_utils_js_1 = require("../util/object-utils.js");
10
10
  const query_node_js_1 = require("../operation-node/query-node.js");
11
11
  function parseReferenceExpressionOrList(ctx, arg) {
12
- if (Array.isArray(arg)) {
12
+ if ((0, object_utils_js_1.isReadonlyArray)(arg)) {
13
13
  return arg.map((it) => parseReferenceExpression(ctx, it));
14
14
  }
15
15
  else {
@@ -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() {
@@ -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,7 @@ 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");
25
23
  /**
26
24
  * The main query builder class.
27
25
  *
@@ -46,7 +44,7 @@ class QueryBuilder {
46
44
  assertCanHaveWhereClause(this.#props.queryNode);
47
45
  return new QueryBuilder({
48
46
  ...this.#props,
49
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
47
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
50
48
  });
51
49
  }
52
50
  /**
@@ -104,14 +102,14 @@ class QueryBuilder {
104
102
  assertCanHaveWhereClause(this.#props.queryNode);
105
103
  return new QueryBuilder({
106
104
  ...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)),
105
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
108
106
  });
109
107
  }
110
108
  orWhere(...args) {
111
109
  assertCanHaveWhereClause(this.#props.queryNode);
112
110
  return new QueryBuilder({
113
111
  ...this.#props,
114
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
112
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
115
113
  });
116
114
  }
117
115
  /**
@@ -124,7 +122,7 @@ class QueryBuilder {
124
122
  assertCanHaveWhereClause(this.#props.queryNode);
125
123
  return new QueryBuilder({
126
124
  ...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)),
125
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
128
126
  });
129
127
  }
130
128
  /**
@@ -190,7 +188,7 @@ class QueryBuilder {
190
188
  assertCanHaveWhereClause(this.#props.queryNode);
191
189
  return new QueryBuilder({
192
190
  ...this.#props,
193
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
191
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
194
192
  });
195
193
  }
196
194
  /**
@@ -200,7 +198,7 @@ class QueryBuilder {
200
198
  assertCanHaveWhereClause(this.#props.queryNode);
201
199
  return new QueryBuilder({
202
200
  ...this.#props,
203
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
201
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
204
202
  });
205
203
  }
206
204
  /**
@@ -210,7 +208,7 @@ class QueryBuilder {
210
208
  assertCanHaveWhereClause(this.#props.queryNode);
211
209
  return new QueryBuilder({
212
210
  ...this.#props,
213
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
211
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
214
212
  });
215
213
  }
216
214
  /**
@@ -220,14 +218,14 @@ class QueryBuilder {
220
218
  assertCanHaveWhereClause(this.#props.queryNode);
221
219
  return new QueryBuilder({
222
220
  ...this.#props,
223
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
221
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
224
222
  });
225
223
  }
226
224
  having(...args) {
227
225
  assertCanHaveHavingClause(this.#props.queryNode);
228
226
  return new QueryBuilder({
229
227
  ...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)),
228
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
231
229
  });
232
230
  }
233
231
  /**
@@ -238,14 +236,14 @@ class QueryBuilder {
238
236
  assertCanHaveHavingClause(this.#props.queryNode);
239
237
  return new QueryBuilder({
240
238
  ...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)),
239
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
242
240
  });
243
241
  }
244
242
  orHaving(...args) {
245
243
  assertCanHaveHavingClause(this.#props.queryNode);
246
244
  return new QueryBuilder({
247
245
  ...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)),
246
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
249
247
  });
250
248
  }
251
249
  /**
@@ -256,7 +254,7 @@ class QueryBuilder {
256
254
  assertCanHaveHavingClause(this.#props.queryNode);
257
255
  return new QueryBuilder({
258
256
  ...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)),
257
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
260
258
  });
261
259
  }
262
260
  /**
@@ -267,7 +265,7 @@ class QueryBuilder {
267
265
  assertCanHaveHavingClause(this.#props.queryNode);
268
266
  return new QueryBuilder({
269
267
  ...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)),
268
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
271
269
  });
272
270
  }
273
271
  /**
@@ -278,7 +276,7 @@ class QueryBuilder {
278
276
  assertCanHaveHavingClause(this.#props.queryNode);
279
277
  return new QueryBuilder({
280
278
  ...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)),
279
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
282
280
  });
283
281
  }
284
282
  /**
@@ -289,7 +287,7 @@ class QueryBuilder {
289
287
  assertCanHaveHavingClause(this.#props.queryNode);
290
288
  return new QueryBuilder({
291
289
  ...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)),
290
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
293
291
  });
294
292
  }
295
293
  /**
@@ -300,7 +298,7 @@ class QueryBuilder {
300
298
  assertCanHaveHavingClause(this.#props.queryNode);
301
299
  return new QueryBuilder({
302
300
  ...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)),
301
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
304
302
  });
305
303
  }
306
304
  select(selection) {
@@ -717,14 +715,14 @@ class QueryBuilder {
717
715
  assertCanHaveOrderByClause(this.#props.queryNode);
718
716
  return new QueryBuilder({
719
717
  ...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))),
718
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, (0, order_by_parser_js_1.parseOrderBy)(this.#props.parseContext, orderBy, direction)),
721
719
  });
722
720
  }
723
721
  groupBy(orderBy) {
724
722
  assertCanHaveGroupByClause(this.#props.queryNode);
725
723
  return new QueryBuilder({
726
724
  ...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)),
725
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, (0, group_by_parser_js_1.parseGroupBy)(this.#props.parseContext, orderBy)),
728
726
  });
729
727
  }
730
728
  /**
@@ -964,7 +962,7 @@ function assertCanHaveUpdates(node) {
964
962
  }
965
963
  function assertCanHaveReturningClause(node) {
966
964
  if (!query_node_js_1.QueryNode.isMutating(node)) {
967
- throw new Error('only an insert, delete and update queries can have a returning clause');
965
+ throw new Error('only insert, delete and update queries can have a returning clause');
968
966
  }
969
967
  }
970
968
  function assertCanHaveOrderByClause(node) {
@@ -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
  }
@@ -126,10 +126,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
126
126
  protected visitAddConstraint(node: AddConstraintNode): void;
127
127
  protected visitDropConstraint(node: DropConstraintNode): void;
128
128
  protected append(str: string): void;
129
- protected appendValue(value: PrimitiveValue): void;
129
+ protected appendValue(parameter: unknown): void;
130
130
  protected getLeftIdentifierWrapper(): string;
131
131
  protected getRightIdentifierWrapper(): string;
132
132
  protected getCurrentParameterPlaceholder(): string;
133
- protected addParameter(parameter: any): void;
133
+ protected addParameter(parameter: unknown): void;
134
134
  protected appendImmediateValue(value: PrimitiveValue): void;
135
135
  }
@@ -633,8 +633,8 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
633
633
  append(str) {
634
634
  this.#sql += str;
635
635
  }
636
- appendValue(value) {
637
- this.addParameter(value);
636
+ appendValue(parameter) {
637
+ this.addParameter(parameter);
638
638
  this.append(this.getCurrentParameterPlaceholder());
639
639
  }
640
640
  getLeftIdentifierWrapper() {
@@ -1,16 +1,16 @@
1
1
  /// <reference types="node" />
2
2
  export declare type PrimitiveValue = string | number | boolean | null | Date | Buffer | BigInt;
3
- export declare function isEmpty(obj: ArrayLike<any> | string | object | Buffer): boolean;
4
- export declare function isString(obj: any): obj is string;
5
- export declare function isNumber(obj: any): obj is number;
6
- export declare function isBoolean(obj: any): obj is boolean;
7
- export declare function isNull(obj: any): obj is null;
8
- export declare function isDate(obj: any): obj is Date;
9
- export declare function isBuffer(obj: any): obj is Buffer;
10
- export declare function isBigInt(obj: any): obj is BigInt;
11
- export declare function isPrimitive(obj: any): obj is PrimitiveValue;
12
- export declare function isFunction(obj: any): obj is Function;
13
- export declare function isObject(obj: any): obj is Record<string, any>;
3
+ export declare function isEmpty(obj: ArrayLike<unknown> | string | object | Buffer): boolean;
4
+ export declare function isString(obj: unknown): obj is string;
5
+ export declare function isNumber(obj: unknown): obj is number;
6
+ export declare function isBoolean(obj: unknown): obj is boolean;
7
+ export declare function isNull(obj: unknown): obj is null;
8
+ export declare function isDate(obj: unknown): obj is Date;
9
+ export declare function isBuffer(obj: unknown): obj is Buffer;
10
+ export declare function isBigInt(obj: unknown): obj is BigInt;
11
+ export declare function isPrimitive(obj: unknown): obj is PrimitiveValue;
12
+ export declare function isFunction(obj: unknown): obj is Function;
13
+ export declare function isObject(obj: unknown): obj is Record<string, unknown>;
14
14
  export declare function getLast<T>(arr: ArrayLike<T>): T | undefined;
15
15
  export declare function freeze<T>(obj: T): Readonly<T>;
16
16
  export declare function asArray<T>(arg: T | T[]): T[];
@@ -54,7 +54,7 @@ function isFunction(obj) {
54
54
  }
55
55
  exports.isFunction = isFunction;
56
56
  function isObject(obj) {
57
- return obj && typeof obj === 'object';
57
+ return typeof obj === 'object' && obj !== null;
58
58
  }
59
59
  exports.isObject = isObject;
60
60
  function getLast(arr) {
@@ -1,4 +1,4 @@
1
- import { isFunction, isObject } from '../../util/object-utils.js';
1
+ import { isFunction, isNumber, isObject, } from '../../util/object-utils.js';
2
2
  const PRIVATE_RELEASE_METHOD = Symbol();
3
3
  export class MysqlDriver {
4
4
  #config;
@@ -103,13 +103,13 @@ class MysqlConnection {
103
103
  async executeQuery(compiledQuery) {
104
104
  const result = await this.#executeQuery(compiledQuery);
105
105
  if (isObject(result) && 'insertId' in result && 'affectedRows' in result) {
106
- if (result.insertId) {
106
+ if (isNumber(result.insertId) && result.insertId > 0) {
107
107
  return {
108
108
  insertedPrimaryKey: result.insertId,
109
109
  rows: [],
110
110
  };
111
111
  }
112
- else {
112
+ else if (isNumber(result.affectedRows)) {
113
113
  return {
114
114
  numUpdatedOrDeletedRows: result.affectedRows,
115
115
  rows: [],
@@ -21,5 +21,6 @@ export declare const JoinNode: Readonly<{
21
21
  is(node: OperationNode): node is JoinNode;
22
22
  create(joinType: JoinType, table: JoinTableNode): JoinNode;
23
23
  createWithOn(joinType: JoinType, table: JoinTableNode, on: JoinNodeOnNode): JoinNode;
24
- cloneWithOn(joinNode: JoinNode, op: 'And' | 'Or', on: JoinNodeOnNode): JoinNode;
24
+ cloneWithOn(joinNode: JoinNode, on: JoinNodeOnNode): JoinNode;
25
+ cloneWithOrOn(joinNode: JoinNode, on: JoinNodeOnNode): JoinNode;
25
26
  }>;
@@ -24,14 +24,16 @@ export const JoinNode = freeze({
24
24
  on,
25
25
  });
26
26
  },
27
- cloneWithOn(joinNode, op, on) {
27
+ cloneWithOn(joinNode, on) {
28
28
  return freeze({
29
29
  ...joinNode,
30
- on: joinNode.on
31
- ? op === 'And'
32
- ? AndNode.create(joinNode.on, on)
33
- : OrNode.create(joinNode.on, on)
34
- : on,
30
+ on: joinNode.on ? AndNode.create(joinNode.on, on) : on,
31
+ });
32
+ },
33
+ cloneWithOrOn(joinNode, on) {
34
+ return freeze({
35
+ ...joinNode,
36
+ on: joinNode.on ? OrNode.create(joinNode.on, on) : on,
35
37
  });
36
38
  },
37
39
  });
@@ -16,7 +16,8 @@ export declare const QueryNode: Readonly<{
16
16
  is(node: OperationNode): node is QueryNode;
17
17
  isMutating(node: OperationNode): node is MutatingQueryNode;
18
18
  isFilterable(node: OperationNode): node is FilterableQueryNode;
19
- cloneWithWhere<T extends FilterableQueryNode>(node: T, op: 'And' | 'Or', filter: WhereChildNode): T;
20
- cloneWithJoin<T_1 extends FilterableQueryNode>(node: T_1, join: JoinNode): T_1;
21
- cloneWithReturning<T_2 extends MutatingQueryNode>(node: T_2, selections: ReadonlyArray<SelectionNode>): T_2;
19
+ cloneWithWhere<T extends FilterableQueryNode>(node: T, filter: WhereChildNode): T;
20
+ cloneWithOrWhere<T_1 extends FilterableQueryNode>(node: T_1, filter: WhereChildNode): T_1;
21
+ cloneWithJoin<T_2 extends FilterableQueryNode>(node: T_2, join: JoinNode): T_2;
22
+ cloneWithReturning<T_3 extends MutatingQueryNode>(node: T_3, selections: ReadonlyArray<SelectionNode>): T_3;
22
23
  }>;
@@ -25,11 +25,19 @@ export const QueryNode = freeze({
25
25
  DeleteQueryNode.is(node) ||
26
26
  UpdateQueryNode.is(node));
27
27
  },
28
- cloneWithWhere(node, op, filter) {
28
+ cloneWithWhere(node, filter) {
29
29
  return freeze({
30
30
  ...node,
31
31
  where: node.where
32
- ? WhereNode.cloneWithFilter(node.where, op, filter)
32
+ ? WhereNode.cloneWithFilter(node.where, 'And', filter)
33
+ : WhereNode.create(filter),
34
+ });
35
+ },
36
+ cloneWithOrWhere(node, filter) {
37
+ return freeze({
38
+ ...node,
39
+ where: node.where
40
+ ? WhereNode.cloneWithFilter(node.where, 'Or', filter)
33
41
  : WhereNode.create(filter),
34
42
  });
35
43
  },
@@ -42,6 +42,7 @@ export declare const SelectQueryNode: Readonly<{
42
42
  cloneWithGroupByItems(selectNode: SelectQueryNode, items: ReadonlyArray<GroupByItemNode>): SelectQueryNode;
43
43
  cloneWithLimit(selectNode: SelectQueryNode, limit: LimitNode): SelectQueryNode;
44
44
  cloneWithOffset(selectNode: SelectQueryNode, offset: OffsetNode): SelectQueryNode;
45
- cloneWithHaving(selectNode: SelectQueryNode, op: 'And' | 'Or', filter: HavingNodeChild): SelectQueryNode;
45
+ cloneWithHaving(selectNode: SelectQueryNode, filter: HavingNodeChild): SelectQueryNode;
46
+ cloneWithOrHaving(selectNode: SelectQueryNode, filter: HavingNodeChild): SelectQueryNode;
46
47
  cloneWithDistinct(selectNode: SelectQueryNode): SelectQueryNode;
47
48
  }>;
@@ -69,11 +69,19 @@ export const SelectQueryNode = freeze({
69
69
  offset,
70
70
  });
71
71
  },
72
- cloneWithHaving(selectNode, op, filter) {
72
+ cloneWithHaving(selectNode, filter) {
73
73
  return freeze({
74
74
  ...selectNode,
75
75
  having: selectNode.having
76
- ? HavingNode.cloneWithFilter(selectNode.having, op, filter)
76
+ ? HavingNode.cloneWithFilter(selectNode.having, 'And', filter)
77
+ : HavingNode.create(filter),
78
+ });
79
+ },
80
+ cloneWithOrHaving(selectNode, filter) {
81
+ return freeze({
82
+ ...selectNode,
83
+ having: selectNode.having
84
+ ? HavingNode.cloneWithFilter(selectNode.having, 'Or', filter)
77
85
  : HavingNode.create(filter),
78
86
  });
79
87
  },
@@ -0,0 +1,4 @@
1
+ import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
2
+ import { ParseContext } from './parse-context.js';
3
+ import { ReferenceExpressionOrList } from './reference-parser.js';
4
+ export declare function parseGroupBy(ctx: ParseContext, orderBy: ReferenceExpressionOrList<any, any>): GroupByItemNode[];
@@ -0,0 +1,5 @@
1
+ import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
2
+ import { parseReferenceExpressionOrList, } from './reference-parser.js';
3
+ export function parseGroupBy(ctx, orderBy) {
4
+ return parseReferenceExpressionOrList(ctx, orderBy).map(GroupByItemNode.create);
5
+ }
@@ -1,10 +1,8 @@
1
- import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js';
2
- import { RawNode } from '../operation-node/raw-node.js';
1
+ import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
3
2
  import { AnyRawBuilder } from '../util/type-utils.js';
4
3
  import { ParseContext } from './parse-context.js';
5
4
  import { ReferenceExpression } from './reference-parser.js';
6
5
  export declare type OrderByDirection = 'asc' | 'desc';
7
6
  export declare type OrderByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | keyof O;
8
7
  export declare type OrderByDirectionExpression = OrderByDirection | AnyRawBuilder;
9
- export declare function parseOrderByExpression(ctx: ParseContext, expr: OrderByExpression<any, any, any>): ReferenceExpressionNode;
10
- export declare function parseOrderByDirectionExpression(expr?: OrderByDirectionExpression): RawNode | undefined;
8
+ export declare function parseOrderBy(ctx: ParseContext, orderBy: OrderByExpression<any, any, any>, direction?: OrderByDirectionExpression): OrderByItemNode;
@@ -1,9 +1,13 @@
1
+ import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
1
2
  import { RawNode } from '../operation-node/raw-node.js';
2
3
  import { parseReferenceExpression, } from './reference-parser.js';
3
- export function parseOrderByExpression(ctx, expr) {
4
+ export function parseOrderBy(ctx, orderBy, direction) {
5
+ return OrderByItemNode.create(parseOrderByExpression(ctx, orderBy), parseOrderByDirectionExpression(direction));
6
+ }
7
+ function parseOrderByExpression(ctx, expr) {
4
8
  return parseReferenceExpression(ctx, expr);
5
9
  }
6
- export function parseOrderByDirectionExpression(expr) {
10
+ function parseOrderByDirectionExpression(expr) {
7
11
  if (!expr) {
8
12
  return undefined;
9
13
  }
@@ -9,7 +9,7 @@ import { RawBuilder } from '../raw-builder/raw-builder.js';
9
9
  import { QueryBuilder } from '../query-builder/query-builder.js';
10
10
  import { ParseContext } from './parse-context.js';
11
11
  export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB> | DynamicReferenceBuilder<any>;
12
- export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReferenceExpression<DB, TB>[];
12
+ export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
13
13
  export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
14
14
  export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends QueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => QueryBuilder<any, any, infer O> ? ValueType<O> : PrimitiveValue;
15
15
  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;
@@ -3,10 +3,10 @@ import { ColumnNode } from '../operation-node/column-node.js';
3
3
  import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
4
4
  import { ReferenceNode } from '../operation-node/reference-node.js';
5
5
  import { TableNode } from '../operation-node/table-node.js';
6
- import { isFunction, isString } from '../util/object-utils.js';
6
+ import { isFunction, isReadonlyArray, isString, } from '../util/object-utils.js';
7
7
  import { QueryNode } from '../operation-node/query-node.js';
8
8
  export function parseReferenceExpressionOrList(ctx, arg) {
9
- if (Array.isArray(arg)) {
9
+ if (isReadonlyArray(arg)) {
10
10
  return arg.map((it) => parseReferenceExpression(ctx, it));
11
11
  }
12
12
  else {
@@ -10,13 +10,13 @@ export class JoinBuilder {
10
10
  on(...args) {
11
11
  return new JoinBuilder({
12
12
  ...this.#props,
13
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'And', parseOnFilter(this.#props.parseContext, args)),
13
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseOnFilter(this.#props.parseContext, args)),
14
14
  });
15
15
  }
16
16
  orOn(...args) {
17
17
  return new JoinBuilder({
18
18
  ...this.#props,
19
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'Or', parseOnFilter(this.#props.parseContext, args)),
19
+ joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseOnFilter(this.#props.parseContext, args)),
20
20
  });
21
21
  }
22
22
  /**
@@ -28,7 +28,7 @@ export class JoinBuilder {
28
28
  onRef(lhs, op, rhs) {
29
29
  return new JoinBuilder({
30
30
  ...this.#props,
31
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'And', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
31
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
32
32
  });
33
33
  }
34
34
  /**
@@ -40,7 +40,7 @@ export class JoinBuilder {
40
40
  orOnRef(lhs, op, rhs) {
41
41
  return new JoinBuilder({
42
42
  ...this.#props,
43
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'Or', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
43
+ joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
44
44
  });
45
45
  }
46
46
  /**
@@ -52,7 +52,7 @@ export class JoinBuilder {
52
52
  onExists(arg) {
53
53
  return new JoinBuilder({
54
54
  ...this.#props,
55
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'And', parseExistFilter(this.#props.parseContext, arg)),
55
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseExistFilter(this.#props.parseContext, arg)),
56
56
  });
57
57
  }
58
58
  /**
@@ -64,7 +64,7 @@ export class JoinBuilder {
64
64
  onNotExists(arg) {
65
65
  return new JoinBuilder({
66
66
  ...this.#props,
67
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'And', parseNotExistFilter(this.#props.parseContext, arg)),
67
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseNotExistFilter(this.#props.parseContext, arg)),
68
68
  });
69
69
  }
70
70
  /**
@@ -76,7 +76,7 @@ export class JoinBuilder {
76
76
  orOnExists(arg) {
77
77
  return new JoinBuilder({
78
78
  ...this.#props,
79
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'Or', parseExistFilter(this.#props.parseContext, arg)),
79
+ joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseExistFilter(this.#props.parseContext, arg)),
80
80
  });
81
81
  }
82
82
  /**
@@ -88,7 +88,7 @@ export class JoinBuilder {
88
88
  orOnNotExists(arg) {
89
89
  return new JoinBuilder({
90
90
  ...this.#props,
91
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, 'Or', parseNotExistFilter(this.#props.parseContext, arg)),
91
+ joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseNotExistFilter(this.#props.parseContext, arg)),
92
92
  });
93
93
  }
94
94
  toOperationNode() {
@@ -3,13 +3,10 @@ import { parseJoin, } from '../parser/join-parser.js';
3
3
  import { parseSelectExpressionOrList, parseSelectAll, } from '../parser/select-parser.js';
4
4
  import { parseExistFilter, parseReferenceFilter, parseWhereFilter, parseHavingFilter, parseNotExistFilter, } from '../parser/filter-parser.js';
5
5
  import { parseInsertObjectOrList, } from '../parser/insert-values-parser.js';
6
- import { parseReferenceExpressionOrList, } from '../parser/reference-parser.js';
7
- import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
8
6
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
9
7
  import { InsertQueryNode } from '../operation-node/insert-query-node.js';
10
8
  import { QueryNode, } from '../operation-node/query-node.js';
11
- import { parseOrderByDirectionExpression, parseOrderByExpression, } from '../parser/order-by-parser.js';
12
- import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
9
+ import { parseOrderBy, } from '../parser/order-by-parser.js';
13
10
  import { UpdateQueryNode } from '../operation-node/update-query-node.js';
14
11
  import { parseUpdateObject, } from '../parser/update-set-parser.js';
15
12
  import { preventAwait } from '../util/prevent-await.js';
@@ -19,6 +16,7 @@ import { parseOnConflictDoNothing, parseOnConflictUpdate, } from '../parser/on-c
19
16
  import { freeze } from '../util/object-utils.js';
20
17
  import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
21
18
  import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
19
+ import { parseGroupBy } from '../parser/group-by-parser.js';
22
20
  /**
23
21
  * The main query builder class.
24
22
  *
@@ -43,7 +41,7 @@ export class QueryBuilder {
43
41
  assertCanHaveWhereClause(this.#props.queryNode);
44
42
  return new QueryBuilder({
45
43
  ...this.#props,
46
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseWhereFilter(this.#props.parseContext, args)),
44
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
47
45
  });
48
46
  }
49
47
  /**
@@ -101,14 +99,14 @@ export class QueryBuilder {
101
99
  assertCanHaveWhereClause(this.#props.queryNode);
102
100
  return new QueryBuilder({
103
101
  ...this.#props,
104
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
102
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
105
103
  });
106
104
  }
107
105
  orWhere(...args) {
108
106
  assertCanHaveWhereClause(this.#props.queryNode);
109
107
  return new QueryBuilder({
110
108
  ...this.#props,
111
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseWhereFilter(this.#props.parseContext, args)),
109
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
112
110
  });
113
111
  }
114
112
  /**
@@ -121,7 +119,7 @@ export class QueryBuilder {
121
119
  assertCanHaveWhereClause(this.#props.queryNode);
122
120
  return new QueryBuilder({
123
121
  ...this.#props,
124
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
122
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
125
123
  });
126
124
  }
127
125
  /**
@@ -187,7 +185,7 @@ export class QueryBuilder {
187
185
  assertCanHaveWhereClause(this.#props.queryNode);
188
186
  return new QueryBuilder({
189
187
  ...this.#props,
190
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseExistFilter(this.#props.parseContext, arg)),
188
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
191
189
  });
192
190
  }
193
191
  /**
@@ -197,7 +195,7 @@ export class QueryBuilder {
197
195
  assertCanHaveWhereClause(this.#props.queryNode);
198
196
  return new QueryBuilder({
199
197
  ...this.#props,
200
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseNotExistFilter(this.#props.parseContext, arg)),
198
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
201
199
  });
202
200
  }
203
201
  /**
@@ -207,7 +205,7 @@ export class QueryBuilder {
207
205
  assertCanHaveWhereClause(this.#props.queryNode);
208
206
  return new QueryBuilder({
209
207
  ...this.#props,
210
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseExistFilter(this.#props.parseContext, arg)),
208
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
211
209
  });
212
210
  }
213
211
  /**
@@ -217,14 +215,14 @@ export class QueryBuilder {
217
215
  assertCanHaveWhereClause(this.#props.queryNode);
218
216
  return new QueryBuilder({
219
217
  ...this.#props,
220
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseNotExistFilter(this.#props.parseContext, arg)),
218
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
221
219
  });
222
220
  }
223
221
  having(...args) {
224
222
  assertCanHaveHavingClause(this.#props.queryNode);
225
223
  return new QueryBuilder({
226
224
  ...this.#props,
227
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseHavingFilter(this.#props.parseContext, args)),
225
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseHavingFilter(this.#props.parseContext, args)),
228
226
  });
229
227
  }
230
228
  /**
@@ -235,14 +233,14 @@ export class QueryBuilder {
235
233
  assertCanHaveHavingClause(this.#props.queryNode);
236
234
  return new QueryBuilder({
237
235
  ...this.#props,
238
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
236
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
239
237
  });
240
238
  }
241
239
  orHaving(...args) {
242
240
  assertCanHaveHavingClause(this.#props.queryNode);
243
241
  return new QueryBuilder({
244
242
  ...this.#props,
245
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseHavingFilter(this.#props.parseContext, args)),
243
+ queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseHavingFilter(this.#props.parseContext, args)),
246
244
  });
247
245
  }
248
246
  /**
@@ -253,7 +251,7 @@ export class QueryBuilder {
253
251
  assertCanHaveHavingClause(this.#props.queryNode);
254
252
  return new QueryBuilder({
255
253
  ...this.#props,
256
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
254
+ queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
257
255
  });
258
256
  }
259
257
  /**
@@ -264,7 +262,7 @@ export class QueryBuilder {
264
262
  assertCanHaveHavingClause(this.#props.queryNode);
265
263
  return new QueryBuilder({
266
264
  ...this.#props,
267
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseExistFilter(this.#props.parseContext, arg)),
265
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
268
266
  });
269
267
  }
270
268
  /**
@@ -275,7 +273,7 @@ export class QueryBuilder {
275
273
  assertCanHaveHavingClause(this.#props.queryNode);
276
274
  return new QueryBuilder({
277
275
  ...this.#props,
278
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseNotExistFilter(this.#props.parseContext, arg)),
276
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
279
277
  });
280
278
  }
281
279
  /**
@@ -286,7 +284,7 @@ export class QueryBuilder {
286
284
  assertCanHaveHavingClause(this.#props.queryNode);
287
285
  return new QueryBuilder({
288
286
  ...this.#props,
289
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseExistFilter(this.#props.parseContext, arg)),
287
+ queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
290
288
  });
291
289
  }
292
290
  /**
@@ -297,7 +295,7 @@ export class QueryBuilder {
297
295
  assertCanHaveHavingClause(this.#props.queryNode);
298
296
  return new QueryBuilder({
299
297
  ...this.#props,
300
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseNotExistFilter(this.#props.parseContext, arg)),
298
+ queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
301
299
  });
302
300
  }
303
301
  select(selection) {
@@ -714,14 +712,14 @@ export class QueryBuilder {
714
712
  assertCanHaveOrderByClause(this.#props.queryNode);
715
713
  return new QueryBuilder({
716
714
  ...this.#props,
717
- queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, OrderByItemNode.create(parseOrderByExpression(this.#props.parseContext, orderBy), parseOrderByDirectionExpression(direction))),
715
+ queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, parseOrderBy(this.#props.parseContext, orderBy, direction)),
718
716
  });
719
717
  }
720
718
  groupBy(orderBy) {
721
719
  assertCanHaveGroupByClause(this.#props.queryNode);
722
720
  return new QueryBuilder({
723
721
  ...this.#props,
724
- queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, parseReferenceExpressionOrList(this.#props.parseContext, orderBy).map(GroupByItemNode.create)),
722
+ queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, parseGroupBy(this.#props.parseContext, orderBy)),
725
723
  });
726
724
  }
727
725
  /**
@@ -958,7 +956,7 @@ function assertCanHaveUpdates(node) {
958
956
  }
959
957
  function assertCanHaveReturningClause(node) {
960
958
  if (!QueryNode.isMutating(node)) {
961
- throw new Error('only an insert, delete and update queries can have a returning clause');
959
+ throw new Error('only insert, delete and update queries can have a returning clause');
962
960
  }
963
961
  }
964
962
  function assertCanHaveOrderByClause(node) {
@@ -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
  }
@@ -126,10 +126,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
126
126
  protected visitAddConstraint(node: AddConstraintNode): void;
127
127
  protected visitDropConstraint(node: DropConstraintNode): void;
128
128
  protected append(str: string): void;
129
- protected appendValue(value: PrimitiveValue): void;
129
+ protected appendValue(parameter: unknown): void;
130
130
  protected getLeftIdentifierWrapper(): string;
131
131
  protected getRightIdentifierWrapper(): string;
132
132
  protected getCurrentParameterPlaceholder(): string;
133
- protected addParameter(parameter: any): void;
133
+ protected addParameter(parameter: unknown): void;
134
134
  protected appendImmediateValue(value: PrimitiveValue): void;
135
135
  }
@@ -630,8 +630,8 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
630
630
  append(str) {
631
631
  this.#sql += str;
632
632
  }
633
- appendValue(value) {
634
- this.addParameter(value);
633
+ appendValue(parameter) {
634
+ this.addParameter(parameter);
635
635
  this.append(this.getCurrentParameterPlaceholder());
636
636
  }
637
637
  getLeftIdentifierWrapper() {
@@ -1,16 +1,16 @@
1
1
  /// <reference types="node" />
2
2
  export declare type PrimitiveValue = string | number | boolean | null | Date | Buffer | BigInt;
3
- export declare function isEmpty(obj: ArrayLike<any> | string | object | Buffer): boolean;
4
- export declare function isString(obj: any): obj is string;
5
- export declare function isNumber(obj: any): obj is number;
6
- export declare function isBoolean(obj: any): obj is boolean;
7
- export declare function isNull(obj: any): obj is null;
8
- export declare function isDate(obj: any): obj is Date;
9
- export declare function isBuffer(obj: any): obj is Buffer;
10
- export declare function isBigInt(obj: any): obj is BigInt;
11
- export declare function isPrimitive(obj: any): obj is PrimitiveValue;
12
- export declare function isFunction(obj: any): obj is Function;
13
- export declare function isObject(obj: any): obj is Record<string, any>;
3
+ export declare function isEmpty(obj: ArrayLike<unknown> | string | object | Buffer): boolean;
4
+ export declare function isString(obj: unknown): obj is string;
5
+ export declare function isNumber(obj: unknown): obj is number;
6
+ export declare function isBoolean(obj: unknown): obj is boolean;
7
+ export declare function isNull(obj: unknown): obj is null;
8
+ export declare function isDate(obj: unknown): obj is Date;
9
+ export declare function isBuffer(obj: unknown): obj is Buffer;
10
+ export declare function isBigInt(obj: unknown): obj is BigInt;
11
+ export declare function isPrimitive(obj: unknown): obj is PrimitiveValue;
12
+ export declare function isFunction(obj: unknown): obj is Function;
13
+ export declare function isObject(obj: unknown): obj is Record<string, unknown>;
14
14
  export declare function getLast<T>(arr: ArrayLike<T>): T | undefined;
15
15
  export declare function freeze<T>(obj: T): Readonly<T>;
16
16
  export declare function asArray<T>(arg: T | T[]): T[];
@@ -41,7 +41,7 @@ export function isFunction(obj) {
41
41
  return typeof obj === 'function';
42
42
  }
43
43
  export function isObject(obj) {
44
- return obj && typeof obj === 'object';
44
+ return typeof obj === 'object' && obj !== null;
45
45
  }
46
46
  export function getLast(arr) {
47
47
  return arr[arr.length - 1];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kysely",
3
- "version": "0.9.1",
3
+ "version": "0.9.2",
4
4
  "description": "Type safe SQL query builder",
5
5
  "repository": {
6
6
  "type": "git",