kysely 0.11.1 → 0.12.0
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.
- package/README.md +1 -1
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -2
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -6
- package/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts +3 -0
- package/dist/cjs/dialect/postgres/postgres-query-compiler.js +9 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.js +6 -2
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +7 -7
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -2
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +6 -6
- package/dist/cjs/driver/runtime-driver.js +1 -1
- package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +1 -0
- package/dist/cjs/dynamic/dynamic-reference-builder.js +9 -1
- package/dist/cjs/dynamic/dynamic.d.ts +6 -7
- package/dist/cjs/dynamic/dynamic.js +6 -7
- package/dist/cjs/index.d.ts +51 -33
- package/dist/cjs/index.js +48 -30
- package/dist/cjs/kysely.d.ts +39 -15
- package/dist/cjs/kysely.js +32 -9
- package/dist/cjs/migration/migration.d.ts +2 -2
- package/dist/cjs/operation-node/alias-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-table-node.d.ts +6 -2
- package/dist/cjs/operation-node/create-table-node.js +6 -6
- package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +4 -4
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +11 -1
- package/dist/cjs/operation-node/operation-node-utils.d.ts +1 -1
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/query-node.d.ts +0 -2
- package/dist/cjs/operation-node/query-node.js +0 -10
- package/dist/cjs/operation-node/values-node.d.ts +15 -0
- package/dist/cjs/operation-node/values-node.js +18 -0
- package/dist/cjs/parser/complex-expression-parser.d.ts +9 -0
- package/dist/cjs/parser/complex-expression-parser.js +25 -0
- package/dist/cjs/parser/filter-parser.d.ts +13 -3
- package/dist/cjs/parser/filter-parser.js +56 -62
- package/dist/cjs/parser/insert-values-parser.d.ts +7 -10
- package/dist/cjs/parser/insert-values-parser.js +31 -39
- package/dist/cjs/parser/order-by-parser.d.ts +1 -1
- package/dist/cjs/parser/parse-context.d.ts +8 -8
- package/dist/cjs/parser/parse-context.js +10 -10
- package/dist/cjs/parser/reference-parser.d.ts +8 -7
- package/dist/cjs/parser/reference-parser.js +8 -17
- package/dist/cjs/parser/returning-parser.d.ts +1 -5
- package/dist/cjs/parser/select-parser.d.ts +12 -14
- package/dist/cjs/parser/select-parser.js +5 -9
- package/dist/cjs/parser/table-parser.d.ts +9 -11
- package/dist/cjs/parser/table-parser.js +2 -8
- package/dist/cjs/parser/union-parser.d.ts +2 -2
- package/dist/cjs/parser/union-parser.js +1 -6
- package/dist/cjs/parser/update-set-parser.d.ts +2 -8
- package/dist/cjs/parser/update-set-parser.js +6 -26
- package/dist/cjs/parser/value-parser.d.ts +9 -6
- package/dist/cjs/parser/value-parser.js +7 -30
- package/dist/cjs/parser/with-parser.d.ts +6 -3
- package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
- package/dist/cjs/query-builder/delete-query-builder.d.ts +102 -0
- package/dist/cjs/query-builder/delete-query-builder.js +185 -0
- package/dist/cjs/query-builder/expression-builder.d.ts +8 -6
- package/dist/cjs/query-builder/expression-builder.js +3 -3
- package/dist/cjs/query-builder/function-builder.d.ts +2 -1
- package/dist/cjs/query-builder/function-builder.js +2 -1
- package/dist/cjs/query-builder/having-interface.d.ts +49 -0
- package/dist/cjs/query-builder/having-interface.js +2 -0
- package/dist/cjs/query-builder/insert-query-builder.d.ts +439 -0
- package/dist/cjs/query-builder/insert-query-builder.js +256 -0
- package/dist/cjs/query-builder/insert-result.d.ts +3 -2
- package/dist/cjs/query-builder/insert-result.js +3 -2
- package/dist/cjs/query-builder/join-builder.d.ts +22 -20
- package/dist/cjs/query-builder/join-builder.js +12 -12
- package/dist/cjs/query-builder/join-interface.d.ts +133 -0
- package/dist/cjs/query-builder/join-interface.js +2 -0
- package/dist/cjs/query-builder/no-result-error.d.ts +9 -0
- package/dist/cjs/query-builder/no-result-error.js +14 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +73 -0
- package/dist/cjs/query-builder/returning-interface.js +2 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +711 -0
- package/dist/cjs/query-builder/select-query-builder.js +571 -0
- package/dist/cjs/query-builder/update-query-builder.d.ts +190 -0
- package/dist/cjs/query-builder/update-query-builder.js +279 -0
- package/dist/cjs/query-builder/where-interface.d.ts +381 -0
- package/dist/cjs/query-builder/where-interface.js +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +22 -5
- package/dist/cjs/query-creator.d.ts +42 -40
- package/dist/cjs/query-creator.js +33 -28
- package/dist/cjs/query-executor/query-executor.d.ts +1 -1
- package/dist/cjs/query-executor/query-executor.js +1 -1
- package/dist/cjs/raw-builder/raw-builder.d.ts +2 -0
- package/dist/cjs/raw-builder/raw-builder.js +6 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +2 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +27 -20
- package/dist/cjs/schema/create-index-builder.d.ts +2 -1
- package/dist/cjs/schema/create-index-builder.js +2 -1
- package/dist/cjs/schema/create-table-builder.d.ts +26 -9
- package/dist/cjs/schema/create-table-builder.js +42 -9
- package/dist/cjs/schema/create-view-builder.d.ts +17 -3
- package/dist/cjs/schema/create-view-builder.js +25 -16
- package/dist/cjs/schema/schema.d.ts +18 -11
- package/dist/cjs/schema/schema.js +18 -11
- package/dist/cjs/util/dynamic-import.js +1 -1
- package/dist/cjs/util/log.d.ts +11 -8
- package/dist/cjs/util/log.js +25 -12
- package/dist/cjs/util/type-utils.d.ts +7 -7
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -2
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -6
- package/dist/esm/dialect/postgres/postgres-query-compiler.d.ts +3 -0
- package/dist/esm/dialect/postgres/postgres-query-compiler.js +9 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.js +6 -2
- package/dist/esm/dialect/sqlite/sqlite-driver.js +7 -7
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -2
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +6 -6
- package/dist/esm/driver/runtime-driver.js +1 -1
- package/dist/esm/dynamic/dynamic-reference-builder.d.ts +1 -0
- package/dist/esm/dynamic/dynamic-reference-builder.js +7 -0
- package/dist/esm/dynamic/dynamic.d.ts +6 -7
- package/dist/esm/dynamic/dynamic.js +6 -7
- package/dist/esm/index.d.ts +51 -33
- package/dist/esm/index.js +48 -30
- package/dist/esm/kysely.d.ts +39 -15
- package/dist/esm/kysely.js +32 -9
- package/dist/esm/migration/migration.d.ts +2 -2
- package/dist/esm/operation-node/alias-node.d.ts +1 -1
- package/dist/esm/operation-node/create-table-node.d.ts +6 -2
- package/dist/esm/operation-node/create-table-node.js +6 -6
- package/dist/esm/operation-node/create-view-node.d.ts +1 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +4 -4
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +11 -1
- package/dist/esm/operation-node/operation-node-utils.d.ts +1 -1
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/query-node.d.ts +0 -2
- package/dist/esm/operation-node/query-node.js +0 -10
- package/dist/esm/operation-node/values-node.d.ts +15 -0
- package/dist/esm/operation-node/values-node.js +15 -0
- package/dist/esm/parser/complex-expression-parser.d.ts +9 -0
- package/dist/esm/parser/complex-expression-parser.js +20 -0
- package/dist/esm/parser/filter-parser.d.ts +13 -3
- package/dist/esm/parser/filter-parser.js +55 -62
- package/dist/esm/parser/insert-values-parser.d.ts +7 -10
- package/dist/esm/parser/insert-values-parser.js +31 -38
- package/dist/esm/parser/order-by-parser.d.ts +1 -1
- package/dist/esm/parser/parse-context.d.ts +8 -8
- package/dist/esm/parser/parse-context.js +10 -10
- package/dist/esm/parser/reference-parser.d.ts +8 -7
- package/dist/esm/parser/reference-parser.js +9 -18
- package/dist/esm/parser/returning-parser.d.ts +1 -5
- package/dist/esm/parser/select-parser.d.ts +12 -14
- package/dist/esm/parser/select-parser.js +6 -10
- package/dist/esm/parser/table-parser.d.ts +9 -11
- package/dist/esm/parser/table-parser.js +3 -9
- package/dist/esm/parser/union-parser.d.ts +2 -2
- package/dist/esm/parser/union-parser.js +1 -6
- package/dist/esm/parser/update-set-parser.d.ts +2 -8
- package/dist/esm/parser/update-set-parser.js +5 -24
- package/dist/esm/parser/value-parser.d.ts +9 -6
- package/dist/esm/parser/value-parser.js +8 -31
- package/dist/esm/parser/with-parser.d.ts +6 -3
- package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
- package/dist/esm/query-builder/delete-query-builder.d.ts +102 -0
- package/dist/esm/query-builder/delete-query-builder.js +181 -0
- package/dist/esm/query-builder/expression-builder.d.ts +8 -6
- package/dist/esm/query-builder/expression-builder.js +3 -3
- package/dist/esm/query-builder/function-builder.d.ts +2 -1
- package/dist/esm/query-builder/function-builder.js +2 -1
- package/dist/esm/query-builder/having-interface.d.ts +49 -0
- package/dist/esm/query-builder/having-interface.js +1 -0
- package/dist/esm/query-builder/insert-query-builder.d.ts +439 -0
- package/dist/esm/query-builder/insert-query-builder.js +252 -0
- package/dist/esm/query-builder/insert-result.d.ts +3 -2
- package/dist/esm/query-builder/insert-result.js +3 -2
- package/dist/esm/query-builder/join-builder.d.ts +22 -20
- package/dist/esm/query-builder/join-builder.js +12 -12
- package/dist/esm/query-builder/join-interface.d.ts +133 -0
- package/dist/esm/query-builder/join-interface.js +1 -0
- package/dist/esm/query-builder/no-result-error.d.ts +9 -0
- package/dist/esm/query-builder/no-result-error.js +10 -0
- package/dist/esm/query-builder/returning-interface.d.ts +73 -0
- package/dist/esm/query-builder/returning-interface.js +1 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +711 -0
- package/dist/esm/query-builder/select-query-builder.js +566 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +190 -0
- package/dist/esm/query-builder/update-query-builder.js +275 -0
- package/dist/esm/query-builder/where-interface.d.ts +381 -0
- package/dist/esm/query-builder/where-interface.js +1 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/esm/query-compiler/default-query-compiler.js +22 -5
- package/dist/esm/query-creator.d.ts +42 -40
- package/dist/esm/query-creator.js +33 -28
- package/dist/esm/query-executor/query-executor.d.ts +1 -1
- package/dist/esm/query-executor/query-executor.js +1 -1
- package/dist/esm/raw-builder/raw-builder.d.ts +2 -0
- package/dist/esm/raw-builder/raw-builder.js +6 -0
- package/dist/esm/schema/alter-table-builder.d.ts +2 -2
- package/dist/esm/schema/column-definition-builder.d.ts +27 -20
- package/dist/esm/schema/create-index-builder.d.ts +2 -1
- package/dist/esm/schema/create-index-builder.js +2 -1
- package/dist/esm/schema/create-table-builder.d.ts +26 -9
- package/dist/esm/schema/create-table-builder.js +43 -10
- package/dist/esm/schema/create-view-builder.d.ts +17 -3
- package/dist/esm/schema/create-view-builder.js +25 -16
- package/dist/esm/schema/schema.d.ts +18 -11
- package/dist/esm/schema/schema.js +18 -11
- package/dist/esm/util/dynamic-import.js +1 -1
- package/dist/esm/util/log.d.ts +11 -8
- package/dist/esm/util/log.js +25 -12
- package/dist/esm/util/type-utils.d.ts +7 -7
- package/package.json +3 -3
- package/dist/cjs/query-builder/query-builder.d.ts +0 -1707
- package/dist/cjs/query-builder/query-builder.js +0 -1067
- package/dist/esm/query-builder/query-builder.d.ts +0 -1707
- package/dist/esm/query-builder/query-builder.js +0 -1061
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AliasedQueryBuilder = exports.SelectQueryBuilder = void 0;
|
|
4
|
+
const alias_node_js_1 = require("../operation-node/alias-node.js");
|
|
5
|
+
const join_parser_js_1 = require("../parser/join-parser.js");
|
|
6
|
+
const select_parser_js_1 = require("../parser/select-parser.js");
|
|
7
|
+
const filter_parser_js_1 = require("../parser/filter-parser.js");
|
|
8
|
+
const select_query_node_js_1 = require("../operation-node/select-query-node.js");
|
|
9
|
+
const query_node_js_1 = require("../operation-node/query-node.js");
|
|
10
|
+
const order_by_parser_js_1 = require("../parser/order-by-parser.js");
|
|
11
|
+
const prevent_await_js_1 = require("../util/prevent-await.js");
|
|
12
|
+
const limit_node_js_1 = require("../operation-node/limit-node.js");
|
|
13
|
+
const offset_node_js_1 = require("../operation-node/offset-node.js");
|
|
14
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
15
|
+
const group_by_parser_js_1 = require("../parser/group-by-parser.js");
|
|
16
|
+
const union_parser_js_1 = require("../parser/union-parser.js");
|
|
17
|
+
const no_result_error_js_1 = require("./no-result-error.js");
|
|
18
|
+
class SelectQueryBuilder {
|
|
19
|
+
#props;
|
|
20
|
+
constructor(props) {
|
|
21
|
+
this.#props = (0, object_utils_js_1.freeze)(props);
|
|
22
|
+
}
|
|
23
|
+
where(...args) {
|
|
24
|
+
return new SelectQueryBuilder({
|
|
25
|
+
...this.#props,
|
|
26
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
whereRef(lhs, op, rhs) {
|
|
30
|
+
return new SelectQueryBuilder({
|
|
31
|
+
...this.#props,
|
|
32
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
orWhere(...args) {
|
|
36
|
+
return new SelectQueryBuilder({
|
|
37
|
+
...this.#props,
|
|
38
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
orWhereRef(lhs, op, rhs) {
|
|
42
|
+
return new SelectQueryBuilder({
|
|
43
|
+
...this.#props,
|
|
44
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
whereExists(arg) {
|
|
48
|
+
return new SelectQueryBuilder({
|
|
49
|
+
...this.#props,
|
|
50
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
whereNotExists(arg) {
|
|
54
|
+
return new SelectQueryBuilder({
|
|
55
|
+
...this.#props,
|
|
56
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
orWhereExists(arg) {
|
|
60
|
+
return new SelectQueryBuilder({
|
|
61
|
+
...this.#props,
|
|
62
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
orWhereNotExists(arg) {
|
|
66
|
+
return new SelectQueryBuilder({
|
|
67
|
+
...this.#props,
|
|
68
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
having(...args) {
|
|
72
|
+
return new SelectQueryBuilder({
|
|
73
|
+
...this.#props,
|
|
74
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
havingRef(lhs, op, rhs) {
|
|
78
|
+
return new SelectQueryBuilder({
|
|
79
|
+
...this.#props,
|
|
80
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
orHaving(...args) {
|
|
84
|
+
return new SelectQueryBuilder({
|
|
85
|
+
...this.#props,
|
|
86
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
orHavingRef(lhs, op, rhs) {
|
|
90
|
+
return new SelectQueryBuilder({
|
|
91
|
+
...this.#props,
|
|
92
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
havingExists(arg) {
|
|
96
|
+
return new SelectQueryBuilder({
|
|
97
|
+
...this.#props,
|
|
98
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
havingNotExist(arg) {
|
|
102
|
+
return new SelectQueryBuilder({
|
|
103
|
+
...this.#props,
|
|
104
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
orHavingExists(arg) {
|
|
108
|
+
return new SelectQueryBuilder({
|
|
109
|
+
...this.#props,
|
|
110
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
orHavingNotExists(arg) {
|
|
114
|
+
return new SelectQueryBuilder({
|
|
115
|
+
...this.#props,
|
|
116
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
select(selection) {
|
|
120
|
+
return new SelectQueryBuilder({
|
|
121
|
+
...this.#props,
|
|
122
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSelections(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(this.#props.parseContext, selection)),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
distinctOn(selection) {
|
|
126
|
+
return new SelectQueryBuilder({
|
|
127
|
+
...this.#props,
|
|
128
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithDistinctOnSelections(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(this.#props.parseContext, selection)),
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Makes the selection distinct.
|
|
133
|
+
*
|
|
134
|
+
* ### Examples
|
|
135
|
+
*
|
|
136
|
+
* ```ts
|
|
137
|
+
* await db.selectFrom('person')
|
|
138
|
+
* .select('first_name')
|
|
139
|
+
* .distinct()
|
|
140
|
+
* .execute()
|
|
141
|
+
* ```
|
|
142
|
+
*
|
|
143
|
+
* The generated SQL (PostgreSQL):
|
|
144
|
+
*
|
|
145
|
+
* ```sql
|
|
146
|
+
* select distinct "first_name" from "person"
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
distinct() {
|
|
150
|
+
return new SelectQueryBuilder({
|
|
151
|
+
...this.#props,
|
|
152
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithDistinct(this.#props.queryNode),
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Adds the `for update` option to a select query on supported databases.
|
|
157
|
+
*/
|
|
158
|
+
forUpdate() {
|
|
159
|
+
return new SelectQueryBuilder({
|
|
160
|
+
...this.#props,
|
|
161
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'ForUpdate'),
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Adds the `for share` option to a select query on supported databases.
|
|
166
|
+
*/
|
|
167
|
+
forShare() {
|
|
168
|
+
return new SelectQueryBuilder({
|
|
169
|
+
...this.#props,
|
|
170
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'ForShare'),
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Adds the `for key share` option to a select query on supported databases.
|
|
175
|
+
*/
|
|
176
|
+
forKeyShare() {
|
|
177
|
+
return new SelectQueryBuilder({
|
|
178
|
+
...this.#props,
|
|
179
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'ForKeyShare'),
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Adds the `for no key update` option to a select query on supported databases.
|
|
184
|
+
*/
|
|
185
|
+
forNoKeyUpdate() {
|
|
186
|
+
return new SelectQueryBuilder({
|
|
187
|
+
...this.#props,
|
|
188
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'ForNoKeyUpdate'),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Adds the `skip locked` option to a select query on supported databases.
|
|
193
|
+
*/
|
|
194
|
+
skipLocked() {
|
|
195
|
+
return new SelectQueryBuilder({
|
|
196
|
+
...this.#props,
|
|
197
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'SkipLocked'),
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Adds the `nowait` option to a select query on supported databases.
|
|
202
|
+
*/
|
|
203
|
+
noWait() {
|
|
204
|
+
return new SelectQueryBuilder({
|
|
205
|
+
...this.#props,
|
|
206
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'NoWait'),
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
selectAll(table) {
|
|
210
|
+
return new SelectQueryBuilder({
|
|
211
|
+
...this.#props,
|
|
212
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSelections(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)(table)),
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
innerJoin(...args) {
|
|
216
|
+
return new SelectQueryBuilder({
|
|
217
|
+
...this.#props,
|
|
218
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'InnerJoin', args)),
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
leftJoin(...args) {
|
|
222
|
+
return new SelectQueryBuilder({
|
|
223
|
+
...this.#props,
|
|
224
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'LeftJoin', args)),
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
rightJoin(...args) {
|
|
228
|
+
return new SelectQueryBuilder({
|
|
229
|
+
...this.#props,
|
|
230
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'RightJoin', args)),
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
fullJoin(...args) {
|
|
234
|
+
return new SelectQueryBuilder({
|
|
235
|
+
...this.#props,
|
|
236
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'FullJoin', args)),
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Adds an `order by` clause to the query.
|
|
241
|
+
*
|
|
242
|
+
* `orderBy` calls are additive. To order by multiple columns, call `orderBy`
|
|
243
|
+
* multiple times.
|
|
244
|
+
*
|
|
245
|
+
* The first argument is the expression to order by and the second is the
|
|
246
|
+
* order (`asc` or `desc`).
|
|
247
|
+
*
|
|
248
|
+
* ### Examples
|
|
249
|
+
*
|
|
250
|
+
* ```ts
|
|
251
|
+
* await db
|
|
252
|
+
* .selectFrom('person')
|
|
253
|
+
* .select('person.first_name as fn')
|
|
254
|
+
* .orderBy('id')
|
|
255
|
+
* .orderBy('fn', 'desc')
|
|
256
|
+
* .execute()
|
|
257
|
+
* ```
|
|
258
|
+
*
|
|
259
|
+
* The generated SQL (PostgreSQL):
|
|
260
|
+
*
|
|
261
|
+
* ```sql
|
|
262
|
+
* select "person"."first_name" as "fn"
|
|
263
|
+
* from "person"
|
|
264
|
+
* order by "id" asc, "fn" desc
|
|
265
|
+
* ```
|
|
266
|
+
*
|
|
267
|
+
* The order by expression can also be a `raw` expression or a subquery
|
|
268
|
+
* in addition to column references:
|
|
269
|
+
*
|
|
270
|
+
* ```ts
|
|
271
|
+
* await db
|
|
272
|
+
* .selectFrom('person')
|
|
273
|
+
* .selectAll()
|
|
274
|
+
* .orderBy((qb) => qb.selectFrom('pet')
|
|
275
|
+
* .select('pet.name')
|
|
276
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
277
|
+
* .limit(1)
|
|
278
|
+
* )
|
|
279
|
+
* .orderBy(
|
|
280
|
+
* db.raw('concat(first_name, last_name)')
|
|
281
|
+
* )
|
|
282
|
+
* .execute()
|
|
283
|
+
* ```
|
|
284
|
+
*
|
|
285
|
+
* The generated SQL (PostgreSQL):
|
|
286
|
+
*
|
|
287
|
+
* ```sql
|
|
288
|
+
* select *
|
|
289
|
+
* from "person"
|
|
290
|
+
* order by
|
|
291
|
+
* ( select "pet"."name"
|
|
292
|
+
* from "pet"
|
|
293
|
+
* where "pet"."owner_id" = "person"."id"
|
|
294
|
+
* limit 1
|
|
295
|
+
* ) asc,
|
|
296
|
+
* concat(first_name, last_name) asc
|
|
297
|
+
* ```
|
|
298
|
+
*
|
|
299
|
+
* `dynamic.ref` can be used to refer to columns not known at
|
|
300
|
+
* compile time:
|
|
301
|
+
*
|
|
302
|
+
* ```ts
|
|
303
|
+
* async function someQuery(orderBy: string) {
|
|
304
|
+
* const { ref } = db.dynamic
|
|
305
|
+
*
|
|
306
|
+
* return await db
|
|
307
|
+
* .selectFrom('person')
|
|
308
|
+
* .select('person.first_name as fn')
|
|
309
|
+
* .orderBy(ref(orderBy))
|
|
310
|
+
* .execute()
|
|
311
|
+
* }
|
|
312
|
+
*
|
|
313
|
+
* someQuery('fn')
|
|
314
|
+
* ```
|
|
315
|
+
*
|
|
316
|
+
* The generated SQL (PostgreSQL):
|
|
317
|
+
*
|
|
318
|
+
* ```sql
|
|
319
|
+
* select "person"."first_name" as "fn"
|
|
320
|
+
* from "person"
|
|
321
|
+
* order by "fn" asc
|
|
322
|
+
* ```
|
|
323
|
+
*/
|
|
324
|
+
orderBy(orderBy, direction) {
|
|
325
|
+
return new SelectQueryBuilder({
|
|
326
|
+
...this.#props,
|
|
327
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, (0, order_by_parser_js_1.parseOrderBy)(this.#props.parseContext, orderBy, direction)),
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
groupBy(orderBy) {
|
|
331
|
+
return new SelectQueryBuilder({
|
|
332
|
+
...this.#props,
|
|
333
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, (0, group_by_parser_js_1.parseGroupBy)(this.#props.parseContext, orderBy)),
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Adds a limit clause to the query.
|
|
338
|
+
*
|
|
339
|
+
* ### Examples
|
|
340
|
+
*
|
|
341
|
+
* Select the first 10 rows of the result:
|
|
342
|
+
*
|
|
343
|
+
* ```ts
|
|
344
|
+
* return await db
|
|
345
|
+
* .selectFrom('person')
|
|
346
|
+
* .select('first_name')
|
|
347
|
+
* .limit(10)
|
|
348
|
+
* ```
|
|
349
|
+
*
|
|
350
|
+
* Select rows from index 10 to index 19 of the result:
|
|
351
|
+
*
|
|
352
|
+
* ```ts
|
|
353
|
+
* return await db
|
|
354
|
+
* .selectFrom('person')
|
|
355
|
+
* .select('first_name')
|
|
356
|
+
* .offset(10)
|
|
357
|
+
* .limit(10)
|
|
358
|
+
* ```
|
|
359
|
+
*/
|
|
360
|
+
limit(limit) {
|
|
361
|
+
return new SelectQueryBuilder({
|
|
362
|
+
...this.#props,
|
|
363
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithLimit(this.#props.queryNode, limit_node_js_1.LimitNode.create(limit)),
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Adds an offset clause to the query.
|
|
368
|
+
*
|
|
369
|
+
* ### Examples
|
|
370
|
+
*
|
|
371
|
+
* Select rows from index 10 to index 19 of the result:
|
|
372
|
+
*
|
|
373
|
+
* ```ts
|
|
374
|
+
* return await db
|
|
375
|
+
* .selectFrom('person')
|
|
376
|
+
* .select('first_name')
|
|
377
|
+
* .offset(10)
|
|
378
|
+
* .limit(10)
|
|
379
|
+
* ```
|
|
380
|
+
*/
|
|
381
|
+
offset(offset) {
|
|
382
|
+
return new SelectQueryBuilder({
|
|
383
|
+
...this.#props,
|
|
384
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOffset(this.#props.queryNode, offset_node_js_1.OffsetNode.create(offset)),
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Combines another select query or raw expression to this query using `union`.
|
|
389
|
+
*
|
|
390
|
+
* The output row type of the combined query must match `this` query.
|
|
391
|
+
*
|
|
392
|
+
* ### Examples
|
|
393
|
+
*
|
|
394
|
+
* ```ts
|
|
395
|
+
* db.selectFrom('person')
|
|
396
|
+
* .select(['id', 'first_name as name'])
|
|
397
|
+
* .union(db.selectFrom('pet').select(['id', 'name']))
|
|
398
|
+
* .orderBy('name')
|
|
399
|
+
* ```
|
|
400
|
+
*/
|
|
401
|
+
union(expression) {
|
|
402
|
+
return new SelectQueryBuilder({
|
|
403
|
+
...this.#props,
|
|
404
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithUnion(this.#props.queryNode, (0, union_parser_js_1.parseUnion)(expression, false)),
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Combines another select query or raw expression to this query using `union all`.
|
|
409
|
+
*
|
|
410
|
+
* The output row type of the combined query must match `this` query.
|
|
411
|
+
*
|
|
412
|
+
* ### Examples
|
|
413
|
+
*
|
|
414
|
+
* ```ts
|
|
415
|
+
* db.selectFrom('person')
|
|
416
|
+
* .select(['id', 'first_name as name'])
|
|
417
|
+
* .unionAll(db.selectFrom('pet').select(['id', 'name']))
|
|
418
|
+
* .orderBy('name')
|
|
419
|
+
* ```
|
|
420
|
+
*/
|
|
421
|
+
unionAll(expression) {
|
|
422
|
+
return new SelectQueryBuilder({
|
|
423
|
+
...this.#props,
|
|
424
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithUnion(this.#props.queryNode, (0, union_parser_js_1.parseUnion)(expression, true)),
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Simply calls the given function passing `this` as the only argument.
|
|
429
|
+
*
|
|
430
|
+
* This method can be useful when adding optional method calls:
|
|
431
|
+
*
|
|
432
|
+
* ### Examples
|
|
433
|
+
*
|
|
434
|
+
* ```ts
|
|
435
|
+
* db.selectFrom('person')
|
|
436
|
+
* .selectAll()
|
|
437
|
+
* .call((qb) => {
|
|
438
|
+
* if (something) {
|
|
439
|
+
* return qb.where('something', '=', something)
|
|
440
|
+
* } else {
|
|
441
|
+
* return qb.where('somethingElse', '=', somethingElse)
|
|
442
|
+
* }
|
|
443
|
+
* })
|
|
444
|
+
* .execute()
|
|
445
|
+
* ```
|
|
446
|
+
*
|
|
447
|
+
* The next example uses a helper funtion `log` to log a query:
|
|
448
|
+
*
|
|
449
|
+
* ```ts
|
|
450
|
+
* function log<T extends AnyQueryBuilder>(qb: T): T {
|
|
451
|
+
* console.log(qb.compile())
|
|
452
|
+
* return qb
|
|
453
|
+
* }
|
|
454
|
+
*
|
|
455
|
+
* db.selectFrom('person')
|
|
456
|
+
* .selectAll()
|
|
457
|
+
* .call(log)
|
|
458
|
+
* .execute()
|
|
459
|
+
* ```
|
|
460
|
+
*/
|
|
461
|
+
call(func) {
|
|
462
|
+
return func(this);
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Gives an alias for the query. This method is only useful for sub queries.
|
|
466
|
+
*
|
|
467
|
+
* ### Examples
|
|
468
|
+
*
|
|
469
|
+
* ```ts
|
|
470
|
+
* await db.selectFrom('pet')
|
|
471
|
+
* .selectAll('pet')
|
|
472
|
+
* .select(
|
|
473
|
+
* (qb) => qb.selectFrom('person')
|
|
474
|
+
* .select('first_name')
|
|
475
|
+
* .whereRef('pet.owner_id', '=', 'person.id')
|
|
476
|
+
* .as('owner_first_name')
|
|
477
|
+
* )
|
|
478
|
+
* .execute()
|
|
479
|
+
* ```
|
|
480
|
+
*/
|
|
481
|
+
as(alias) {
|
|
482
|
+
return new AliasedQueryBuilder(this, alias);
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Change the output type of the query.
|
|
486
|
+
*
|
|
487
|
+
* You should only use this method as the last resort if the types
|
|
488
|
+
* don't support your use case.
|
|
489
|
+
*/
|
|
490
|
+
castTo() {
|
|
491
|
+
return new SelectQueryBuilder(this.#props);
|
|
492
|
+
}
|
|
493
|
+
withPlugin(plugin) {
|
|
494
|
+
return new SelectQueryBuilder({
|
|
495
|
+
...this.#props,
|
|
496
|
+
executor: this.#props.executor.withPlugin(plugin),
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
toOperationNode() {
|
|
500
|
+
return this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);
|
|
501
|
+
}
|
|
502
|
+
compile() {
|
|
503
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Executes the query and returns an array of rows.
|
|
507
|
+
*
|
|
508
|
+
* Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
|
|
509
|
+
*/
|
|
510
|
+
async execute() {
|
|
511
|
+
const compildQuery = this.compile();
|
|
512
|
+
const query = compildQuery.query;
|
|
513
|
+
const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
|
|
514
|
+
return result.rows;
|
|
515
|
+
}
|
|
516
|
+
/**
|
|
517
|
+
* Executes the query and returns the first result or undefined if
|
|
518
|
+
* the query returned no result.
|
|
519
|
+
*/
|
|
520
|
+
async executeTakeFirst() {
|
|
521
|
+
const [result] = await this.execute();
|
|
522
|
+
return result;
|
|
523
|
+
}
|
|
524
|
+
/**
|
|
525
|
+
* Executes the query and returns the first result or throws if
|
|
526
|
+
* the query returned no result.
|
|
527
|
+
*
|
|
528
|
+
* By default an instance of {@link NoResultError} is thrown, but you can
|
|
529
|
+
* provide a custom error class as the only argument to throw a different
|
|
530
|
+
* error.
|
|
531
|
+
*/
|
|
532
|
+
async executeTakeFirstOrThrow(errorConstructor = no_result_error_js_1.NoResultError) {
|
|
533
|
+
const result = await this.executeTakeFirst();
|
|
534
|
+
if (result === undefined) {
|
|
535
|
+
throw new errorConstructor(this.toOperationNode());
|
|
536
|
+
}
|
|
537
|
+
return result;
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
exports.SelectQueryBuilder = SelectQueryBuilder;
|
|
541
|
+
(0, prevent_await_js_1.preventAwait)(SelectQueryBuilder, "don't await SelectQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");
|
|
542
|
+
/**
|
|
543
|
+
* {@link SelectQueryBuilder} with an alias. The result of calling {@link SelectQueryBuilder.as}.
|
|
544
|
+
*/
|
|
545
|
+
class AliasedQueryBuilder {
|
|
546
|
+
#queryBuilder;
|
|
547
|
+
#alias;
|
|
548
|
+
constructor(queryBuilder, alias) {
|
|
549
|
+
this.#queryBuilder = queryBuilder;
|
|
550
|
+
this.#alias = alias;
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* @private
|
|
554
|
+
*
|
|
555
|
+
* This needs to be here just so that the typings work. Without this
|
|
556
|
+
* the generated .d.ts file contains no reference to the type param A
|
|
557
|
+
* which causes this type to be equal to AliasedQueryBuilder with any A
|
|
558
|
+
* as long as D, TB and O are the same.
|
|
559
|
+
*/
|
|
560
|
+
get alias() {
|
|
561
|
+
return this.#alias;
|
|
562
|
+
}
|
|
563
|
+
toOperationNode() {
|
|
564
|
+
const node = this.#queryBuilder.toOperationNode();
|
|
565
|
+
if (select_query_node_js_1.SelectQueryNode.is(node)) {
|
|
566
|
+
return alias_node_js_1.AliasNode.create(node, this.#alias);
|
|
567
|
+
}
|
|
568
|
+
throw new Error('only select queries can be aliased');
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
exports.AliasedQueryBuilder = AliasedQueryBuilder;
|