@simplysm/orm-common 13.0.69 → 13.0.70
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 +54 -1447
- package/dist/create-db-context.d.ts +10 -10
- package/dist/create-db-context.js +9 -9
- package/dist/create-db-context.js.map +1 -1
- package/dist/ddl/column-ddl.d.ts +4 -4
- package/dist/ddl/initialize.d.ts +17 -17
- package/dist/ddl/initialize.js +2 -2
- package/dist/ddl/initialize.js.map +1 -1
- package/dist/ddl/relation-ddl.d.ts +6 -6
- package/dist/ddl/schema-ddl.d.ts +4 -4
- package/dist/ddl/table-ddl.d.ts +24 -24
- package/dist/ddl/table-ddl.js +4 -4
- package/dist/ddl/table-ddl.js.map +1 -1
- package/dist/errors/db-transaction-error.d.ts +15 -15
- package/dist/errors/db-transaction-error.d.ts.map +1 -1
- package/dist/exec/executable.d.ts +23 -23
- package/dist/exec/executable.js +3 -3
- package/dist/exec/executable.js.map +1 -1
- package/dist/exec/queryable.d.ts +160 -160
- package/dist/exec/queryable.js +119 -119
- package/dist/exec/queryable.js.map +1 -1
- package/dist/exec/search-parser.d.ts +37 -37
- package/dist/exec/search-parser.d.ts.map +1 -1
- package/dist/expr/expr-unit.d.ts +4 -4
- package/dist/expr/expr.d.ts +257 -257
- package/dist/expr/expr.js +265 -265
- package/dist/expr/expr.js.map +1 -1
- package/dist/query-builder/base/expr-renderer-base.d.ts +9 -9
- package/dist/query-builder/base/expr-renderer-base.js +2 -2
- package/dist/query-builder/base/expr-renderer-base.js.map +1 -1
- package/dist/query-builder/base/query-builder-base.d.ts +26 -26
- package/dist/query-builder/base/query-builder-base.d.ts.map +1 -1
- package/dist/query-builder/base/query-builder-base.js +22 -22
- package/dist/query-builder/base/query-builder-base.js.map +1 -1
- package/dist/query-builder/mssql/mssql-expr-renderer.d.ts +4 -4
- package/dist/query-builder/mssql/mssql-expr-renderer.d.ts.map +1 -1
- package/dist/query-builder/mssql/mssql-expr-renderer.js +18 -18
- package/dist/query-builder/mssql/mssql-expr-renderer.js.map +1 -1
- package/dist/query-builder/mssql/mssql-query-builder.d.ts +2 -2
- package/dist/query-builder/mssql/mssql-query-builder.d.ts.map +1 -1
- package/dist/query-builder/mssql/mssql-query-builder.js +11 -11
- package/dist/query-builder/mssql/mssql-query-builder.js.map +1 -1
- package/dist/query-builder/mysql/mysql-expr-renderer.d.ts +4 -4
- package/dist/query-builder/mysql/mysql-expr-renderer.d.ts.map +1 -1
- package/dist/query-builder/mysql/mysql-expr-renderer.js +17 -17
- package/dist/query-builder/mysql/mysql-expr-renderer.js.map +1 -1
- package/dist/query-builder/mysql/mysql-query-builder.d.ts +8 -8
- package/dist/query-builder/mysql/mysql-query-builder.d.ts.map +1 -1
- package/dist/query-builder/mysql/mysql-query-builder.js +5 -5
- package/dist/query-builder/mysql/mysql-query-builder.js.map +1 -1
- package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts +4 -4
- package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +1 -1
- package/dist/query-builder/postgresql/postgresql-expr-renderer.js +17 -17
- package/dist/query-builder/postgresql/postgresql-expr-renderer.js.map +1 -1
- package/dist/query-builder/postgresql/postgresql-query-builder.d.ts +5 -5
- package/dist/query-builder/postgresql/postgresql-query-builder.d.ts.map +1 -1
- package/dist/query-builder/postgresql/postgresql-query-builder.js +8 -8
- package/dist/query-builder/postgresql/postgresql-query-builder.js.map +1 -1
- package/dist/query-builder/query-builder.d.ts +1 -1
- package/dist/schema/factory/column-builder.d.ts +79 -79
- package/dist/schema/factory/column-builder.js +42 -42
- package/dist/schema/factory/index-builder.d.ts +39 -39
- package/dist/schema/factory/index-builder.js +26 -26
- package/dist/schema/factory/relation-builder.d.ts +99 -99
- package/dist/schema/factory/relation-builder.d.ts.map +1 -1
- package/dist/schema/factory/relation-builder.js +38 -38
- package/dist/schema/procedure-builder.d.ts +49 -49
- package/dist/schema/procedure-builder.d.ts.map +1 -1
- package/dist/schema/procedure-builder.js +33 -33
- package/dist/schema/table-builder.d.ts +59 -59
- package/dist/schema/table-builder.d.ts.map +1 -1
- package/dist/schema/table-builder.js +43 -43
- package/dist/schema/view-builder.d.ts +49 -49
- package/dist/schema/view-builder.d.ts.map +1 -1
- package/dist/schema/view-builder.js +32 -32
- package/dist/types/column.d.ts +22 -22
- package/dist/types/column.js +1 -1
- package/dist/types/column.js.map +1 -1
- package/dist/types/db.d.ts +40 -40
- package/dist/types/expr.d.ts +59 -59
- package/dist/types/expr.d.ts.map +1 -1
- package/dist/types/query-def.d.ts +44 -44
- package/dist/types/query-def.d.ts.map +1 -1
- package/dist/utils/result-parser.d.ts +11 -11
- package/dist/utils/result-parser.js +3 -3
- package/dist/utils/result-parser.js.map +1 -1
- package/package.json +5 -5
- package/src/create-db-context.ts +20 -20
- package/src/ddl/column-ddl.ts +4 -4
- package/src/ddl/initialize.ts +259 -259
- package/src/ddl/relation-ddl.ts +89 -89
- package/src/ddl/schema-ddl.ts +4 -4
- package/src/ddl/table-ddl.ts +189 -189
- package/src/errors/db-transaction-error.ts +13 -13
- package/src/exec/executable.ts +25 -25
- package/src/exec/queryable.ts +2033 -2033
- package/src/exec/search-parser.ts +57 -57
- package/src/expr/expr-unit.ts +4 -4
- package/src/expr/expr.ts +2140 -2140
- package/src/query-builder/base/expr-renderer-base.ts +237 -237
- package/src/query-builder/base/query-builder-base.ts +213 -213
- package/src/query-builder/mssql/mssql-expr-renderer.ts +607 -607
- package/src/query-builder/mssql/mssql-query-builder.ts +650 -650
- package/src/query-builder/mysql/mysql-expr-renderer.ts +613 -613
- package/src/query-builder/mysql/mysql-query-builder.ts +759 -759
- package/src/query-builder/postgresql/postgresql-expr-renderer.ts +611 -611
- package/src/query-builder/postgresql/postgresql-query-builder.ts +686 -686
- package/src/query-builder/query-builder.ts +19 -19
- package/src/schema/factory/column-builder.ts +423 -423
- package/src/schema/factory/index-builder.ts +164 -164
- package/src/schema/factory/relation-builder.ts +453 -453
- package/src/schema/procedure-builder.ts +232 -232
- package/src/schema/table-builder.ts +319 -319
- package/src/schema/view-builder.ts +221 -221
- package/src/types/column.ts +188 -188
- package/src/types/db.ts +208 -208
- package/src/types/expr.ts +697 -697
- package/src/types/query-def.ts +513 -513
- package/src/utils/result-parser.ts +458 -458
- package/tests/db-context/create-db-context.spec.ts +224 -0
- package/tests/db-context/define-db-context.spec.ts +68 -0
- package/tests/ddl/basic.expected.ts +341 -0
- package/tests/ddl/basic.spec.ts +714 -0
- package/tests/ddl/column-builder.expected.ts +310 -0
- package/tests/ddl/column-builder.spec.ts +637 -0
- package/tests/ddl/index-builder.expected.ts +38 -0
- package/tests/ddl/index-builder.spec.ts +202 -0
- package/tests/ddl/procedure-builder.expected.ts +52 -0
- package/tests/ddl/procedure-builder.spec.ts +234 -0
- package/tests/ddl/relation-builder.expected.ts +36 -0
- package/tests/ddl/relation-builder.spec.ts +372 -0
- package/tests/ddl/table-builder.expected.ts +113 -0
- package/tests/ddl/table-builder.spec.ts +433 -0
- package/tests/ddl/view-builder.expected.ts +38 -0
- package/tests/ddl/view-builder.spec.ts +176 -0
- package/tests/dml/delete.expected.ts +96 -0
- package/tests/dml/delete.spec.ts +160 -0
- package/tests/dml/insert.expected.ts +192 -0
- package/tests/dml/insert.spec.ts +288 -0
- package/tests/dml/update.expected.ts +176 -0
- package/tests/dml/update.spec.ts +318 -0
- package/tests/dml/upsert.expected.ts +215 -0
- package/tests/dml/upsert.spec.ts +242 -0
- package/tests/errors/queryable-errors.spec.ts +177 -0
- package/tests/escape.spec.ts +100 -0
- package/tests/examples/pivot.expected.ts +211 -0
- package/tests/examples/pivot.spec.ts +533 -0
- package/tests/examples/sampling.expected.ts +69 -0
- package/tests/examples/sampling.spec.ts +104 -0
- package/tests/examples/unpivot.expected.ts +120 -0
- package/tests/examples/unpivot.spec.ts +226 -0
- package/tests/exec/search-parser.spec.ts +283 -0
- package/tests/executable/basic.expected.ts +18 -0
- package/tests/executable/basic.spec.ts +54 -0
- package/tests/expr/comparison.expected.ts +282 -0
- package/tests/expr/comparison.spec.ts +400 -0
- package/tests/expr/conditional.expected.ts +134 -0
- package/tests/expr/conditional.spec.ts +276 -0
- package/tests/expr/date.expected.ts +332 -0
- package/tests/expr/date.spec.ts +526 -0
- package/tests/expr/math.expected.ts +62 -0
- package/tests/expr/math.spec.ts +106 -0
- package/tests/expr/string.expected.ts +218 -0
- package/tests/expr/string.spec.ts +356 -0
- package/tests/expr/utility.expected.ts +147 -0
- package/tests/expr/utility.spec.ts +182 -0
- package/tests/select/basic.expected.ts +322 -0
- package/tests/select/basic.spec.ts +502 -0
- package/tests/select/filter.expected.ts +357 -0
- package/tests/select/filter.spec.ts +1068 -0
- package/tests/select/group.expected.ts +169 -0
- package/tests/select/group.spec.ts +244 -0
- package/tests/select/join.expected.ts +582 -0
- package/tests/select/join.spec.ts +805 -0
- package/tests/select/order.expected.ts +150 -0
- package/tests/select/order.spec.ts +189 -0
- package/tests/select/recursive-cte.expected.ts +244 -0
- package/tests/select/recursive-cte.spec.ts +514 -0
- package/tests/select/result-meta.spec.ts +270 -0
- package/tests/select/subquery.expected.ts +363 -0
- package/tests/select/subquery.spec.ts +537 -0
- package/tests/select/view.expected.ts +155 -0
- package/tests/select/view.spec.ts +235 -0
- package/tests/select/window.expected.ts +345 -0
- package/tests/select/window.spec.ts +618 -0
- package/tests/setup/MockExecutor.ts +18 -0
- package/tests/setup/TestDbContext.ts +59 -0
- package/tests/setup/models/Company.ts +13 -0
- package/tests/setup/models/Employee.ts +10 -0
- package/tests/setup/models/MonthlySales.ts +11 -0
- package/tests/setup/models/Post.ts +16 -0
- package/tests/setup/models/Sales.ts +10 -0
- package/tests/setup/models/User.ts +19 -0
- package/tests/setup/procedure/GetAllUsers.ts +9 -0
- package/tests/setup/procedure/GetUserById.ts +12 -0
- package/tests/setup/test-utils.ts +72 -0
- package/tests/setup/views/ActiveUsers.ts +8 -0
- package/tests/setup/views/UserSummary.ts +11 -0
- package/tests/types/nullable-queryable-record.spec.ts +145 -0
- package/tests/utils/result-parser-perf.spec.ts +210 -0
- package/tests/utils/result-parser.spec.ts +701 -0
- package/docs/expressions.md +0 -172
- package/docs/queries.md +0 -444
- package/docs/schema.md +0 -245
package/dist/exec/queryable.d.ts
CHANGED
|
@@ -8,110 +8,110 @@ import type { ColumnPrimitive } from "../types/column";
|
|
|
8
8
|
import type { WhereExprUnit, ExprInput } from "../expr/expr-unit";
|
|
9
9
|
import { ExprUnit } from "../expr/expr-unit";
|
|
10
10
|
/**
|
|
11
|
-
* JOIN
|
|
11
|
+
* JOIN query builder
|
|
12
12
|
*
|
|
13
|
-
* join/joinSingle
|
|
13
|
+
* Used internally by join/joinSingle methods to specify the table to join
|
|
14
14
|
*/
|
|
15
15
|
declare class JoinQueryable {
|
|
16
16
|
private readonly _db;
|
|
17
17
|
private readonly _joinAlias;
|
|
18
18
|
constructor(_db: DbContextBase, _joinAlias: string);
|
|
19
19
|
/**
|
|
20
|
-
*
|
|
20
|
+
* Specify the table to join
|
|
21
21
|
*
|
|
22
|
-
* @param table -
|
|
23
|
-
* @returns
|
|
22
|
+
* @param table - Table to join
|
|
23
|
+
* @returns Joined Queryable
|
|
24
24
|
*/
|
|
25
25
|
from<T extends TableBuilder<any, any>>(table: T): Queryable<T["$infer"], T>;
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* Directly specify columns in join result
|
|
28
28
|
*
|
|
29
|
-
* @param columns -
|
|
30
|
-
* @returns
|
|
29
|
+
* @param columns - Custom column definition
|
|
30
|
+
* @returns Queryable with custom columns applied
|
|
31
31
|
*/
|
|
32
32
|
select<R extends DataRecord>(columns: QueryableRecord<R>): Queryable<R, never>;
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
34
|
+
* Combine multiple Queryables with UNION
|
|
35
35
|
*
|
|
36
|
-
* @param queries -
|
|
37
|
-
* @returns UNION
|
|
38
|
-
* @throws 2
|
|
36
|
+
* @param queries - Array of Queryables to UNION (minimum 2)
|
|
37
|
+
* @returns UNION-ed Queryable
|
|
38
|
+
* @throws If less than 2 queryables are passed
|
|
39
39
|
*/
|
|
40
40
|
union<TData extends DataRecord>(...queries: Queryable<TData, any>[]): Queryable<TData, never>;
|
|
41
41
|
}
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
43
|
+
* Recursive CTE (Common Table Expression) builder
|
|
44
44
|
*
|
|
45
|
-
* recursive()
|
|
45
|
+
* used internally in recursive() method, Defines the body of a recursive query
|
|
46
46
|
*
|
|
47
|
-
* @template TBaseData -
|
|
47
|
+
* @template TBaseData - Base query data type
|
|
48
48
|
*/
|
|
49
49
|
declare class RecursiveQueryable<TBaseData extends DataRecord> {
|
|
50
50
|
private readonly _baseQr;
|
|
51
51
|
private readonly _cteName;
|
|
52
52
|
constructor(_baseQr: Queryable<TBaseData, any>, _cteName: string);
|
|
53
53
|
/**
|
|
54
|
-
*
|
|
54
|
+
* specify the target table for recursive query
|
|
55
55
|
*
|
|
56
|
-
* @param table -
|
|
57
|
-
* @returns self
|
|
56
|
+
* @param table - Target table to recurse
|
|
57
|
+
* @returns Queryable with self property added (for self-reference)
|
|
58
58
|
*/
|
|
59
59
|
from<T extends TableBuilder<any, any>>(table: T): Queryable<T["$infer"] & {
|
|
60
60
|
self?: TBaseData[];
|
|
61
61
|
}, T>;
|
|
62
62
|
/**
|
|
63
|
-
*
|
|
63
|
+
* Directly specify columns in recursive query
|
|
64
64
|
*
|
|
65
|
-
* @param columns -
|
|
66
|
-
* @returns self
|
|
65
|
+
* @param columns - Custom column definition
|
|
66
|
+
* @returns Queryable with self property added
|
|
67
67
|
*/
|
|
68
68
|
select<R extends DataRecord>(columns: QueryableRecord<R>): Queryable<R & {
|
|
69
69
|
self?: TBaseData[];
|
|
70
70
|
}, never>;
|
|
71
71
|
/**
|
|
72
|
-
*
|
|
72
|
+
* Combine multiple Queryables with UNION (for recursive query)
|
|
73
73
|
*
|
|
74
|
-
* @param queries -
|
|
75
|
-
* @returns
|
|
76
|
-
* @throws 2
|
|
74
|
+
* @param queries - Array of Queryables to UNION (minimum 2)
|
|
75
|
+
* @returns UNION Queryable with self property added
|
|
76
|
+
* @throws If less than 2 queryables are passed
|
|
77
77
|
*/
|
|
78
78
|
union<TData extends DataRecord>(...queries: Queryable<TData, any>[]): Queryable<TData & {
|
|
79
79
|
self?: TBaseData[];
|
|
80
80
|
}, never>;
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
|
-
*
|
|
83
|
+
* Query builder class
|
|
84
84
|
*
|
|
85
|
-
*
|
|
85
|
+
* Construct SELECT, INSERT, UPDATE, DELETE queries on tables/views in a chaining manner
|
|
86
86
|
*
|
|
87
|
-
* @template TData -
|
|
88
|
-
* @template TFrom -
|
|
87
|
+
* @template TData - Data type of query result
|
|
88
|
+
* @template TFrom - Source table (needed for CUD operations)
|
|
89
89
|
*
|
|
90
90
|
* @example
|
|
91
91
|
* ```typescript
|
|
92
|
-
* //
|
|
92
|
+
* // Basic query
|
|
93
93
|
* const users = await db.user()
|
|
94
94
|
* .where((u) => [expr.eq(u.isActive, true)])
|
|
95
95
|
* .orderBy((u) => u.name)
|
|
96
96
|
* .result();
|
|
97
97
|
*
|
|
98
|
-
* // JOIN
|
|
98
|
+
* // JOIN query
|
|
99
99
|
* const posts = await db.post()
|
|
100
100
|
* .include((p) => p.user)
|
|
101
101
|
* .result();
|
|
102
102
|
*
|
|
103
103
|
* // INSERT
|
|
104
|
-
* await db.user().insert([{ name: "
|
|
104
|
+
* await db.user().insert([{ name: "Gildong Hong", email: "test@test.com" }]);
|
|
105
105
|
* ```
|
|
106
106
|
*/
|
|
107
107
|
export declare class Queryable<TData extends DataRecord, TFrom extends TableBuilder<any, any> | never> {
|
|
108
108
|
readonly meta: QueryableMeta<TData>;
|
|
109
109
|
constructor(meta: QueryableMeta<TData>);
|
|
110
110
|
/**
|
|
111
|
-
*
|
|
111
|
+
* Specify columns to SELECT.
|
|
112
112
|
*
|
|
113
|
-
* @param fn -
|
|
114
|
-
* @returns
|
|
113
|
+
* @param fn - Column mapping function. Receives original columns and returns new column structure
|
|
114
|
+
* @returns Queryable with new column structure applied
|
|
115
115
|
*
|
|
116
116
|
* @example
|
|
117
117
|
* ```typescript
|
|
@@ -123,9 +123,9 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
123
123
|
*/
|
|
124
124
|
select<R extends Record<string, any>>(fn: (columns: QueryableRecord<TData>) => R): Queryable<UnwrapQueryableRecord<R>, never>;
|
|
125
125
|
/**
|
|
126
|
-
* DISTINCT
|
|
126
|
+
* Apply DISTINCT option to remove duplicate rows
|
|
127
127
|
*
|
|
128
|
-
* @returns DISTINCT
|
|
128
|
+
* @returns Queryable with DISTINCT applied
|
|
129
129
|
*
|
|
130
130
|
* @example
|
|
131
131
|
* ```typescript
|
|
@@ -136,11 +136,11 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
136
136
|
*/
|
|
137
137
|
distinct(): Queryable<TData, never>;
|
|
138
138
|
/**
|
|
139
|
-
*
|
|
139
|
+
* Apply row lock (FOR UPDATE)
|
|
140
140
|
*
|
|
141
|
-
*
|
|
141
|
+
* Acquire exclusive lock on selected rows within transaction
|
|
142
142
|
*
|
|
143
|
-
* @returns
|
|
143
|
+
* @returns Queryable with lock applied
|
|
144
144
|
*
|
|
145
145
|
* @example
|
|
146
146
|
* ```typescript
|
|
@@ -154,14 +154,14 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
154
154
|
*/
|
|
155
155
|
lock(): Queryable<TData, TFrom>;
|
|
156
156
|
/**
|
|
157
|
-
*
|
|
157
|
+
* Select only top N rows (can be used without ORDER BY)
|
|
158
158
|
*
|
|
159
|
-
* @param count -
|
|
160
|
-
* @returns TOP
|
|
159
|
+
* @param count - number of rows to select
|
|
160
|
+
* @returns Queryable with TOP applied
|
|
161
161
|
*
|
|
162
162
|
* @example
|
|
163
163
|
* ```typescript
|
|
164
|
-
* //
|
|
164
|
+
* // Latest 10 users
|
|
165
165
|
* db.user()
|
|
166
166
|
* .orderBy((u) => u.createdAt, "DESC")
|
|
167
167
|
* .top(10)
|
|
@@ -169,28 +169,28 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
169
169
|
*/
|
|
170
170
|
top(count: number): Queryable<TData, TFrom>;
|
|
171
171
|
/**
|
|
172
|
-
*
|
|
173
|
-
*
|
|
172
|
+
* Set LIMIT/OFFSET for pagination.
|
|
173
|
+
* Must call orderBy() first.
|
|
174
174
|
*
|
|
175
|
-
* @param skip -
|
|
176
|
-
* @param take -
|
|
177
|
-
* @returns
|
|
178
|
-
* @throws ORDER BY
|
|
175
|
+
* @param skip - number of rows to skip (OFFSET)
|
|
176
|
+
* @param take - number of rows to fetch (LIMIT)
|
|
177
|
+
* @returns Queryable with pagination applied
|
|
178
|
+
* @throws Error if no ORDER BY clause
|
|
179
179
|
*
|
|
180
180
|
* @example
|
|
181
181
|
* ```typescript
|
|
182
182
|
* db.user
|
|
183
183
|
* .orderBy((u) => u.createdAt)
|
|
184
|
-
* .limit(0, 20) //
|
|
184
|
+
* .limit(0, 20) // first 20
|
|
185
185
|
* ```
|
|
186
186
|
*/
|
|
187
187
|
limit(skip: number, take: number): Queryable<TData, TFrom>;
|
|
188
188
|
/**
|
|
189
|
-
*
|
|
189
|
+
* Add sorting condition. Multiple calls apply in order.
|
|
190
190
|
*
|
|
191
|
-
* @param fn -
|
|
192
|
-
* @param orderBy -
|
|
193
|
-
* @returns
|
|
191
|
+
* @param fn - function returning columns to sort by
|
|
192
|
+
* @param orderBy - Sort direction (ASC/DESC). Default: ASC
|
|
193
|
+
* @returns sorting 조건이 추가된 Queryable
|
|
194
194
|
*
|
|
195
195
|
* @example
|
|
196
196
|
* ```typescript
|
|
@@ -201,9 +201,9 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
201
201
|
*/
|
|
202
202
|
orderBy(fn: (columns: QueryableRecord<TData>) => ExprUnit<ColumnPrimitive>, orderBy?: "ASC" | "DESC"): Queryable<TData, TFrom>;
|
|
203
203
|
/**
|
|
204
|
-
* WHERE
|
|
204
|
+
* WHERE condition을 추가합니다. 여러 번 호출하면 AND로 결합됩니다.
|
|
205
205
|
*
|
|
206
|
-
* @param predicate -
|
|
206
|
+
* @param predicate - Condition 배열을 반환하는 function
|
|
207
207
|
* @returns 조건이 추가된 Queryable
|
|
208
208
|
*
|
|
209
209
|
* @example
|
|
@@ -218,26 +218,26 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
218
218
|
* 텍스트 검색을 수행
|
|
219
219
|
*
|
|
220
220
|
* 검색 문법은 {@link parseSearchQuery}를 참조
|
|
221
|
-
* - 공백으로 구분된 단어는 OR
|
|
222
|
-
* - `+`로 시작하는 단어는
|
|
223
|
-
* - `-`로 시작하는 단어는
|
|
221
|
+
* - 공백으로 구분된 단어는 OR condition
|
|
222
|
+
* - `+`로 시작하는 단어는 required include (AND Condition)
|
|
223
|
+
* - `-`로 시작하는 단어는 exclude (NOT Condition)
|
|
224
224
|
*
|
|
225
|
-
* @param fn - 검색 대상
|
|
225
|
+
* @param fn - 검색 대상 column을 반환하는 function
|
|
226
226
|
* @param searchText - 검색 텍스트
|
|
227
227
|
* @returns 검색 조건이 추가된 Queryable
|
|
228
228
|
*
|
|
229
229
|
* @example
|
|
230
230
|
* ```typescript
|
|
231
231
|
* db.user()
|
|
232
|
-
* .search((u) => [u.name, u.email], "
|
|
232
|
+
* .search((u) => [u.name, u.email], "Gildong Hong -탈퇴")
|
|
233
233
|
* ```
|
|
234
234
|
*/
|
|
235
235
|
search(fn: (columns: QueryableRecord<TData>) => ExprUnit<string | undefined>[], searchText: string): Queryable<TData, TFrom>;
|
|
236
236
|
/**
|
|
237
|
-
* GROUP BY 절을
|
|
237
|
+
* GROUP BY 절을 Add
|
|
238
238
|
*
|
|
239
|
-
* @param fn -
|
|
240
|
-
* @returns GROUP BY
|
|
239
|
+
* @param fn - Group화 기준 column을 반환하는 function
|
|
240
|
+
* @returns Queryable with GROUP BY applied
|
|
241
241
|
*
|
|
242
242
|
* @example
|
|
243
243
|
* ```typescript
|
|
@@ -251,10 +251,10 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
251
251
|
*/
|
|
252
252
|
groupBy(fn: (columns: QueryableRecord<TData>) => ExprUnit<ColumnPrimitive>[]): Queryable<TData, never>;
|
|
253
253
|
/**
|
|
254
|
-
* HAVING 절을
|
|
254
|
+
* HAVING 절을 Add (GROUP BY 후 filtering)
|
|
255
255
|
*
|
|
256
|
-
* @param predicate -
|
|
257
|
-
* @returns HAVING이
|
|
256
|
+
* @param predicate - Condition 배열을 반환하는 function
|
|
257
|
+
* @returns HAVING이 apply된 Queryable
|
|
258
258
|
*
|
|
259
259
|
* @example
|
|
260
260
|
* ```typescript
|
|
@@ -269,11 +269,11 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
269
269
|
*/
|
|
270
270
|
having(predicate: (columns: QueryableRecord<TData>) => WhereExprUnit[]): Queryable<TData, never>;
|
|
271
271
|
/**
|
|
272
|
-
* 1:N 관계의 LEFT OUTER JOIN을 수행 (배열로
|
|
272
|
+
* 1:N 관계의 LEFT OUTER JOIN을 수행 (배열로 result Add)
|
|
273
273
|
*
|
|
274
|
-
* @param as -
|
|
275
|
-
* @param fwd -
|
|
276
|
-
* @returns
|
|
274
|
+
* @param as - Result에 추가할 property 이름
|
|
275
|
+
* @param fwd - Join 조건을 정의하는 콜백 function
|
|
276
|
+
* @returns join 결과가 배열로 추가된 Queryable
|
|
277
277
|
*
|
|
278
278
|
* @example
|
|
279
279
|
* ```typescript
|
|
@@ -282,18 +282,18 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
282
282
|
* qr.from(Post)
|
|
283
283
|
* .where((p) => [expr.eq(p.userId, u.id)])
|
|
284
284
|
* )
|
|
285
|
-
* //
|
|
285
|
+
* // Result: { id, name, posts: [{ id, title }, ...] }
|
|
286
286
|
* ```
|
|
287
287
|
*/
|
|
288
288
|
join<A extends string, R extends DataRecord>(as: A, fwd: (qr: JoinQueryable, cols: QueryableRecord<TData>) => Queryable<R, any>): Queryable<TData & {
|
|
289
289
|
[K in A]?: R[];
|
|
290
290
|
}, TFrom>;
|
|
291
291
|
/**
|
|
292
|
-
* N:1 또는 1:1 관계의 LEFT OUTER JOIN을 수행 (단일 객체로
|
|
292
|
+
* N:1 또는 1:1 관계의 LEFT OUTER JOIN을 수행 (단일 객체로 result Add)
|
|
293
293
|
*
|
|
294
|
-
* @param as -
|
|
295
|
-
* @param fwd -
|
|
296
|
-
* @returns
|
|
294
|
+
* @param as - Result에 추가할 property 이름
|
|
295
|
+
* @param fwd - Join 조건을 정의하는 콜백 function
|
|
296
|
+
* @returns join 결과가 단일 객체로 추가된 Queryable
|
|
297
297
|
*
|
|
298
298
|
* @example
|
|
299
299
|
* ```typescript
|
|
@@ -302,7 +302,7 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
302
302
|
* qr.from(User)
|
|
303
303
|
* .where((u) => [expr.eq(u.id, p.userId)])
|
|
304
304
|
* )
|
|
305
|
-
* //
|
|
305
|
+
* // Result: { id, title, user: { id, name } | undefined }
|
|
306
306
|
* ```
|
|
307
307
|
*/
|
|
308
308
|
joinSingle<A extends string, R extends DataRecord>(as: A, fwd: (qr: JoinQueryable, cols: QueryableRecord<TData>) => Queryable<R, any>): Queryable<{
|
|
@@ -311,22 +311,22 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
311
311
|
[K in A]?: R;
|
|
312
312
|
}, TFrom>;
|
|
313
313
|
/**
|
|
314
|
-
* 관계된
|
|
314
|
+
* 관계된 Table을 automatic으로 JOIN합니다.
|
|
315
315
|
* TableBuilder에 정의된 FK/FKT 관계를 기반으로 동작합니다.
|
|
316
316
|
*
|
|
317
|
-
* @param fn - 포함할 관계를 선택하는
|
|
317
|
+
* @param fn - 포함할 관계를 선택하는 function (PathProxy를 통해 type 체크됨)
|
|
318
318
|
* @returns JOIN이 추가된 Queryable
|
|
319
319
|
* @throws 관계가 정의되지 않은 경우 에러
|
|
320
320
|
*
|
|
321
321
|
* @example
|
|
322
322
|
* ```typescript
|
|
323
|
-
* // 단일
|
|
323
|
+
* // 단일 relationship include
|
|
324
324
|
* db.post.include((p) => p.user)
|
|
325
325
|
*
|
|
326
|
-
* // 중첩
|
|
326
|
+
* // 중첩 relationship include
|
|
327
327
|
* db.post.include((p) => p.user.company)
|
|
328
328
|
*
|
|
329
|
-
* // 다중
|
|
329
|
+
* // 다중 relationship include
|
|
330
330
|
* db.user
|
|
331
331
|
* .include((u) => u.company)
|
|
332
332
|
* .include((u) => u.posts)
|
|
@@ -335,11 +335,11 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
335
335
|
include(fn: (item: PathProxy<TData>) => PathProxy<any>): Queryable<TData, TFrom>;
|
|
336
336
|
private _include;
|
|
337
337
|
/**
|
|
338
|
-
* 현재 Queryable을
|
|
338
|
+
* 현재 Queryable을 Subquery로 감싸기
|
|
339
339
|
*
|
|
340
340
|
* distinct() 또는 groupBy() 후 count() 사용 시 필요
|
|
341
341
|
*
|
|
342
|
-
* @returns
|
|
342
|
+
* @returns Subquery로 감싸진 Queryable
|
|
343
343
|
*
|
|
344
344
|
* @example
|
|
345
345
|
* ```typescript
|
|
@@ -353,11 +353,11 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
353
353
|
*/
|
|
354
354
|
wrap(): Queryable<TData, never>;
|
|
355
355
|
/**
|
|
356
|
-
*
|
|
356
|
+
* Combine multiple Queryables with UNION (remove duplicates)
|
|
357
357
|
*
|
|
358
|
-
* @param queries -
|
|
359
|
-
* @returns UNION
|
|
360
|
-
* @throws 2
|
|
358
|
+
* @param queries - Array of Queryables to UNION (minimum 2)
|
|
359
|
+
* @returns UNION-ed Queryable
|
|
360
|
+
* @throws If less than 2 queryables are passed
|
|
361
361
|
*
|
|
362
362
|
* @example
|
|
363
363
|
* ```typescript
|
|
@@ -369,12 +369,12 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
369
369
|
*/
|
|
370
370
|
static union<TData extends DataRecord>(...queries: Queryable<TData, any>[]): Queryable<TData, never>;
|
|
371
371
|
/**
|
|
372
|
-
*
|
|
372
|
+
* recursive CTE(Common Table Expression)를 Generate
|
|
373
373
|
*
|
|
374
|
-
* 계층
|
|
374
|
+
* 계층 structure data(조직도, 카테고리 트리 등)를 조회할 때 사용
|
|
375
375
|
*
|
|
376
|
-
* @param fwd -
|
|
377
|
-
* @returns
|
|
376
|
+
* @param fwd - recursive part을 정의하는 콜백 function
|
|
377
|
+
* @returns recursive CTE가 apply된 Queryable
|
|
378
378
|
*
|
|
379
379
|
* @example
|
|
380
380
|
* ```typescript
|
|
@@ -389,9 +389,9 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
389
389
|
*/
|
|
390
390
|
recursive(fwd: (qr: RecursiveQueryable<TData>) => Queryable<TData, any>): Queryable<TData, never>;
|
|
391
391
|
/**
|
|
392
|
-
* SELECT
|
|
392
|
+
* SELECT query를 실행하고 result 배열을 return
|
|
393
393
|
*
|
|
394
|
-
* @returns
|
|
394
|
+
* @returns Query result array
|
|
395
395
|
*
|
|
396
396
|
* @example
|
|
397
397
|
* ```typescript
|
|
@@ -402,9 +402,9 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
402
402
|
*/
|
|
403
403
|
result(): Promise<TData[]>;
|
|
404
404
|
/**
|
|
405
|
-
* 단일 결과를
|
|
405
|
+
* 단일 결과를 return (2개 이상이면 Error)
|
|
406
406
|
*
|
|
407
|
-
* @returns 단일
|
|
407
|
+
* @returns 단일 result 또는 undefined
|
|
408
408
|
* @throws 2개 이상의 결과가 반환된 경우
|
|
409
409
|
*
|
|
410
410
|
* @example
|
|
@@ -416,13 +416,13 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
416
416
|
*/
|
|
417
417
|
single(): Promise<TData | undefined>;
|
|
418
418
|
/**
|
|
419
|
-
*
|
|
419
|
+
* query 소스 이름 return (error message용)
|
|
420
420
|
*/
|
|
421
421
|
private _getSourceName;
|
|
422
422
|
/**
|
|
423
|
-
* 첫 번째 결과를
|
|
423
|
+
* 첫 번째 결과를 return (여러 개여도 첫 번째만)
|
|
424
424
|
*
|
|
425
|
-
* @returns 첫 번째
|
|
425
|
+
* @returns 첫 번째 result 또는 undefined
|
|
426
426
|
*
|
|
427
427
|
* @example
|
|
428
428
|
* ```typescript
|
|
@@ -433,10 +433,10 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
433
433
|
*/
|
|
434
434
|
first(): Promise<TData | undefined>;
|
|
435
435
|
/**
|
|
436
|
-
*
|
|
436
|
+
* result row 수를 return
|
|
437
437
|
*
|
|
438
|
-
* @param fwd - 카운트할
|
|
439
|
-
* @returns
|
|
438
|
+
* @param fwd - 카운트할 column을 지정하는 function (Select)
|
|
439
|
+
* @returns row 수
|
|
440
440
|
* @throws distinct() 또는 groupBy() 후 직접 호출 시 에러 (wrap() 필요)
|
|
441
441
|
*
|
|
442
442
|
* @example
|
|
@@ -448,7 +448,7 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
448
448
|
*/
|
|
449
449
|
count(fwd?: (cols: QueryableRecord<TData>) => ExprUnit<ColumnPrimitive>): Promise<number>;
|
|
450
450
|
/**
|
|
451
|
-
* 조건에 맞는
|
|
451
|
+
* 조건에 맞는 data 존재 여부를 확인
|
|
452
452
|
*
|
|
453
453
|
* @returns 존재하면 true, 없으면 false
|
|
454
454
|
*
|
|
@@ -466,24 +466,24 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
466
466
|
private _buildJoinDefs;
|
|
467
467
|
getResultMeta(outputColumns?: string[]): ResultMeta;
|
|
468
468
|
/**
|
|
469
|
-
* INSERT
|
|
469
|
+
* INSERT query를 실행
|
|
470
470
|
*
|
|
471
|
-
* MSSQL의 1000개 제한을 위해
|
|
471
|
+
* MSSQL의 1000개 제한을 위해 automatic으로 1000개씩 청크로 분할하여 실행
|
|
472
472
|
*
|
|
473
|
-
* @param records -
|
|
474
|
-
* @param outputColumns -
|
|
475
|
-
* @returns outputColumns 지정 시 삽입된 레코드
|
|
473
|
+
* @param records - Insert할 레코드 array
|
|
474
|
+
* @param outputColumns - column name array to receive (Select)
|
|
475
|
+
* @returns outputColumns 지정 시 삽입된 레코드 array return
|
|
476
476
|
*
|
|
477
477
|
* @example
|
|
478
478
|
* ```typescript
|
|
479
479
|
* // 단순 삽입
|
|
480
480
|
* await db.user().insert([
|
|
481
|
-
* { name: "
|
|
481
|
+
* { name: "Gildong Hong", email: "hong@test.com" },
|
|
482
482
|
* ]);
|
|
483
483
|
*
|
|
484
|
-
* // 삽입 후 ID
|
|
484
|
+
* // 삽입 후 ID return
|
|
485
485
|
* const [inserted] = await db.user().insert(
|
|
486
|
-
* [{ name: "
|
|
486
|
+
* [{ name: "Gildong Hong" }],
|
|
487
487
|
* ["id"],
|
|
488
488
|
* );
|
|
489
489
|
* ```
|
|
@@ -491,27 +491,27 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
491
491
|
insert(records: TFrom["$inferInsert"][]): Promise<void>;
|
|
492
492
|
insert<K extends keyof TFrom["$inferColumns"] & string>(records: TFrom["$inferInsert"][], outputColumns: K[]): Promise<Pick<TFrom["$inferColumns"], K>[]>;
|
|
493
493
|
/**
|
|
494
|
-
* WHERE
|
|
494
|
+
* WHERE condition에 맞는 data가 없으면 INSERT
|
|
495
495
|
*
|
|
496
|
-
* @param record -
|
|
497
|
-
* @param outputColumns -
|
|
498
|
-
* @returns outputColumns 지정 시 삽입된 레코드
|
|
496
|
+
* @param record - Insert할 레코드
|
|
497
|
+
* @param outputColumns - column name array to receive (Select)
|
|
498
|
+
* @returns outputColumns 지정 시 삽입된 레코드 return
|
|
499
499
|
*
|
|
500
500
|
* @example
|
|
501
501
|
* ```typescript
|
|
502
502
|
* await db.user()
|
|
503
503
|
* .where((u) => [expr.eq(u.email, "test@test.com")])
|
|
504
|
-
* .insertIfNotExists({ name: "
|
|
504
|
+
* .insertIfNotExists({ name: "testing", email: "test@test.com" });
|
|
505
505
|
* ```
|
|
506
506
|
*/
|
|
507
507
|
insertIfNotExists(record: TFrom["$inferInsert"]): Promise<void>;
|
|
508
508
|
insertIfNotExists<K extends keyof TFrom["$inferColumns"] & string>(record: TFrom["$inferInsert"], outputColumns: K[]): Promise<Pick<TFrom["$inferColumns"], K>>;
|
|
509
509
|
/**
|
|
510
|
-
* INSERT INTO ... SELECT (현재 SELECT 결과를 다른
|
|
510
|
+
* INSERT INTO ... SELECT (현재 SELECT 결과를 다른 Table에 INSERT)
|
|
511
511
|
*
|
|
512
|
-
* @param targetTable -
|
|
513
|
-
* @param outputColumns -
|
|
514
|
-
* @returns outputColumns 지정 시 삽입된 레코드
|
|
512
|
+
* @param targetTable - Insert 대상 Table
|
|
513
|
+
* @param outputColumns - column name array to receive (Select)
|
|
514
|
+
* @returns outputColumns 지정 시 삽입된 레코드 array return
|
|
515
515
|
*
|
|
516
516
|
* @example
|
|
517
517
|
* ```typescript
|
|
@@ -527,11 +527,11 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
527
527
|
getInsertIfNotExistsQueryDef(record: TFrom["$inferInsert"], outputColumns?: (keyof TFrom["$inferColumns"] & string)[]): InsertIfNotExistsQueryDef;
|
|
528
528
|
getInsertIntoQueryDef<TTable extends TableBuilder<DataToColumnBuilderRecord<TData>, any>>(targetTable: TTable, outputColumns?: (keyof TTable["$inferColumns"] & string)[]): InsertIntoQueryDef;
|
|
529
529
|
/**
|
|
530
|
-
* UPDATE
|
|
530
|
+
* UPDATE query를 실행
|
|
531
531
|
*
|
|
532
|
-
* @param recordFwd -
|
|
533
|
-
* @param outputColumns -
|
|
534
|
-
* @returns outputColumns 지정 시 업데이트된 레코드
|
|
532
|
+
* @param recordFwd - Update할 column과 값을 반환하는 function
|
|
533
|
+
* @param outputColumns - column name array to receive (Select)
|
|
534
|
+
* @returns outputColumns 지정 시 업데이트된 레코드 array return
|
|
535
535
|
*
|
|
536
536
|
* @example
|
|
537
537
|
* ```typescript
|
|
@@ -539,11 +539,11 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
539
539
|
* await db.user()
|
|
540
540
|
* .where((u) => [expr.eq(u.id, 1)])
|
|
541
541
|
* .update((u) => ({
|
|
542
|
-
* name: expr.val("string", "
|
|
542
|
+
* name: expr.val("string", "New Name"),
|
|
543
543
|
* updatedAt: expr.val("DateTime", DateTime.now()),
|
|
544
544
|
* }));
|
|
545
545
|
*
|
|
546
|
-
* // 기존
|
|
546
|
+
* // 기존 value 참조
|
|
547
547
|
* await db.product()
|
|
548
548
|
* .update((p) => ({
|
|
549
549
|
* price: expr.mul(p.price, expr.val("number", 1.1)),
|
|
@@ -553,19 +553,19 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
553
553
|
update(recordFwd: (cols: QueryableRecord<TData>) => QueryableWriteRecord<TFrom["$inferUpdate"]>): Promise<void>;
|
|
554
554
|
update<K extends keyof TFrom["$columns"] & string>(recordFwd: (cols: QueryableRecord<TData>) => QueryableWriteRecord<TFrom["$inferUpdate"]>, outputColumns: K[]): Promise<Pick<TFrom["$columns"], K>[]>;
|
|
555
555
|
/**
|
|
556
|
-
* DELETE
|
|
556
|
+
* DELETE query를 실행
|
|
557
557
|
*
|
|
558
|
-
* @param outputColumns -
|
|
559
|
-
* @returns outputColumns 지정 시 삭제된 레코드
|
|
558
|
+
* @param outputColumns - column name array to receive (Select)
|
|
559
|
+
* @returns outputColumns 지정 시 삭제된 레코드 array return
|
|
560
560
|
*
|
|
561
561
|
* @example
|
|
562
562
|
* ```typescript
|
|
563
|
-
* // 단순
|
|
563
|
+
* // 단순 Delete
|
|
564
564
|
* await db.user()
|
|
565
565
|
* .where((u) => [expr.eq(u.id, 1)])
|
|
566
566
|
* .delete();
|
|
567
567
|
*
|
|
568
|
-
* // 삭제된
|
|
568
|
+
* // 삭제된 data return
|
|
569
569
|
* const deleted = await db.user()
|
|
570
570
|
* .where((u) => [expr.eq(u.isExpired, true)])
|
|
571
571
|
* .delete(["id", "name"]);
|
|
@@ -576,26 +576,26 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
576
576
|
getUpdateQueryDef(recordFwd: (cols: QueryableRecord<TData>) => QueryableWriteRecord<TFrom["$inferUpdate"]>, outputColumns?: (keyof TFrom["$inferColumns"] & string)[]): UpdateQueryDef;
|
|
577
577
|
getDeleteQueryDef(outputColumns?: (keyof TFrom["$inferColumns"] & string)[]): DeleteQueryDef;
|
|
578
578
|
/**
|
|
579
|
-
* UPSERT (UPDATE or INSERT)
|
|
579
|
+
* UPSERT (UPDATE or INSERT) query를 실행
|
|
580
580
|
*
|
|
581
|
-
* WHERE
|
|
581
|
+
* WHERE condition에 맞는 data가 있으면 UPDATE, 없으면 INSERT
|
|
582
582
|
*
|
|
583
|
-
* @param updateFwd -
|
|
584
|
-
* @param insertFwd -
|
|
585
|
-
* @param outputColumns -
|
|
586
|
-
* @returns outputColumns 지정 시 영향받은 레코드
|
|
583
|
+
* @param updateFwd - Update할 column과 값을 반환하는 function
|
|
584
|
+
* @param insertFwd - Insert할 레코드를 반환하는 function (selection, 미지정 시 updateFwd와 동일)
|
|
585
|
+
* @param outputColumns - column name array to receive (Select)
|
|
586
|
+
* @returns outputColumns 지정 시 영향받은 레코드 array return
|
|
587
587
|
*
|
|
588
588
|
* @example
|
|
589
589
|
* ```typescript
|
|
590
|
-
* // UPDATE/INSERT 동일
|
|
590
|
+
* // UPDATE/INSERT 동일 data
|
|
591
591
|
* await db.user()
|
|
592
592
|
* .where((u) => [expr.eq(u.email, "test@test.com")])
|
|
593
593
|
* .upsert(() => ({
|
|
594
|
-
* name: expr.val("string", "
|
|
594
|
+
* name: expr.val("string", "testing"),
|
|
595
595
|
* email: expr.val("string", "test@test.com"),
|
|
596
596
|
* }));
|
|
597
597
|
*
|
|
598
|
-
* // UPDATE/INSERT 다른
|
|
598
|
+
* // UPDATE/INSERT 다른 data
|
|
599
599
|
* await db.user()
|
|
600
600
|
* .where((u) => [expr.eq(u.email, "test@test.com")])
|
|
601
601
|
* .upsert(
|
|
@@ -610,18 +610,18 @@ export declare class Queryable<TData extends DataRecord, TFrom extends TableBuil
|
|
|
610
610
|
upsert<U extends QueryableWriteRecord<TFrom["$inferUpdate"]>, K extends keyof TFrom["$inferColumns"] & string>(updateFwd: (cols: QueryableRecord<TData>) => U, insertFwd: (updateRecord: U) => QueryableWriteRecord<TFrom["$inferInsert"]>, outputColumns?: K[]): Promise<Pick<TFrom["$inferColumns"], K>[]>;
|
|
611
611
|
getUpsertQueryDef<U extends QueryableWriteRecord<TFrom["$inferUpdate"]>>(updateRecordFwd: (cols: QueryableRecord<TData>) => U, insertRecordFwd: (updateRecord: U) => QueryableWriteRecord<TFrom["$inferInsert"]>, outputColumns?: (keyof TFrom["$inferColumns"] & string)[]): UpsertQueryDef;
|
|
612
612
|
/**
|
|
613
|
-
* FK
|
|
613
|
+
* FK constraint on/off (transaction 내 사용 가능)
|
|
614
614
|
*/
|
|
615
615
|
switchFk(switch_: "on" | "off"): Promise<void>;
|
|
616
616
|
private _getCudOutputDef;
|
|
617
617
|
}
|
|
618
618
|
/**
|
|
619
|
-
* FK
|
|
619
|
+
* FK column 배열과 대상 Table의 PK를 매칭하여 PK column명 배열을 return
|
|
620
620
|
*
|
|
621
|
-
* @param fkCols - FK
|
|
622
|
-
* @param targetTable - 참조 대상
|
|
623
|
-
* @returns 매칭된 PK
|
|
624
|
-
* @throws FK/PK
|
|
621
|
+
* @param fkCols - FK column명 array
|
|
622
|
+
* @param targetTable - 참조 대상 Table builder
|
|
623
|
+
* @returns 매칭된 PK column명 array
|
|
624
|
+
* @throws FK/PK column 수 불일치 시
|
|
625
625
|
*/
|
|
626
626
|
export declare function getMatchedPrimaryKeys(fkCols: string[], targetTable: TableBuilder<any, any>): string[];
|
|
627
627
|
interface QueryableMeta<TData extends DataRecord> {
|
|
@@ -659,20 +659,20 @@ export type NullableQueryableRecord<TData extends DataRecord> = {
|
|
|
659
659
|
[K in keyof TData]: TData[K] extends ColumnPrimitive ? ExprUnit<TData[K] | undefined> : TData[K] extends (infer U)[] ? U extends DataRecord ? NullableQueryableRecord<U>[] : never : TData[K] extends (infer U)[] | undefined ? U extends DataRecord ? NullableQueryableRecord<U>[] | undefined : never : TData[K] extends DataRecord ? NullableQueryableRecord<TData[K]> : TData[K] extends DataRecord | undefined ? NullableQueryableRecord<Exclude<TData[K], undefined>> | undefined : never;
|
|
660
660
|
};
|
|
661
661
|
/**
|
|
662
|
-
* QueryableRecord에서 DataRecord로
|
|
662
|
+
* QueryableRecord에서 DataRecord로 역transform
|
|
663
663
|
*
|
|
664
|
-
* ExprUnit<T>를 T로, 중첩
|
|
664
|
+
* ExprUnit<T>를 T로, 중첩 object/배열을 재귀적으로 풀어냄
|
|
665
665
|
*/
|
|
666
666
|
export type UnwrapQueryableRecord<R> = {
|
|
667
667
|
[K in keyof R]: R[K] extends ExprUnit<infer T> ? T : NonNullable<R[K]> extends (infer U)[] ? U extends Record<string, any> ? UnwrapQueryableRecord<U>[] | Extract<R[K], undefined> : never : NonNullable<R[K]> extends Record<string, any> ? UnwrapQueryableRecord<NonNullable<R[K]>> | Extract<R[K], undefined> : never;
|
|
668
668
|
};
|
|
669
669
|
/**
|
|
670
|
-
* include()에서
|
|
671
|
-
* ColumnPrimitive가 아닌 필드(FK, FKT
|
|
670
|
+
* include()에서 relationship 경로를 type 안전하게 지정하기 위한 Proxy type
|
|
671
|
+
* ColumnPrimitive가 아닌 필드(FK, FKT relationship)만 access 가능
|
|
672
672
|
*
|
|
673
673
|
* @example
|
|
674
674
|
* ```typescript
|
|
675
|
-
* // item.user.company
|
|
675
|
+
* // item.user.company access 시 내부적으로 ["user", "company"] 경로 수집
|
|
676
676
|
* db.post.include(item => item.user.company)
|
|
677
677
|
*
|
|
678
678
|
* // item.title은 string(ColumnPrimitive)이므로 컴파일 에러
|
|
@@ -680,12 +680,12 @@ export type UnwrapQueryableRecord<R> = {
|
|
|
680
680
|
* ```
|
|
681
681
|
*/
|
|
682
682
|
/**
|
|
683
|
-
* 배열이면 요소
|
|
683
|
+
* 배열이면 요소 type 추출
|
|
684
684
|
*/
|
|
685
685
|
type UnwrapArray<TArray> = TArray extends (infer TElement)[] ? TElement : TArray;
|
|
686
686
|
declare const PATH_SYMBOL: unique symbol;
|
|
687
687
|
/**
|
|
688
|
-
* include()용
|
|
688
|
+
* include()용 type 안전 경로 프록시
|
|
689
689
|
*/
|
|
690
690
|
export type PathProxy<TObject> = {
|
|
691
691
|
[K in keyof TObject as TObject[K] extends ColumnPrimitive ? never : K]-?: PathProxy<UnwrapArray<TObject[K]>>;
|
|
@@ -693,14 +693,14 @@ export type PathProxy<TObject> = {
|
|
|
693
693
|
readonly [PATH_SYMBOL]: string[];
|
|
694
694
|
};
|
|
695
695
|
/**
|
|
696
|
-
*
|
|
696
|
+
* Table 또는 View에 대한 Queryable factory 함수를 Generate
|
|
697
697
|
*
|
|
698
|
-
* DbContext에서
|
|
698
|
+
* DbContext에서 Table/View별 getter를 정의할 때 사용
|
|
699
699
|
*
|
|
700
|
-
* @param db - DbContext
|
|
701
|
-
* @param tableOrView - TableBuilder 또는 ViewBuilder
|
|
702
|
-
* @param as - alias 지정 (
|
|
703
|
-
* @returns Queryable을 반환하는
|
|
700
|
+
* @param db - DbContext instance
|
|
701
|
+
* @param tableOrView - TableBuilder 또는 ViewBuilder instance
|
|
702
|
+
* @param as - alias 지정 (selection, 미지정 시 automatic Create)
|
|
703
|
+
* @returns Queryable을 반환하는 factory function
|
|
704
704
|
*
|
|
705
705
|
* @example
|
|
706
706
|
* ```typescript
|