@simplysm/orm-common 13.0.69 → 13.0.71
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 +105 -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/expr/expr.js
CHANGED
|
@@ -5,28 +5,28 @@ import {
|
|
|
5
5
|
} from "../types/column.js";
|
|
6
6
|
import { ExprUnit, WhereExprUnit } from "./expr-unit.js";
|
|
7
7
|
const expr = {
|
|
8
|
-
//#region ==========
|
|
8
|
+
//#region ========== Value creation ==========
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* Wrap literal value as ExprUnit
|
|
11
11
|
*
|
|
12
|
-
*
|
|
12
|
+
* Widen to base type matching dataType, remove literal type
|
|
13
13
|
*
|
|
14
|
-
* @param dataType -
|
|
15
|
-
* @param value - 래핑할
|
|
16
|
-
* @returns 래핑된 ExprUnit
|
|
14
|
+
* @param dataType - Value의 data type ("string", "number", "boolean", "DateTime", "DateOnly", "Time", "Uuid", "Buffer")
|
|
15
|
+
* @param value - 래핑할 value (undefined allow)
|
|
16
|
+
* @returns 래핑된 ExprUnit instance
|
|
17
17
|
*
|
|
18
18
|
* @example
|
|
19
19
|
* ```typescript
|
|
20
|
-
* //
|
|
20
|
+
* // String value
|
|
21
21
|
* expr.val("string", "active")
|
|
22
22
|
*
|
|
23
|
-
* //
|
|
23
|
+
* // Number value
|
|
24
24
|
* expr.val("number", 100)
|
|
25
25
|
*
|
|
26
|
-
* //
|
|
26
|
+
* // Date value
|
|
27
27
|
* expr.val("DateOnly", DateOnly.today())
|
|
28
28
|
*
|
|
29
|
-
* // undefined
|
|
29
|
+
* // undefined value
|
|
30
30
|
* expr.val("string", undefined)
|
|
31
31
|
* ```
|
|
32
32
|
*/
|
|
@@ -34,17 +34,17 @@ const expr = {
|
|
|
34
34
|
return new ExprUnit(dataType, { type: "value", value });
|
|
35
35
|
},
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
37
|
+
* Generate column reference
|
|
38
38
|
*
|
|
39
|
-
*
|
|
39
|
+
* Typically proxy objects are used inside Queryable callbacks
|
|
40
40
|
*
|
|
41
|
-
* @param dataType -
|
|
42
|
-
* @param path -
|
|
43
|
-
* @returns
|
|
41
|
+
* @param dataType - Column data type
|
|
42
|
+
* @param path - Column path (table alias, column name, etc.)
|
|
43
|
+
* @returns Column reference ExprUnit instance
|
|
44
44
|
*
|
|
45
45
|
* @example
|
|
46
46
|
* ```typescript
|
|
47
|
-
* //
|
|
47
|
+
* // Direct column reference (internal use)
|
|
48
48
|
* expr.col("string", "T1", "name")
|
|
49
49
|
* ```
|
|
50
50
|
*/
|
|
@@ -52,23 +52,23 @@ const expr = {
|
|
|
52
52
|
return new ExprUnit(dataType, { type: "column", path });
|
|
53
53
|
},
|
|
54
54
|
/**
|
|
55
|
-
* Raw SQL
|
|
55
|
+
* Raw SQL expression Generate (escape hatch)
|
|
56
56
|
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
57
|
+
* Use when you need to directly use DB-specific functions or syntax not supported by the ORM.
|
|
58
|
+
* Used as tagged template literal, interpolated values are automatically parameterized
|
|
59
59
|
*
|
|
60
|
-
* @param dataType -
|
|
61
|
-
* @returns
|
|
60
|
+
* @param dataType - Data type of the returned value
|
|
61
|
+
* @returns Tagged template function
|
|
62
62
|
*
|
|
63
63
|
* @example
|
|
64
64
|
* ```typescript
|
|
65
|
-
* // MySQL JSON
|
|
65
|
+
* // Using MySQL JSON function
|
|
66
66
|
* db.user().select((u) => ({
|
|
67
67
|
* name: u.name,
|
|
68
68
|
* data: expr.raw("string")`JSON_EXTRACT(${u.metadata}, '$.email')`,
|
|
69
69
|
* }))
|
|
70
70
|
*
|
|
71
|
-
* // PostgreSQL
|
|
71
|
+
* // PostgreSQL array function
|
|
72
72
|
* expr.raw("number")`ARRAY_LENGTH(${u.tags}, 1)`
|
|
73
73
|
* ```
|
|
74
74
|
*/
|
|
@@ -85,15 +85,15 @@ const expr = {
|
|
|
85
85
|
};
|
|
86
86
|
},
|
|
87
87
|
//#endregion
|
|
88
|
-
//#region ========== WHERE -
|
|
88
|
+
//#region ========== WHERE - Comparison operators ==========
|
|
89
89
|
/**
|
|
90
|
-
*
|
|
90
|
+
* Equality comparison (NULL-safe)
|
|
91
91
|
*
|
|
92
|
-
*
|
|
92
|
+
* Safely compare even NULL values (MySQL: `<=>`, MSSQL/PostgreSQL: `IS NULL OR =`)
|
|
93
93
|
*
|
|
94
|
-
* @param source -
|
|
95
|
-
* @param target -
|
|
96
|
-
* @returns WHERE
|
|
94
|
+
* @param source - Column or expression to compare
|
|
95
|
+
* @param target - Target value or expression for comparison
|
|
96
|
+
* @returns WHERE condition expression
|
|
97
97
|
*
|
|
98
98
|
* @example
|
|
99
99
|
* ```typescript
|
|
@@ -109,11 +109,11 @@ const expr = {
|
|
|
109
109
|
});
|
|
110
110
|
},
|
|
111
111
|
/**
|
|
112
|
-
*
|
|
112
|
+
* Greater than comparison (>)
|
|
113
113
|
*
|
|
114
|
-
* @param source -
|
|
115
|
-
* @param target -
|
|
116
|
-
* @returns WHERE
|
|
114
|
+
* @param source - Column or expression to compare
|
|
115
|
+
* @param target - Target value or expression for comparison
|
|
116
|
+
* @returns WHERE condition expression
|
|
117
117
|
*
|
|
118
118
|
* @example
|
|
119
119
|
* ```typescript
|
|
@@ -129,11 +129,11 @@ const expr = {
|
|
|
129
129
|
});
|
|
130
130
|
},
|
|
131
131
|
/**
|
|
132
|
-
*
|
|
132
|
+
* Less than comparison (<)
|
|
133
133
|
*
|
|
134
|
-
* @param source -
|
|
135
|
-
* @param target -
|
|
136
|
-
* @returns WHERE
|
|
134
|
+
* @param source - Column or expression to compare
|
|
135
|
+
* @param target - Target value or expression for comparison
|
|
136
|
+
* @returns WHERE condition expression
|
|
137
137
|
*
|
|
138
138
|
* @example
|
|
139
139
|
* ```typescript
|
|
@@ -149,11 +149,11 @@ const expr = {
|
|
|
149
149
|
});
|
|
150
150
|
},
|
|
151
151
|
/**
|
|
152
|
-
*
|
|
152
|
+
* Greater than or equal comparison (>=)
|
|
153
153
|
*
|
|
154
|
-
* @param source -
|
|
155
|
-
* @param target -
|
|
156
|
-
* @returns WHERE
|
|
154
|
+
* @param source - Column or expression to compare
|
|
155
|
+
* @param target - Target value or expression for comparison
|
|
156
|
+
* @returns WHERE condition expression
|
|
157
157
|
*
|
|
158
158
|
* @example
|
|
159
159
|
* ```typescript
|
|
@@ -169,11 +169,11 @@ const expr = {
|
|
|
169
169
|
});
|
|
170
170
|
},
|
|
171
171
|
/**
|
|
172
|
-
*
|
|
172
|
+
* Less than or equal comparison (<=)
|
|
173
173
|
*
|
|
174
|
-
* @param source -
|
|
175
|
-
* @param target -
|
|
176
|
-
* @returns WHERE
|
|
174
|
+
* @param source - Column or expression to compare
|
|
175
|
+
* @param target - Target value or expression for comparison
|
|
176
|
+
* @returns WHERE condition expression
|
|
177
177
|
*
|
|
178
178
|
* @example
|
|
179
179
|
* ```typescript
|
|
@@ -189,22 +189,22 @@ const expr = {
|
|
|
189
189
|
});
|
|
190
190
|
},
|
|
191
191
|
/**
|
|
192
|
-
*
|
|
192
|
+
* range comparison (BETWEEN)
|
|
193
193
|
*
|
|
194
194
|
* from/to가 undefined이면 해당 방향은 무제한
|
|
195
195
|
*
|
|
196
|
-
* @param source -
|
|
197
|
-
* @param from -
|
|
198
|
-
* @param to - 끝
|
|
199
|
-
* @returns WHERE
|
|
196
|
+
* @param source - Column or expression to compare
|
|
197
|
+
* @param from - start value (undefined이면 하한 N/A)
|
|
198
|
+
* @param to - 끝 value (undefined이면 상한 N/A)
|
|
199
|
+
* @returns WHERE condition expression
|
|
200
200
|
*
|
|
201
201
|
* @example
|
|
202
202
|
* ```typescript
|
|
203
|
-
* //
|
|
203
|
+
* // range 지정
|
|
204
204
|
* db.user().where((u) => [expr.between(u.age, 18, 65)])
|
|
205
205
|
* // WHERE age BETWEEN 18 AND 65
|
|
206
206
|
*
|
|
207
|
-
* //
|
|
207
|
+
* // Specify only lower bound
|
|
208
208
|
* db.user().where((u) => [expr.between(u.age, 18, undefined)])
|
|
209
209
|
* // WHERE age >= 18
|
|
210
210
|
* ```
|
|
@@ -218,12 +218,12 @@ const expr = {
|
|
|
218
218
|
});
|
|
219
219
|
},
|
|
220
220
|
//#endregion
|
|
221
|
-
//#region ========== WHERE - NULL
|
|
221
|
+
//#region ========== WHERE - NULL check ==========
|
|
222
222
|
/**
|
|
223
223
|
* NULL 체크 (IS NULL)
|
|
224
224
|
*
|
|
225
|
-
* @param source - 체크할
|
|
226
|
-
* @returns WHERE
|
|
225
|
+
* @param source - 체크할 column 또는 expression
|
|
226
|
+
* @returns WHERE condition expression
|
|
227
227
|
*
|
|
228
228
|
* @example
|
|
229
229
|
* ```typescript
|
|
@@ -238,16 +238,16 @@ const expr = {
|
|
|
238
238
|
});
|
|
239
239
|
},
|
|
240
240
|
//#endregion
|
|
241
|
-
//#region ========== WHERE -
|
|
241
|
+
//#region ========== WHERE - String search ==========
|
|
242
242
|
/**
|
|
243
|
-
* LIKE
|
|
243
|
+
* LIKE pattern 매칭
|
|
244
244
|
*
|
|
245
245
|
* `%`는 0개 이상의 문자, `_`는 단일 문자와 매칭.
|
|
246
|
-
* 특수문자는 `\`로
|
|
246
|
+
* 특수문자는 `\`로 escape됨
|
|
247
247
|
*
|
|
248
|
-
* @param source - 검색할
|
|
249
|
-
* @param pattern - 검색
|
|
250
|
-
* @returns WHERE
|
|
248
|
+
* @param source - 검색할 column 또는 expression
|
|
249
|
+
* @param pattern - 검색 pattern (%, _ wildcard 사용 가능)
|
|
250
|
+
* @returns WHERE condition expression
|
|
251
251
|
*
|
|
252
252
|
* @example
|
|
253
253
|
* ```typescript
|
|
@@ -255,7 +255,7 @@ const expr = {
|
|
|
255
255
|
* db.user().where((u) => [expr.like(u.name, "John%")])
|
|
256
256
|
* // WHERE name LIKE 'John%' ESCAPE '\'
|
|
257
257
|
*
|
|
258
|
-
* //
|
|
258
|
+
* // include 검색
|
|
259
259
|
* db.user().where((u) => [expr.like(u.email, "%@gmail.com")])
|
|
260
260
|
* ```
|
|
261
261
|
*/
|
|
@@ -267,13 +267,13 @@ const expr = {
|
|
|
267
267
|
});
|
|
268
268
|
},
|
|
269
269
|
/**
|
|
270
|
-
*
|
|
270
|
+
* regular expression pattern 매칭
|
|
271
271
|
*
|
|
272
|
-
* DBMS별
|
|
272
|
+
* DBMS별 regular expression 문법 차이 주의 필요
|
|
273
273
|
*
|
|
274
|
-
* @param source - 검색할
|
|
275
|
-
* @param pattern -
|
|
276
|
-
* @returns WHERE
|
|
274
|
+
* @param source - 검색할 column 또는 expression
|
|
275
|
+
* @param pattern - regular expression pattern
|
|
276
|
+
* @returns WHERE condition expression
|
|
277
277
|
*
|
|
278
278
|
* @example
|
|
279
279
|
* ```typescript
|
|
@@ -291,11 +291,11 @@ const expr = {
|
|
|
291
291
|
//#endregion
|
|
292
292
|
//#region ========== WHERE - IN ==========
|
|
293
293
|
/**
|
|
294
|
-
* IN
|
|
294
|
+
* IN operator - Value 목록과 comparison
|
|
295
295
|
*
|
|
296
|
-
* @param source -
|
|
297
|
-
* @param values - 비교할
|
|
298
|
-
* @returns WHERE
|
|
296
|
+
* @param source - Column or expression to compare
|
|
297
|
+
* @param values - 비교할 value 목록
|
|
298
|
+
* @returns WHERE condition expression
|
|
299
299
|
*
|
|
300
300
|
* @example
|
|
301
301
|
* ```typescript
|
|
@@ -311,14 +311,14 @@ const expr = {
|
|
|
311
311
|
});
|
|
312
312
|
},
|
|
313
313
|
/**
|
|
314
|
-
* IN (SELECT ...) -
|
|
314
|
+
* IN (SELECT ...) - Subquery 결과와 comparison
|
|
315
315
|
*
|
|
316
|
-
*
|
|
316
|
+
* Subquery는 반드시 단일 column만 SELECT해야 함
|
|
317
317
|
*
|
|
318
|
-
* @param source -
|
|
319
|
-
* @param query - 단일
|
|
320
|
-
* @returns WHERE
|
|
321
|
-
* @throws {Error}
|
|
318
|
+
* @param source - Column or expression to compare
|
|
319
|
+
* @param query - 단일 column을 반환하는 Queryable
|
|
320
|
+
* @returns WHERE condition expression
|
|
321
|
+
* @throws {Error} Subquery가 단일 column이 아닌 경우
|
|
322
322
|
*
|
|
323
323
|
* @example
|
|
324
324
|
* ```typescript
|
|
@@ -336,7 +336,7 @@ const expr = {
|
|
|
336
336
|
inQuery(source, query) {
|
|
337
337
|
const queryDef = query.getSelectQueryDef();
|
|
338
338
|
if (queryDef.select == null || Object.keys(queryDef.select).length !== 1) {
|
|
339
|
-
throw new Error("inQuery
|
|
339
|
+
throw new Error("inQuery subquery must SELECT only a single column.");
|
|
340
340
|
}
|
|
341
341
|
return new WhereExprUnit({
|
|
342
342
|
type: "inQuery",
|
|
@@ -345,12 +345,12 @@ const expr = {
|
|
|
345
345
|
});
|
|
346
346
|
},
|
|
347
347
|
/**
|
|
348
|
-
* EXISTS (SELECT ...) -
|
|
348
|
+
* EXISTS (SELECT ...) - Subquery result 존재 여부 확인
|
|
349
349
|
*
|
|
350
|
-
*
|
|
350
|
+
* Subquery가 하나 이상의 행을 반환하면 true
|
|
351
351
|
*
|
|
352
352
|
* @param query - 존재 여부를 확인할 Queryable
|
|
353
|
-
* @returns WHERE
|
|
353
|
+
* @returns WHERE condition expression
|
|
354
354
|
*
|
|
355
355
|
* @example
|
|
356
356
|
* ```typescript
|
|
@@ -371,12 +371,12 @@ const expr = {
|
|
|
371
371
|
});
|
|
372
372
|
},
|
|
373
373
|
//#endregion
|
|
374
|
-
//#region ========== WHERE -
|
|
374
|
+
//#region ========== WHERE - Logical operators ==========
|
|
375
375
|
/**
|
|
376
|
-
* NOT
|
|
376
|
+
* NOT operator - Condition 부정
|
|
377
377
|
*
|
|
378
|
-
* @param arg - 부정할
|
|
379
|
-
* @returns 부정된 WHERE
|
|
378
|
+
* @param arg - 부정할 condition
|
|
379
|
+
* @returns 부정된 WHERE condition expression
|
|
380
380
|
*
|
|
381
381
|
* @example
|
|
382
382
|
* ```typescript
|
|
@@ -391,12 +391,12 @@ const expr = {
|
|
|
391
391
|
});
|
|
392
392
|
},
|
|
393
393
|
/**
|
|
394
|
-
* AND
|
|
394
|
+
* AND operator - 모든 condition 충족
|
|
395
395
|
*
|
|
396
|
-
* 여러 조건을 AND로 결합. where() 메서드에 배열로 전달하면
|
|
396
|
+
* 여러 조건을 AND로 결합. where() 메서드에 배열로 전달하면 automatic으로 AND applied
|
|
397
397
|
*
|
|
398
|
-
* @param conditions - AND로 결합할
|
|
399
|
-
* @returns 결합된 WHERE
|
|
398
|
+
* @param conditions - AND로 결합할 condition 목록
|
|
399
|
+
* @returns 결합된 WHERE condition expression
|
|
400
400
|
*
|
|
401
401
|
* @example
|
|
402
402
|
* ```typescript
|
|
@@ -411,7 +411,7 @@ const expr = {
|
|
|
411
411
|
*/
|
|
412
412
|
and(conditions) {
|
|
413
413
|
if (conditions.length === 0) {
|
|
414
|
-
throw new ArgumentError({ conditions: "
|
|
414
|
+
throw new ArgumentError({ conditions: "empty arrays are not allowed" });
|
|
415
415
|
}
|
|
416
416
|
return new WhereExprUnit({
|
|
417
417
|
type: "and",
|
|
@@ -419,10 +419,10 @@ const expr = {
|
|
|
419
419
|
});
|
|
420
420
|
},
|
|
421
421
|
/**
|
|
422
|
-
* OR
|
|
422
|
+
* OR operator - 하나 이상의 condition 충족
|
|
423
423
|
*
|
|
424
|
-
* @param conditions - OR로 결합할
|
|
425
|
-
* @returns 결합된 WHERE
|
|
424
|
+
* @param conditions - OR로 결합할 condition 목록
|
|
425
|
+
* @returns 결합된 WHERE condition expression
|
|
426
426
|
*
|
|
427
427
|
* @example
|
|
428
428
|
* ```typescript
|
|
@@ -437,7 +437,7 @@ const expr = {
|
|
|
437
437
|
*/
|
|
438
438
|
or(conditions) {
|
|
439
439
|
if (conditions.length === 0) {
|
|
440
|
-
throw new ArgumentError({ conditions: "
|
|
440
|
+
throw new ArgumentError({ conditions: "empty arrays are not allowed" });
|
|
441
441
|
}
|
|
442
442
|
return new WhereExprUnit({
|
|
443
443
|
type: "or",
|
|
@@ -449,10 +449,10 @@ const expr = {
|
|
|
449
449
|
/**
|
|
450
450
|
* 문자열 연결 (CONCAT)
|
|
451
451
|
*
|
|
452
|
-
* NULL 값은 빈 문자열로
|
|
452
|
+
* NULL 값은 빈 문자열로 processing됨 (DBMS별 automatic Transform)
|
|
453
453
|
*
|
|
454
454
|
* @param args - 연결할 문자열들
|
|
455
|
-
* @returns 연결된 문자열
|
|
455
|
+
* @returns 연결된 문자열 expression
|
|
456
456
|
*
|
|
457
457
|
* @example
|
|
458
458
|
* ```typescript
|
|
@@ -471,9 +471,9 @@ const expr = {
|
|
|
471
471
|
/**
|
|
472
472
|
* 문자열 왼쪽에서 지정 길이만큼 추출 (LEFT)
|
|
473
473
|
*
|
|
474
|
-
* @param source -
|
|
474
|
+
* @param source - original string
|
|
475
475
|
* @param length - 추출할 문자 수
|
|
476
|
-
* @returns 추출된 문자열
|
|
476
|
+
* @returns 추출된 문자열 expression
|
|
477
477
|
*
|
|
478
478
|
* @example
|
|
479
479
|
* ```typescript
|
|
@@ -493,9 +493,9 @@ const expr = {
|
|
|
493
493
|
/**
|
|
494
494
|
* 문자열 오른쪽에서 지정 길이만큼 추출 (RIGHT)
|
|
495
495
|
*
|
|
496
|
-
* @param source -
|
|
496
|
+
* @param source - original string
|
|
497
497
|
* @param length - 추출할 문자 수
|
|
498
|
-
* @returns 추출된 문자열
|
|
498
|
+
* @returns 추출된 문자열 expression
|
|
499
499
|
*
|
|
500
500
|
* @example
|
|
501
501
|
* ```typescript
|
|
@@ -513,10 +513,10 @@ const expr = {
|
|
|
513
513
|
});
|
|
514
514
|
},
|
|
515
515
|
/**
|
|
516
|
-
* 문자열 양쪽 공백
|
|
516
|
+
* 문자열 양쪽 공백 Remove (TRIM)
|
|
517
517
|
*
|
|
518
|
-
* @param source -
|
|
519
|
-
* @returns 공백이 제거된 문자열
|
|
518
|
+
* @param source - original string
|
|
519
|
+
* @returns 공백이 제거된 문자열 expression
|
|
520
520
|
*
|
|
521
521
|
* @example
|
|
522
522
|
* ```typescript
|
|
@@ -535,12 +535,12 @@ const expr = {
|
|
|
535
535
|
/**
|
|
536
536
|
* 문자열 왼쪽 패딩 (LPAD)
|
|
537
537
|
*
|
|
538
|
-
* 지정 길이가 될 때까지 왼쪽에 fillString
|
|
538
|
+
* 지정 길이가 될 때까지 왼쪽에 fillString loop Add
|
|
539
539
|
*
|
|
540
|
-
* @param source -
|
|
540
|
+
* @param source - original string
|
|
541
541
|
* @param length - 목표 길이
|
|
542
542
|
* @param fillString - 패딩에 사용할 문자열
|
|
543
|
-
* @returns 패딩된 문자열
|
|
543
|
+
* @returns 패딩된 문자열 expression
|
|
544
544
|
*
|
|
545
545
|
* @example
|
|
546
546
|
* ```typescript
|
|
@@ -548,7 +548,7 @@ const expr = {
|
|
|
548
548
|
* orderNo: expr.padStart(expr.cast(o.id, { type: "varchar", length: 10 }), 8, "0"),
|
|
549
549
|
* }))
|
|
550
550
|
* // SELECT LPAD(CAST(id AS VARCHAR(10)), 8, '0') AS orderNo
|
|
551
|
-
* //
|
|
551
|
+
* // Result: "00000123"
|
|
552
552
|
* ```
|
|
553
553
|
*/
|
|
554
554
|
padStart(source, length, fillString) {
|
|
@@ -562,10 +562,10 @@ const expr = {
|
|
|
562
562
|
/**
|
|
563
563
|
* 문자열 치환 (REPLACE)
|
|
564
564
|
*
|
|
565
|
-
* @param source -
|
|
565
|
+
* @param source - original string
|
|
566
566
|
* @param from - 찾을 문자열
|
|
567
567
|
* @param to - 대체할 문자열
|
|
568
|
-
* @returns 치환된 문자열
|
|
568
|
+
* @returns 치환된 문자열 expression
|
|
569
569
|
*
|
|
570
570
|
* @example
|
|
571
571
|
* ```typescript
|
|
@@ -584,10 +584,10 @@ const expr = {
|
|
|
584
584
|
});
|
|
585
585
|
},
|
|
586
586
|
/**
|
|
587
|
-
* 문자열 대문자
|
|
587
|
+
* 문자열 대문자 Transform (UPPER)
|
|
588
588
|
*
|
|
589
|
-
* @param source -
|
|
590
|
-
* @returns 대문자로
|
|
589
|
+
* @param source - original string
|
|
590
|
+
* @returns 대문자로 Transform된 문자열 expression
|
|
591
591
|
*
|
|
592
592
|
* @example
|
|
593
593
|
* ```typescript
|
|
@@ -604,10 +604,10 @@ const expr = {
|
|
|
604
604
|
});
|
|
605
605
|
},
|
|
606
606
|
/**
|
|
607
|
-
* 문자열 소문자
|
|
607
|
+
* 문자열 소문자 Transform (LOWER)
|
|
608
608
|
*
|
|
609
|
-
* @param source -
|
|
610
|
-
* @returns 소문자로
|
|
609
|
+
* @param source - original string
|
|
610
|
+
* @returns 소문자로 Transform된 문자열 expression
|
|
611
611
|
*
|
|
612
612
|
* @example
|
|
613
613
|
* ```typescript
|
|
@@ -626,7 +626,7 @@ const expr = {
|
|
|
626
626
|
/**
|
|
627
627
|
* 문자열 길이 (문자 수)
|
|
628
628
|
*
|
|
629
|
-
* @param source -
|
|
629
|
+
* @param source - original string
|
|
630
630
|
* @returns 문자 수
|
|
631
631
|
*
|
|
632
632
|
* @example
|
|
@@ -648,7 +648,7 @@ const expr = {
|
|
|
648
648
|
*
|
|
649
649
|
* UTF-8 환경에서 한글은 3바이트
|
|
650
650
|
*
|
|
651
|
-
* @param source -
|
|
651
|
+
* @param source - original string
|
|
652
652
|
* @returns 바이트 수
|
|
653
653
|
*
|
|
654
654
|
* @example
|
|
@@ -670,15 +670,15 @@ const expr = {
|
|
|
670
670
|
*
|
|
671
671
|
* SQL 표준에 따라 1-based index 사용
|
|
672
672
|
*
|
|
673
|
-
* @param source -
|
|
674
|
-
* @param start -
|
|
673
|
+
* @param source - original string
|
|
674
|
+
* @param start - start 위치 (1부터 start)
|
|
675
675
|
* @param length - 추출할 길이 (생략 시 끝까지)
|
|
676
|
-
* @returns 추출된 문자열
|
|
676
|
+
* @returns 추출된 문자열 expression
|
|
677
677
|
*
|
|
678
678
|
* @example
|
|
679
679
|
* ```typescript
|
|
680
680
|
* db.user().select((u) => ({
|
|
681
|
-
* // "Hello World"에서
|
|
681
|
+
* // "Hello World"에서 Index 1부터 5글자: "Hello"
|
|
682
682
|
* prefix: expr.substring(u.name, 1, 5),
|
|
683
683
|
* }))
|
|
684
684
|
* // SELECT SUBSTRING(name, 1, 5) AS prefix
|
|
@@ -695,11 +695,11 @@ const expr = {
|
|
|
695
695
|
/**
|
|
696
696
|
* 문자열 내 위치 찾기 (LOCATE/CHARINDEX)
|
|
697
697
|
*
|
|
698
|
-
* 1-based index
|
|
698
|
+
* 1-based index return, 없으면 0 return
|
|
699
699
|
*
|
|
700
700
|
* @param source - 검색할 문자열
|
|
701
701
|
* @param search - 찾을 문자열
|
|
702
|
-
* @returns 위치 (1부터
|
|
702
|
+
* @returns 위치 (1부터 start, 없으면 0)
|
|
703
703
|
*
|
|
704
704
|
* @example
|
|
705
705
|
* ```typescript
|
|
@@ -718,12 +718,12 @@ const expr = {
|
|
|
718
718
|
});
|
|
719
719
|
},
|
|
720
720
|
//#endregion
|
|
721
|
-
//#region ========== SELECT -
|
|
721
|
+
//#region ========== SELECT - Number ==========
|
|
722
722
|
/**
|
|
723
723
|
* 절대값 (ABS)
|
|
724
724
|
*
|
|
725
|
-
* @param source - 원본
|
|
726
|
-
* @returns 절대값
|
|
725
|
+
* @param source - 원본 Number
|
|
726
|
+
* @returns 절대값 expression
|
|
727
727
|
*
|
|
728
728
|
* @example
|
|
729
729
|
* ```typescript
|
|
@@ -742,9 +742,9 @@ const expr = {
|
|
|
742
742
|
/**
|
|
743
743
|
* 반올림 (ROUND)
|
|
744
744
|
*
|
|
745
|
-
* @param source - 원본
|
|
745
|
+
* @param source - 원본 Number
|
|
746
746
|
* @param digits - 소수점 이하 자릿수
|
|
747
|
-
* @returns 반올림된
|
|
747
|
+
* @returns 반올림된 Number expression
|
|
748
748
|
*
|
|
749
749
|
* @example
|
|
750
750
|
* ```typescript
|
|
@@ -765,8 +765,8 @@ const expr = {
|
|
|
765
765
|
/**
|
|
766
766
|
* 올림 (CEILING)
|
|
767
767
|
*
|
|
768
|
-
* @param source - 원본
|
|
769
|
-
* @returns 올림된
|
|
768
|
+
* @param source - 원본 Number
|
|
769
|
+
* @returns 올림된 Number expression
|
|
770
770
|
*
|
|
771
771
|
* @example
|
|
772
772
|
* ```typescript
|
|
@@ -786,8 +786,8 @@ const expr = {
|
|
|
786
786
|
/**
|
|
787
787
|
* 버림 (FLOOR)
|
|
788
788
|
*
|
|
789
|
-
* @param source - 원본
|
|
790
|
-
* @returns 버림된
|
|
789
|
+
* @param source - 원본 Number
|
|
790
|
+
* @returns 버림된 Number expression
|
|
791
791
|
*
|
|
792
792
|
* @example
|
|
793
793
|
* ```typescript
|
|
@@ -805,12 +805,12 @@ const expr = {
|
|
|
805
805
|
});
|
|
806
806
|
},
|
|
807
807
|
//#endregion
|
|
808
|
-
//#region ========== SELECT -
|
|
808
|
+
//#region ========== SELECT - Date ==========
|
|
809
809
|
/**
|
|
810
810
|
* 연도 추출 (YEAR)
|
|
811
811
|
*
|
|
812
|
-
* @param source - DateTime 또는 DateOnly
|
|
813
|
-
* @returns 연도 (4자리
|
|
812
|
+
* @param source - DateTime 또는 DateOnly expression
|
|
813
|
+
* @returns 연도 (4자리 Number)
|
|
814
814
|
*
|
|
815
815
|
* @example
|
|
816
816
|
* ```typescript
|
|
@@ -829,7 +829,7 @@ const expr = {
|
|
|
829
829
|
/**
|
|
830
830
|
* 월 추출 (MONTH)
|
|
831
831
|
*
|
|
832
|
-
* @param source - DateTime 또는 DateOnly
|
|
832
|
+
* @param source - DateTime 또는 DateOnly expression
|
|
833
833
|
* @returns 월 (1~12)
|
|
834
834
|
*
|
|
835
835
|
* @example
|
|
@@ -849,7 +849,7 @@ const expr = {
|
|
|
849
849
|
/**
|
|
850
850
|
* 일 추출 (DAY)
|
|
851
851
|
*
|
|
852
|
-
* @param source - DateTime 또는 DateOnly
|
|
852
|
+
* @param source - DateTime 또는 DateOnly expression
|
|
853
853
|
* @returns 일 (1~31)
|
|
854
854
|
*
|
|
855
855
|
* @example
|
|
@@ -869,7 +869,7 @@ const expr = {
|
|
|
869
869
|
/**
|
|
870
870
|
* 시 추출 (HOUR)
|
|
871
871
|
*
|
|
872
|
-
* @param source - DateTime 또는 Time
|
|
872
|
+
* @param source - DateTime 또는 Time expression
|
|
873
873
|
* @returns 시 (0~23)
|
|
874
874
|
*
|
|
875
875
|
* @example
|
|
@@ -889,7 +889,7 @@ const expr = {
|
|
|
889
889
|
/**
|
|
890
890
|
* 분 추출 (MINUTE)
|
|
891
891
|
*
|
|
892
|
-
* @param source - DateTime 또는 Time
|
|
892
|
+
* @param source - DateTime 또는 Time expression
|
|
893
893
|
* @returns 분 (0~59)
|
|
894
894
|
*
|
|
895
895
|
* @example
|
|
@@ -909,7 +909,7 @@ const expr = {
|
|
|
909
909
|
/**
|
|
910
910
|
* 초 추출 (SECOND)
|
|
911
911
|
*
|
|
912
|
-
* @param source - DateTime 또는 Time
|
|
912
|
+
* @param source - DateTime 또는 Time expression
|
|
913
913
|
* @returns 초 (0~59)
|
|
914
914
|
*
|
|
915
915
|
* @example
|
|
@@ -929,9 +929,9 @@ const expr = {
|
|
|
929
929
|
/**
|
|
930
930
|
* ISO 주차 추출
|
|
931
931
|
*
|
|
932
|
-
* ISO 8601 기준 주차 (월요일
|
|
932
|
+
* ISO 8601 기준 주차 (월요일 start, 1~53)
|
|
933
933
|
*
|
|
934
|
-
* @param source - DateOnly
|
|
934
|
+
* @param source - DateOnly expression
|
|
935
935
|
* @returns ISO 주차 번호
|
|
936
936
|
*
|
|
937
937
|
* @example
|
|
@@ -951,10 +951,10 @@ const expr = {
|
|
|
951
951
|
/**
|
|
952
952
|
* ISO 주 시작일 (월요일)
|
|
953
953
|
*
|
|
954
|
-
* 해당
|
|
954
|
+
* 해당 Date가 속한 주의 월요일 return
|
|
955
955
|
*
|
|
956
|
-
* @param source - DateOnly
|
|
957
|
-
* @returns 주의
|
|
956
|
+
* @param source - DateOnly expression
|
|
957
|
+
* @returns 주의 start Date (월요일)
|
|
958
958
|
*
|
|
959
959
|
* @example
|
|
960
960
|
* ```typescript
|
|
@@ -973,9 +973,9 @@ const expr = {
|
|
|
973
973
|
/**
|
|
974
974
|
* ISO 연월 (해당 월의 1일)
|
|
975
975
|
*
|
|
976
|
-
* 해당
|
|
976
|
+
* 해당 Date의 월 첫째 날 return
|
|
977
977
|
*
|
|
978
|
-
* @param source - DateOnly
|
|
978
|
+
* @param source - DateOnly expression
|
|
979
979
|
* @returns 월의 첫째 날
|
|
980
980
|
*
|
|
981
981
|
* @example
|
|
@@ -993,12 +993,12 @@ const expr = {
|
|
|
993
993
|
});
|
|
994
994
|
},
|
|
995
995
|
/**
|
|
996
|
-
*
|
|
996
|
+
* Date 차이 계산 (DATEDIFF)
|
|
997
997
|
*
|
|
998
998
|
* @param separator - 단위 ("year", "month", "day", "hour", "minute", "second")
|
|
999
|
-
* @param from -
|
|
1000
|
-
* @param to - 끝
|
|
1001
|
-
* @returns 차이
|
|
999
|
+
* @param from - start Date
|
|
1000
|
+
* @param to - 끝 Date
|
|
1001
|
+
* @returns 차이 value (to - from)
|
|
1002
1002
|
*
|
|
1003
1003
|
* @example
|
|
1004
1004
|
* ```typescript
|
|
@@ -1017,12 +1017,12 @@ const expr = {
|
|
|
1017
1017
|
});
|
|
1018
1018
|
},
|
|
1019
1019
|
/**
|
|
1020
|
-
*
|
|
1020
|
+
* Date 더하기 (DATEADD)
|
|
1021
1021
|
*
|
|
1022
1022
|
* @param separator - 단위 ("year", "month", "day", "hour", "minute", "second")
|
|
1023
|
-
* @param source - 원본
|
|
1024
|
-
* @param value - 더할
|
|
1025
|
-
* @returns 계산된
|
|
1023
|
+
* @param source - 원본 Date
|
|
1024
|
+
* @param value - 더할 value (음수 가능)
|
|
1025
|
+
* @returns 계산된 Date
|
|
1026
1026
|
*
|
|
1027
1027
|
* @example
|
|
1028
1028
|
* ```typescript
|
|
@@ -1041,13 +1041,13 @@ const expr = {
|
|
|
1041
1041
|
});
|
|
1042
1042
|
},
|
|
1043
1043
|
/**
|
|
1044
|
-
*
|
|
1044
|
+
* Date 포맷 (DATE_FORMAT)
|
|
1045
1045
|
*
|
|
1046
1046
|
* DBMS별로 포맷 문자열 규칙이 다를 수 있음
|
|
1047
1047
|
*
|
|
1048
|
-
* @param source -
|
|
1048
|
+
* @param source - Date expression
|
|
1049
1049
|
* @param format - 포맷 문자열 (예: "%Y-%m-%d")
|
|
1050
|
-
* @returns 포맷된 문자열
|
|
1050
|
+
* @returns 포맷된 문자열 expression
|
|
1051
1051
|
*
|
|
1052
1052
|
* @example
|
|
1053
1053
|
* ```typescript
|
|
@@ -1066,14 +1066,14 @@ const expr = {
|
|
|
1066
1066
|
});
|
|
1067
1067
|
},
|
|
1068
1068
|
//#endregion
|
|
1069
|
-
//#region ========== SELECT -
|
|
1069
|
+
//#region ========== SELECT - Condition ==========
|
|
1070
1070
|
/**
|
|
1071
1071
|
* NULL 대체 (COALESCE/IFNULL)
|
|
1072
1072
|
*
|
|
1073
|
-
* 첫 번째 non-null 값을
|
|
1073
|
+
* 첫 번째 non-null 값을 return. 마지막 인자가 non-nullable이면 결과도 non-nullable
|
|
1074
1074
|
*
|
|
1075
|
-
* @param args -
|
|
1076
|
-
* @returns 첫 번째 non-null
|
|
1075
|
+
* @param args - Inspect할 값들 (마지막은 Default value)
|
|
1076
|
+
* @returns 첫 번째 non-null value
|
|
1077
1077
|
*
|
|
1078
1078
|
* @example
|
|
1079
1079
|
* ```typescript
|
|
@@ -1085,18 +1085,18 @@ const expr = {
|
|
|
1085
1085
|
*/
|
|
1086
1086
|
ifNull,
|
|
1087
1087
|
/**
|
|
1088
|
-
* 특정 값이면 NULL
|
|
1088
|
+
* 특정 값이면 NULL return (NULLIF)
|
|
1089
1089
|
*
|
|
1090
|
-
* source === value 이면 NULL
|
|
1090
|
+
* source === value 이면 NULL return, 아니면 source return
|
|
1091
1091
|
*
|
|
1092
|
-
* @param source - 원본
|
|
1093
|
-
* @param value - 비교할
|
|
1094
|
-
* @returns NULL 또는 원본
|
|
1092
|
+
* @param source - 원본 value
|
|
1093
|
+
* @param value - 비교할 value
|
|
1094
|
+
* @returns NULL 또는 원본 value
|
|
1095
1095
|
*
|
|
1096
1096
|
* @example
|
|
1097
1097
|
* ```typescript
|
|
1098
1098
|
* db.user().select((u) => ({
|
|
1099
|
-
* // 빈 문자열을 NULL로
|
|
1099
|
+
* // 빈 문자열을 NULL로 Transform
|
|
1100
1100
|
* bio: expr.nullIf(u.bio, ""),
|
|
1101
1101
|
* }))
|
|
1102
1102
|
* // SELECT NULLIF(bio, '') AS bio
|
|
@@ -1110,12 +1110,12 @@ const expr = {
|
|
|
1110
1110
|
});
|
|
1111
1111
|
},
|
|
1112
1112
|
/**
|
|
1113
|
-
* WHERE 표현식을 boolean으로
|
|
1113
|
+
* WHERE 표현식을 boolean으로 Transform
|
|
1114
1114
|
*
|
|
1115
|
-
* SELECT 절에서
|
|
1115
|
+
* SELECT 절에서 condition 결과를 boolean column으로 사용할 때 사용
|
|
1116
1116
|
*
|
|
1117
|
-
* @param condition -
|
|
1118
|
-
* @returns boolean
|
|
1117
|
+
* @param condition - Transform할 condition
|
|
1118
|
+
* @returns boolean expression
|
|
1119
1119
|
*
|
|
1120
1120
|
* @example
|
|
1121
1121
|
* ```typescript
|
|
@@ -1132,11 +1132,11 @@ const expr = {
|
|
|
1132
1132
|
});
|
|
1133
1133
|
},
|
|
1134
1134
|
/**
|
|
1135
|
-
* CASE WHEN
|
|
1135
|
+
* CASE WHEN expression builder
|
|
1136
1136
|
*
|
|
1137
|
-
* 체이닝 방식으로
|
|
1137
|
+
* 체이닝 방식으로 condition 분기를 구성
|
|
1138
1138
|
*
|
|
1139
|
-
* @returns SwitchExprBuilder
|
|
1139
|
+
* @returns SwitchExprBuilder instance
|
|
1140
1140
|
*
|
|
1141
1141
|
* @example
|
|
1142
1142
|
* ```typescript
|
|
@@ -1154,12 +1154,12 @@ const expr = {
|
|
|
1154
1154
|
return createSwitchBuilder();
|
|
1155
1155
|
},
|
|
1156
1156
|
/**
|
|
1157
|
-
* 단순 IF
|
|
1157
|
+
* 단순 IF condition (삼항 operator)
|
|
1158
1158
|
*
|
|
1159
|
-
* @param condition -
|
|
1160
|
-
* @param then -
|
|
1161
|
-
* @param else_ -
|
|
1162
|
-
* @returns 조건부
|
|
1159
|
+
* @param condition - Condition
|
|
1160
|
+
* @param then - Condition이 참일 때 value
|
|
1161
|
+
* @param else_ - Condition이 거짓일 때 value
|
|
1162
|
+
* @returns 조건부 value expression
|
|
1163
1163
|
*
|
|
1164
1164
|
* @example
|
|
1165
1165
|
* ```typescript
|
|
@@ -1182,7 +1182,7 @@ const expr = {
|
|
|
1182
1182
|
}
|
|
1183
1183
|
const nonNullLiteral = allValues.find((v) => v != null);
|
|
1184
1184
|
if (nonNullLiteral == null) {
|
|
1185
|
-
throw new Error("if
|
|
1185
|
+
throw new Error("At least one of if's then/else must be non-null.");
|
|
1186
1186
|
}
|
|
1187
1187
|
return new ExprUnit(inferColumnPrimitiveStr(nonNullLiteral), {
|
|
1188
1188
|
type: "if",
|
|
@@ -1192,21 +1192,21 @@ const expr = {
|
|
|
1192
1192
|
});
|
|
1193
1193
|
},
|
|
1194
1194
|
//#endregion
|
|
1195
|
-
//#region ========== SELECT -
|
|
1196
|
-
// SUM, AVG, MAX등의 집계는 모든 값이 NULL이거나 행이 없을 때만 NULL
|
|
1195
|
+
//#region ========== SELECT - Aggregate ==========
|
|
1196
|
+
// SUM, AVG, MAX등의 집계는 모든 값이 NULL이거나 행이 없을 때만 NULL return (값이 NULL인 행은 무시함)
|
|
1197
1197
|
/**
|
|
1198
|
-
*
|
|
1198
|
+
* row 수 카운트 (COUNT)
|
|
1199
1199
|
*
|
|
1200
|
-
* @param arg - 카운트할
|
|
1201
|
-
* @param distinct - true면 중복
|
|
1202
|
-
* @returns
|
|
1200
|
+
* @param arg - 카운트할 column (생략 시 전체 row 수)
|
|
1201
|
+
* @param distinct - true면 중복 Remove
|
|
1202
|
+
* @returns row 수
|
|
1203
1203
|
*
|
|
1204
1204
|
* @example
|
|
1205
1205
|
* ```typescript
|
|
1206
|
-
* // 전체
|
|
1206
|
+
* // 전체 row 수
|
|
1207
1207
|
* db.user().select(() => ({ total: expr.count() }))
|
|
1208
1208
|
*
|
|
1209
|
-
* // 중복
|
|
1209
|
+
* // 중복 Remove 카운트
|
|
1210
1210
|
* db.order().select((o) => ({
|
|
1211
1211
|
* uniqueCustomers: expr.count(o.customerId, true),
|
|
1212
1212
|
* }))
|
|
@@ -1222,9 +1222,9 @@ const expr = {
|
|
|
1222
1222
|
/**
|
|
1223
1223
|
* 합계 (SUM)
|
|
1224
1224
|
*
|
|
1225
|
-
* NULL 값은 무시됨. 모든 값이 NULL이면 NULL
|
|
1225
|
+
* NULL 값은 무시됨. 모든 값이 NULL이면 NULL return
|
|
1226
1226
|
*
|
|
1227
|
-
* @param arg - 합계를 구할
|
|
1227
|
+
* @param arg - 합계를 구할 Number column
|
|
1228
1228
|
* @returns 합계 (또는 NULL)
|
|
1229
1229
|
*
|
|
1230
1230
|
* @example
|
|
@@ -1244,9 +1244,9 @@ const expr = {
|
|
|
1244
1244
|
/**
|
|
1245
1245
|
* 평균 (AVG)
|
|
1246
1246
|
*
|
|
1247
|
-
* NULL 값은 무시됨. 모든 값이 NULL이면 NULL
|
|
1247
|
+
* NULL 값은 무시됨. 모든 값이 NULL이면 NULL return
|
|
1248
1248
|
*
|
|
1249
|
-
* @param arg - 평균을 구할
|
|
1249
|
+
* @param arg - 평균을 구할 Number column
|
|
1250
1250
|
* @returns 평균 (또는 NULL)
|
|
1251
1251
|
*
|
|
1252
1252
|
* @example
|
|
@@ -1266,9 +1266,9 @@ const expr = {
|
|
|
1266
1266
|
/**
|
|
1267
1267
|
* 최대값 (MAX)
|
|
1268
1268
|
*
|
|
1269
|
-
* NULL 값은 무시됨. 모든 값이 NULL이면 NULL
|
|
1269
|
+
* NULL 값은 무시됨. 모든 값이 NULL이면 NULL return
|
|
1270
1270
|
*
|
|
1271
|
-
* @param arg - 최대값을 구할
|
|
1271
|
+
* @param arg - 최대값을 구할 column
|
|
1272
1272
|
* @returns 최대값 (또는 NULL)
|
|
1273
1273
|
*
|
|
1274
1274
|
* @example
|
|
@@ -1288,9 +1288,9 @@ const expr = {
|
|
|
1288
1288
|
/**
|
|
1289
1289
|
* 최소값 (MIN)
|
|
1290
1290
|
*
|
|
1291
|
-
* NULL 값은 무시됨. 모든 값이 NULL이면 NULL
|
|
1291
|
+
* NULL 값은 무시됨. 모든 값이 NULL이면 NULL return
|
|
1292
1292
|
*
|
|
1293
|
-
* @param arg - 최소값을 구할
|
|
1293
|
+
* @param arg - 최소값을 구할 column
|
|
1294
1294
|
* @returns 최소값 (또는 NULL)
|
|
1295
1295
|
*
|
|
1296
1296
|
* @example
|
|
@@ -1308,9 +1308,9 @@ const expr = {
|
|
|
1308
1308
|
});
|
|
1309
1309
|
},
|
|
1310
1310
|
//#endregion
|
|
1311
|
-
//#region ========== SELECT -
|
|
1311
|
+
//#region ========== SELECT - Other ==========
|
|
1312
1312
|
/**
|
|
1313
|
-
* 여러
|
|
1313
|
+
* 여러 value 중 최대값 (GREATEST)
|
|
1314
1314
|
*
|
|
1315
1315
|
* @param args - 비교할 값들
|
|
1316
1316
|
* @returns 최대값
|
|
@@ -1330,7 +1330,7 @@ const expr = {
|
|
|
1330
1330
|
});
|
|
1331
1331
|
},
|
|
1332
1332
|
/**
|
|
1333
|
-
* 여러
|
|
1333
|
+
* 여러 value 중 최소값 (LEAST)
|
|
1334
1334
|
*
|
|
1335
1335
|
* @param args - 비교할 값들
|
|
1336
1336
|
* @returns 최소값
|
|
@@ -1350,9 +1350,9 @@ const expr = {
|
|
|
1350
1350
|
});
|
|
1351
1351
|
},
|
|
1352
1352
|
/**
|
|
1353
|
-
*
|
|
1353
|
+
* row 번호 (ROW_NUMBER 없이 전체 행에 대한 순번)
|
|
1354
1354
|
*
|
|
1355
|
-
* @returns
|
|
1355
|
+
* @returns row 번호 (1부터 start)
|
|
1356
1356
|
*
|
|
1357
1357
|
* @example
|
|
1358
1358
|
* ```typescript
|
|
@@ -1368,15 +1368,15 @@ const expr = {
|
|
|
1368
1368
|
});
|
|
1369
1369
|
},
|
|
1370
1370
|
/**
|
|
1371
|
-
* 난수
|
|
1371
|
+
* 난수 Generate (RAND/RANDOM)
|
|
1372
1372
|
*
|
|
1373
|
-
* 0~1 사이의 난수
|
|
1373
|
+
* 0~1 사이의 난수 return. ORDER BY에서 랜덤 정렬용으로 주로 사용
|
|
1374
1374
|
*
|
|
1375
1375
|
* @returns 0~1 사이의 난수
|
|
1376
1376
|
*
|
|
1377
1377
|
* @example
|
|
1378
1378
|
* ```typescript
|
|
1379
|
-
* // 랜덤
|
|
1379
|
+
* // 랜덤 sorting
|
|
1380
1380
|
* db.user().orderBy(() => expr.random()).limit(10)
|
|
1381
1381
|
* ```
|
|
1382
1382
|
*/
|
|
@@ -1386,11 +1386,11 @@ const expr = {
|
|
|
1386
1386
|
});
|
|
1387
1387
|
},
|
|
1388
1388
|
/**
|
|
1389
|
-
*
|
|
1389
|
+
* type transformation (CAST)
|
|
1390
1390
|
*
|
|
1391
|
-
* @param source -
|
|
1392
|
-
* @param targetType - 대상
|
|
1393
|
-
* @returns
|
|
1391
|
+
* @param source - Transform할 expression
|
|
1392
|
+
* @param targetType - 대상 data type
|
|
1393
|
+
* @returns Transform된 expression
|
|
1394
1394
|
*
|
|
1395
1395
|
* @example
|
|
1396
1396
|
* ```typescript
|
|
@@ -1408,13 +1408,13 @@ const expr = {
|
|
|
1408
1408
|
});
|
|
1409
1409
|
},
|
|
1410
1410
|
/**
|
|
1411
|
-
* 스칼라
|
|
1411
|
+
* 스칼라 Subquery - SELECT 절에서 단일 value return Subquery
|
|
1412
1412
|
*
|
|
1413
|
-
*
|
|
1413
|
+
* Subquery는 반드시 단일 row, 단일 column을 반환해야 함
|
|
1414
1414
|
*
|
|
1415
|
-
* @param dataType -
|
|
1415
|
+
* @param dataType - Data type of the returned value
|
|
1416
1416
|
* @param queryable - 스칼라 값을 반환하는 Queryable
|
|
1417
|
-
* @returns
|
|
1417
|
+
* @returns Subquery result expression
|
|
1418
1418
|
*
|
|
1419
1419
|
* @example
|
|
1420
1420
|
* ```typescript
|
|
@@ -1439,12 +1439,12 @@ const expr = {
|
|
|
1439
1439
|
//#endregion
|
|
1440
1440
|
//#region ========== SELECT - Window Functions ==========
|
|
1441
1441
|
/**
|
|
1442
|
-
* ROW_NUMBER() - 파티션 내
|
|
1442
|
+
* ROW_NUMBER() - 파티션 내 row 번호
|
|
1443
1443
|
*
|
|
1444
|
-
* 각 파티션 내에서 1부터 시작하는
|
|
1444
|
+
* 각 파티션 내에서 1부터 시작하는 sequential 번호 부여
|
|
1445
1445
|
*
|
|
1446
|
-
* @param spec -
|
|
1447
|
-
* @returns
|
|
1446
|
+
* @param spec - Window spec (partitionBy, orderBy)
|
|
1447
|
+
* @returns row 번호 (1부터 start)
|
|
1448
1448
|
*
|
|
1449
1449
|
* @example
|
|
1450
1450
|
* ```typescript
|
|
@@ -1468,7 +1468,7 @@ const expr = {
|
|
|
1468
1468
|
/**
|
|
1469
1469
|
* RANK() - 파티션 내 순위 (동점 시 같은 순위, 다음 순위 건너뜀)
|
|
1470
1470
|
*
|
|
1471
|
-
* @param spec -
|
|
1471
|
+
* @param spec - Window spec (partitionBy, orderBy)
|
|
1472
1472
|
* @returns 순위 (동점 후 건너뜀: 1, 1, 3)
|
|
1473
1473
|
*
|
|
1474
1474
|
* @example
|
|
@@ -1491,7 +1491,7 @@ const expr = {
|
|
|
1491
1491
|
/**
|
|
1492
1492
|
* DENSE_RANK() - 파티션 내 밀집 순위 (동점 시 같은 순위, 다음 순위 유지)
|
|
1493
1493
|
*
|
|
1494
|
-
* @param spec -
|
|
1494
|
+
* @param spec - Window spec (partitionBy, orderBy)
|
|
1495
1495
|
* @returns 밀집 순위 (동점 후 연속: 1, 1, 2)
|
|
1496
1496
|
*
|
|
1497
1497
|
* @example
|
|
@@ -1512,15 +1512,15 @@ const expr = {
|
|
|
1512
1512
|
});
|
|
1513
1513
|
},
|
|
1514
1514
|
/**
|
|
1515
|
-
* NTILE(n) - 파티션을 n개 그룹으로
|
|
1515
|
+
* NTILE(n) - 파티션을 n개 그룹으로 split
|
|
1516
1516
|
*
|
|
1517
1517
|
* @param n - 분할할 그룹 수
|
|
1518
|
-
* @param spec -
|
|
1518
|
+
* @param spec - Window spec (partitionBy, orderBy)
|
|
1519
1519
|
* @returns 그룹 번호 (1 ~ n)
|
|
1520
1520
|
*
|
|
1521
1521
|
* @example
|
|
1522
1522
|
* ```typescript
|
|
1523
|
-
* // 상위 25%를 찾기 위한 사분위
|
|
1523
|
+
* // 상위 25%를 찾기 위한 사분위 split
|
|
1524
1524
|
* db.user().select((u) => ({
|
|
1525
1525
|
* name: u.name,
|
|
1526
1526
|
* quartile: expr.ntile(4, {
|
|
@@ -1537,12 +1537,12 @@ const expr = {
|
|
|
1537
1537
|
});
|
|
1538
1538
|
},
|
|
1539
1539
|
/**
|
|
1540
|
-
* LAG() - 이전 행의
|
|
1540
|
+
* LAG() - 이전 행의 value 참조
|
|
1541
1541
|
*
|
|
1542
|
-
* @param column -
|
|
1543
|
-
* @param spec -
|
|
1544
|
-
* @param options - offset (
|
|
1545
|
-
* @returns 이전 행의
|
|
1542
|
+
* @param column - column to reference
|
|
1543
|
+
* @param spec - Window spec (partitionBy, orderBy)
|
|
1544
|
+
* @param options - offset (Basic 1), default (이전 행이 없을 때 Default value)
|
|
1545
|
+
* @returns 이전 행의 value (또는 Default value/NULL)
|
|
1546
1546
|
*
|
|
1547
1547
|
* @example
|
|
1548
1548
|
* ```typescript
|
|
@@ -1569,12 +1569,12 @@ const expr = {
|
|
|
1569
1569
|
});
|
|
1570
1570
|
},
|
|
1571
1571
|
/**
|
|
1572
|
-
* LEAD() - 다음 행의
|
|
1572
|
+
* LEAD() - 다음 행의 value 참조
|
|
1573
1573
|
*
|
|
1574
|
-
* @param column -
|
|
1575
|
-
* @param spec -
|
|
1576
|
-
* @param options - offset (
|
|
1577
|
-
* @returns 다음 행의
|
|
1574
|
+
* @param column - column to reference
|
|
1575
|
+
* @param spec - Window spec (partitionBy, orderBy)
|
|
1576
|
+
* @param options - offset (Basic 1), default (다음 행이 없을 때 Default value)
|
|
1577
|
+
* @returns 다음 행의 value (또는 Default value/NULL)
|
|
1578
1578
|
*
|
|
1579
1579
|
* @example
|
|
1580
1580
|
* ```typescript
|
|
@@ -1601,11 +1601,11 @@ const expr = {
|
|
|
1601
1601
|
});
|
|
1602
1602
|
},
|
|
1603
1603
|
/**
|
|
1604
|
-
* FIRST_VALUE() - 파티션/프레임의 첫 번째
|
|
1604
|
+
* FIRST_VALUE() - 파티션/프레임의 첫 번째 value
|
|
1605
1605
|
*
|
|
1606
|
-
* @param column -
|
|
1607
|
-
* @param spec -
|
|
1608
|
-
* @returns 첫 번째
|
|
1606
|
+
* @param column - column to reference
|
|
1607
|
+
* @param spec - Window spec (partitionBy, orderBy)
|
|
1608
|
+
* @returns 첫 번째 value
|
|
1609
1609
|
*
|
|
1610
1610
|
* @example
|
|
1611
1611
|
* ```typescript
|
|
@@ -1626,11 +1626,11 @@ const expr = {
|
|
|
1626
1626
|
});
|
|
1627
1627
|
},
|
|
1628
1628
|
/**
|
|
1629
|
-
* LAST_VALUE() - 파티션/프레임의 마지막
|
|
1629
|
+
* LAST_VALUE() - 파티션/프레임의 마지막 value
|
|
1630
1630
|
*
|
|
1631
|
-
* @param column -
|
|
1632
|
-
* @param spec -
|
|
1633
|
-
* @returns 마지막
|
|
1631
|
+
* @param column - column to reference
|
|
1632
|
+
* @param spec - Window spec (partitionBy, orderBy)
|
|
1633
|
+
* @returns 마지막 value
|
|
1634
1634
|
*
|
|
1635
1635
|
* @example
|
|
1636
1636
|
* ```typescript
|
|
@@ -1651,11 +1651,11 @@ const expr = {
|
|
|
1651
1651
|
});
|
|
1652
1652
|
},
|
|
1653
1653
|
/**
|
|
1654
|
-
* SUM() OVER -
|
|
1654
|
+
* SUM() OVER - Window 합계
|
|
1655
1655
|
*
|
|
1656
|
-
* @param column - 합계를 구할
|
|
1657
|
-
* @param spec -
|
|
1658
|
-
* @returns
|
|
1656
|
+
* @param column - 합계를 구할 column
|
|
1657
|
+
* @param spec - Window spec (partitionBy, orderBy)
|
|
1658
|
+
* @returns Window 내 합계
|
|
1659
1659
|
*
|
|
1660
1660
|
* @example
|
|
1661
1661
|
* ```typescript
|
|
@@ -1677,15 +1677,15 @@ const expr = {
|
|
|
1677
1677
|
});
|
|
1678
1678
|
},
|
|
1679
1679
|
/**
|
|
1680
|
-
* AVG() OVER -
|
|
1680
|
+
* AVG() OVER - Window 평균
|
|
1681
1681
|
*
|
|
1682
|
-
* @param column - 평균을 구할
|
|
1683
|
-
* @param spec -
|
|
1684
|
-
* @returns
|
|
1682
|
+
* @param column - 평균을 구할 column
|
|
1683
|
+
* @param spec - Window spec (partitionBy, orderBy)
|
|
1684
|
+
* @returns Window 내 평균
|
|
1685
1685
|
*
|
|
1686
1686
|
* @example
|
|
1687
1687
|
* ```typescript
|
|
1688
|
-
* //
|
|
1688
|
+
* // move 평균
|
|
1689
1689
|
* db.stock().select((s) => ({
|
|
1690
1690
|
* ...s,
|
|
1691
1691
|
* movingAvg: expr.avgOver(s.price, {
|
|
@@ -1703,11 +1703,11 @@ const expr = {
|
|
|
1703
1703
|
});
|
|
1704
1704
|
},
|
|
1705
1705
|
/**
|
|
1706
|
-
* COUNT() OVER -
|
|
1706
|
+
* COUNT() OVER - Window 카운트
|
|
1707
1707
|
*
|
|
1708
|
-
* @param spec -
|
|
1709
|
-
* @param column - 카운트할
|
|
1710
|
-
* @returns
|
|
1708
|
+
* @param spec - Window spec (partitionBy, orderBy)
|
|
1709
|
+
* @param column - 카운트할 column (생략 시 전체 row 수)
|
|
1710
|
+
* @returns Window 내 row 수
|
|
1711
1711
|
*
|
|
1712
1712
|
* @example
|
|
1713
1713
|
* ```typescript
|
|
@@ -1727,11 +1727,11 @@ const expr = {
|
|
|
1727
1727
|
});
|
|
1728
1728
|
},
|
|
1729
1729
|
/**
|
|
1730
|
-
* MIN() OVER -
|
|
1730
|
+
* MIN() OVER - Window 최소값
|
|
1731
1731
|
*
|
|
1732
|
-
* @param column - 최소값을 구할
|
|
1733
|
-
* @param spec -
|
|
1734
|
-
* @returns
|
|
1732
|
+
* @param column - 최소값을 구할 column
|
|
1733
|
+
* @param spec - Window spec (partitionBy, orderBy)
|
|
1734
|
+
* @returns Window 내 최소값
|
|
1735
1735
|
*
|
|
1736
1736
|
* @example
|
|
1737
1737
|
* ```typescript
|
|
@@ -1751,11 +1751,11 @@ const expr = {
|
|
|
1751
1751
|
});
|
|
1752
1752
|
},
|
|
1753
1753
|
/**
|
|
1754
|
-
* MAX() OVER -
|
|
1754
|
+
* MAX() OVER - Window 최대값
|
|
1755
1755
|
*
|
|
1756
|
-
* @param column - 최대값을 구할
|
|
1757
|
-
* @param spec -
|
|
1758
|
-
* @returns
|
|
1756
|
+
* @param column - 최대값을 구할 column
|
|
1757
|
+
* @param spec - Window spec (partitionBy, orderBy)
|
|
1758
|
+
* @returns Window 내 최대값
|
|
1759
1759
|
*
|
|
1760
1760
|
* @example
|
|
1761
1761
|
* ```typescript
|
|
@@ -1777,9 +1777,9 @@ const expr = {
|
|
|
1777
1777
|
//#endregion
|
|
1778
1778
|
//#region ========== Helper ==========
|
|
1779
1779
|
/**
|
|
1780
|
-
* ExprInput을 Expr로
|
|
1780
|
+
* ExprInput을 Expr로 Transform (내부용)
|
|
1781
1781
|
*
|
|
1782
|
-
* @param value -
|
|
1782
|
+
* @param value - Transform할 value
|
|
1783
1783
|
* @returns Expr JSON AST
|
|
1784
1784
|
*/
|
|
1785
1785
|
toExpr(value) {
|
|
@@ -1817,7 +1817,7 @@ function createSwitchBuilder() {
|
|
|
1817
1817
|
}
|
|
1818
1818
|
const nonNullLiteral = allValues.find((v) => v != null);
|
|
1819
1819
|
if (nonNullLiteral == null) {
|
|
1820
|
-
throw new Error("switch
|
|
1820
|
+
throw new Error("At least one of switch's case/default must be non-null.");
|
|
1821
1821
|
}
|
|
1822
1822
|
return new ExprUnit(inferColumnPrimitiveStr(nonNullLiteral), {
|
|
1823
1823
|
type: "switch",
|
|
@@ -1836,7 +1836,7 @@ function toExpr(value) {
|
|
|
1836
1836
|
function findDataType(args) {
|
|
1837
1837
|
const exprUnit = args.find((a) => a instanceof ExprUnit);
|
|
1838
1838
|
if (!exprUnit) {
|
|
1839
|
-
throw new Error("
|
|
1839
|
+
throw new Error("At least one of the arguments must be an ExprUnit.");
|
|
1840
1840
|
}
|
|
1841
1841
|
return exprUnit.dataType;
|
|
1842
1842
|
}
|