@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/src/types/query-def.ts
CHANGED
|
@@ -1,513 +1,513 @@
|
|
|
1
|
-
import type { ColumnPrimitive, DataType } from "./column";
|
|
2
|
-
import type { Expr, WhereExpr } from "./expr";
|
|
3
|
-
|
|
4
|
-
//#region ========== 공통 ==========
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* DB
|
|
8
|
-
*
|
|
9
|
-
* DBMS별 네임스페이스:
|
|
10
|
-
* - MySQL: `database.name` (schema 무시)
|
|
11
|
-
* - MSSQL: `database.schema.name` (schema
|
|
12
|
-
* - PostgreSQL: `schema.name` (database는 connection용)
|
|
13
|
-
*/
|
|
14
|
-
export interface QueryDefObjectName {
|
|
15
|
-
database?: string;
|
|
16
|
-
schema?: string;
|
|
17
|
-
name: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
//#endregion
|
|
21
|
-
|
|
22
|
-
//#region ========== DML ==========
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* CUD
|
|
26
|
-
*
|
|
27
|
-
* INSERT/UPDATE/DELETE 후 반환값
|
|
28
|
-
*/
|
|
29
|
-
export interface CudOutputDef {
|
|
30
|
-
columns: string[];
|
|
31
|
-
pkColNames: string[];
|
|
32
|
-
aiColName?: string;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* SELECT
|
|
37
|
-
*
|
|
38
|
-
* @property type -
|
|
39
|
-
* @property from - FROM 절 (
|
|
40
|
-
* @property as -
|
|
41
|
-
* @property select - SELECT 절
|
|
42
|
-
* @property distinct - DISTINCT 여부
|
|
43
|
-
* @property top - TOP N (MSSQL)
|
|
44
|
-
* @property lock - 락 여부
|
|
45
|
-
* @property where - WHERE
|
|
46
|
-
* @property joins - JOIN
|
|
47
|
-
* @property orderBy - ORDER BY [
|
|
48
|
-
* @property limit - LIMIT [offset, count]
|
|
49
|
-
* @property groupBy - GROUP BY
|
|
50
|
-
* @property having - HAVING
|
|
51
|
-
* @property with -
|
|
52
|
-
*/
|
|
53
|
-
export interface SelectQueryDef {
|
|
54
|
-
type: "select";
|
|
55
|
-
from?: QueryDefObjectName | SelectQueryDef | SelectQueryDef[] | string;
|
|
56
|
-
as: string;
|
|
57
|
-
select?: Record<string, Expr>;
|
|
58
|
-
distinct?: boolean;
|
|
59
|
-
top?: number;
|
|
60
|
-
lock?: boolean;
|
|
61
|
-
where?: WhereExpr[];
|
|
62
|
-
joins?: SelectQueryDefJoin[];
|
|
63
|
-
orderBy?: [Expr, ("ASC" | "DESC")?][];
|
|
64
|
-
limit?: [number, number];
|
|
65
|
-
groupBy?: Expr[];
|
|
66
|
-
having?: WhereExpr[];
|
|
67
|
-
with?: { name: string; base: SelectQueryDef; recursive: SelectQueryDef };
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* JOIN
|
|
72
|
-
*
|
|
73
|
-
* SelectQueryDef 확장 + isSingle
|
|
74
|
-
*/
|
|
75
|
-
export interface SelectQueryDefJoin extends SelectQueryDef {
|
|
76
|
-
/** 단일
|
|
77
|
-
isSingle?: boolean;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
/**
|
|
81
|
-
* INSERT
|
|
82
|
-
*
|
|
83
|
-
* @property records -
|
|
84
|
-
* @property overrideIdentity - IDENTITY_INSERT
|
|
85
|
-
* @property output - OUTPUT 절
|
|
86
|
-
*/
|
|
87
|
-
export interface InsertQueryDef {
|
|
88
|
-
type: "insert";
|
|
89
|
-
table: QueryDefObjectName;
|
|
90
|
-
records: Record<string, ColumnPrimitive>[];
|
|
91
|
-
overrideIdentity?: boolean;
|
|
92
|
-
output?: CudOutputDef;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* 조건부 INSERT
|
|
97
|
-
*
|
|
98
|
-
* 존재하지 않는 경우에만 삽입
|
|
99
|
-
*/
|
|
100
|
-
export interface InsertIfNotExistsQueryDef {
|
|
101
|
-
type: "insertIfNotExists";
|
|
102
|
-
table: QueryDefObjectName;
|
|
103
|
-
record: Record<string, ColumnPrimitive>;
|
|
104
|
-
existsSelectQuery: SelectQueryDef;
|
|
105
|
-
overrideIdentity?: boolean;
|
|
106
|
-
output?: CudOutputDef;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* INSERT INTO SELECT
|
|
111
|
-
*
|
|
112
|
-
*
|
|
113
|
-
*/
|
|
114
|
-
export interface InsertIntoQueryDef {
|
|
115
|
-
type: "insertInto";
|
|
116
|
-
table: QueryDefObjectName;
|
|
117
|
-
recordsSelectQuery: SelectQueryDef;
|
|
118
|
-
overrideIdentity?: boolean;
|
|
119
|
-
output?: CudOutputDef;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* UPDATE
|
|
124
|
-
*
|
|
125
|
-
* @property record -
|
|
126
|
-
* @property joins - UPDATE JOIN (지원 시)
|
|
127
|
-
*/
|
|
128
|
-
export interface UpdateQueryDef {
|
|
129
|
-
type: "update";
|
|
130
|
-
table: QueryDefObjectName;
|
|
131
|
-
as: string;
|
|
132
|
-
record: Record<string, Expr>;
|
|
133
|
-
top?: number;
|
|
134
|
-
where?: WhereExpr[];
|
|
135
|
-
joins?: SelectQueryDefJoin[];
|
|
136
|
-
limit?: [number, number];
|
|
137
|
-
output?: CudOutputDef;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* DELETE
|
|
142
|
-
*/
|
|
143
|
-
export interface DeleteQueryDef {
|
|
144
|
-
type: "delete";
|
|
145
|
-
table: QueryDefObjectName;
|
|
146
|
-
as: string;
|
|
147
|
-
top?: number;
|
|
148
|
-
where?: WhereExpr[];
|
|
149
|
-
joins?: SelectQueryDefJoin[];
|
|
150
|
-
limit?: [number, number];
|
|
151
|
-
output?: CudOutputDef;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* UPSERT
|
|
156
|
-
*
|
|
157
|
-
* INSERT or UPDATE (MERGE
|
|
158
|
-
*/
|
|
159
|
-
export interface UpsertQueryDef {
|
|
160
|
-
type: "upsert";
|
|
161
|
-
table: QueryDefObjectName;
|
|
162
|
-
existsSelectQuery: SelectQueryDef;
|
|
163
|
-
insertRecord: Record<string, Expr>;
|
|
164
|
-
updateRecord: Record<string, Expr>;
|
|
165
|
-
overrideIdentity?: boolean;
|
|
166
|
-
output?: CudOutputDef;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
//#endregion
|
|
170
|
-
|
|
171
|
-
//#region ========== Utils ==========
|
|
172
|
-
|
|
173
|
-
/** FK
|
|
174
|
-
export interface SwitchFkQueryDef {
|
|
175
|
-
type: "switchFk";
|
|
176
|
-
table: QueryDefObjectName;
|
|
177
|
-
switch: "on" | "off";
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
//#endregion
|
|
181
|
-
|
|
182
|
-
//#region ========== DDL - Schema ==========
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
export interface ClearSchemaQueryDef {
|
|
186
|
-
type: "clearSchema";
|
|
187
|
-
database: string;
|
|
188
|
-
schema?: string;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
//#endregion
|
|
192
|
-
|
|
193
|
-
//#region ========== DDL - Table ==========
|
|
194
|
-
|
|
195
|
-
/** CREATE TABLE */
|
|
196
|
-
export interface CreateTableQueryDef {
|
|
197
|
-
type: "createTable";
|
|
198
|
-
table: QueryDefObjectName;
|
|
199
|
-
columns: {
|
|
200
|
-
name: string;
|
|
201
|
-
dataType: DataType;
|
|
202
|
-
autoIncrement?: boolean;
|
|
203
|
-
nullable?: boolean;
|
|
204
|
-
default?: ColumnPrimitive;
|
|
205
|
-
}[];
|
|
206
|
-
primaryKey?: string[];
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
/** DROP TABLE */
|
|
210
|
-
export interface DropTableQueryDef {
|
|
211
|
-
type: "dropTable";
|
|
212
|
-
table: QueryDefObjectName;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
/** RENAME TABLE */
|
|
216
|
-
export interface RenameTableQueryDef {
|
|
217
|
-
type: "renameTable";
|
|
218
|
-
table: QueryDefObjectName;
|
|
219
|
-
newName: string;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/** TRUNCATE TABLE */
|
|
223
|
-
export interface TruncateQueryDef {
|
|
224
|
-
type: "truncate";
|
|
225
|
-
table: QueryDefObjectName;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
//#endregion
|
|
229
|
-
|
|
230
|
-
//#region ========== DDL - Column ==========
|
|
231
|
-
|
|
232
|
-
/** ADD COLUMN */
|
|
233
|
-
export interface AddColumnQueryDef {
|
|
234
|
-
type: "addColumn";
|
|
235
|
-
table: QueryDefObjectName;
|
|
236
|
-
column: {
|
|
237
|
-
name: string;
|
|
238
|
-
dataType: DataType;
|
|
239
|
-
autoIncrement?: boolean;
|
|
240
|
-
nullable?: boolean;
|
|
241
|
-
default?: ColumnPrimitive;
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
/** DROP COLUMN */
|
|
246
|
-
export interface DropColumnQueryDef {
|
|
247
|
-
type: "dropColumn";
|
|
248
|
-
table: QueryDefObjectName;
|
|
249
|
-
column: string;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
/** MODIFY COLUMN (
|
|
253
|
-
export interface ModifyColumnQueryDef {
|
|
254
|
-
type: "modifyColumn";
|
|
255
|
-
table: QueryDefObjectName;
|
|
256
|
-
column: {
|
|
257
|
-
name: string;
|
|
258
|
-
dataType: DataType;
|
|
259
|
-
autoIncrement?: boolean;
|
|
260
|
-
nullable?: boolean;
|
|
261
|
-
default?: ColumnPrimitive;
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
/** RENAME COLUMN */
|
|
266
|
-
export interface RenameColumnQueryDef {
|
|
267
|
-
type: "renameColumn";
|
|
268
|
-
table: QueryDefObjectName;
|
|
269
|
-
column: string;
|
|
270
|
-
newName: string;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
//#endregion
|
|
274
|
-
|
|
275
|
-
//#region ========== DDL - PK/FK/Index ==========
|
|
276
|
-
|
|
277
|
-
/** DROP PRIMARY KEY */
|
|
278
|
-
export interface DropPkQueryDef {
|
|
279
|
-
type: "dropPk";
|
|
280
|
-
table: QueryDefObjectName;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
/** ADD PRIMARY KEY */
|
|
284
|
-
export interface AddPkQueryDef {
|
|
285
|
-
type: "addPk";
|
|
286
|
-
table: QueryDefObjectName;
|
|
287
|
-
columns: string[];
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
/** ADD FOREIGN KEY */
|
|
291
|
-
export interface AddFkQueryDef {
|
|
292
|
-
type: "addFk";
|
|
293
|
-
table: QueryDefObjectName;
|
|
294
|
-
foreignKey: {
|
|
295
|
-
name: string;
|
|
296
|
-
fkColumns: string[];
|
|
297
|
-
targetTable: QueryDefObjectName;
|
|
298
|
-
targetPkColumns: string[];
|
|
299
|
-
};
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/** DROP FOREIGN KEY */
|
|
303
|
-
export interface DropFkQueryDef {
|
|
304
|
-
type: "dropFk";
|
|
305
|
-
table: QueryDefObjectName;
|
|
306
|
-
foreignKey: string;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
/** CREATE INDEX */
|
|
310
|
-
export interface AddIdxQueryDef {
|
|
311
|
-
type: "addIdx";
|
|
312
|
-
table: QueryDefObjectName;
|
|
313
|
-
index: {
|
|
314
|
-
name: string;
|
|
315
|
-
columns: { name: string; orderBy: "ASC" | "DESC" }[];
|
|
316
|
-
unique?: boolean;
|
|
317
|
-
};
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/** DROP INDEX */
|
|
321
|
-
export interface DropIdxQueryDef {
|
|
322
|
-
type: "dropIdx";
|
|
323
|
-
table: QueryDefObjectName;
|
|
324
|
-
index: string;
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
//#endregion
|
|
328
|
-
|
|
329
|
-
//#region ========== DDL - View/Procedure ==========
|
|
330
|
-
|
|
331
|
-
/** CREATE VIEW */
|
|
332
|
-
export interface CreateViewQueryDef {
|
|
333
|
-
type: "createView";
|
|
334
|
-
view: QueryDefObjectName;
|
|
335
|
-
queryDef: SelectQueryDef;
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
/** DROP VIEW */
|
|
339
|
-
export interface DropViewQueryDef {
|
|
340
|
-
type: "dropView";
|
|
341
|
-
view: QueryDefObjectName;
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
/** CREATE PROCEDURE */
|
|
345
|
-
export interface CreateProcQueryDef {
|
|
346
|
-
type: "createProc";
|
|
347
|
-
procedure: QueryDefObjectName;
|
|
348
|
-
params?: Array<{
|
|
349
|
-
name: string;
|
|
350
|
-
dataType: DataType;
|
|
351
|
-
nullable?: boolean;
|
|
352
|
-
default?: unknown;
|
|
353
|
-
}>;
|
|
354
|
-
returns?: Array<{
|
|
355
|
-
name: string;
|
|
356
|
-
dataType: DataType;
|
|
357
|
-
nullable?: boolean;
|
|
358
|
-
}>;
|
|
359
|
-
query: string;
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
/** DROP PROCEDURE */
|
|
363
|
-
export interface DropProcQueryDef {
|
|
364
|
-
type: "dropProc";
|
|
365
|
-
procedure: QueryDefObjectName;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
/** EXECUTE PROCEDURE */
|
|
369
|
-
export interface ExecProcQueryDef {
|
|
370
|
-
type: "execProc";
|
|
371
|
-
procedure: QueryDefObjectName;
|
|
372
|
-
params: Record<string, Expr> | undefined;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
//#endregion
|
|
376
|
-
|
|
377
|
-
//#region ========== Meta ==========
|
|
378
|
-
|
|
379
|
-
/**
|
|
380
|
-
export interface SchemaExistsQueryDef {
|
|
381
|
-
type: "schemaExists";
|
|
382
|
-
database: string;
|
|
383
|
-
schema?: string;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
//#endregion
|
|
387
|
-
|
|
388
|
-
//#region ========== DDL
|
|
389
|
-
|
|
390
|
-
/**
|
|
391
|
-
* DDL QueryDef
|
|
392
|
-
*
|
|
393
|
-
* @remarks
|
|
394
|
-
* switchFk는 DDL이 아니므로
|
|
395
|
-
*/
|
|
396
|
-
type DdlQueryDef =
|
|
397
|
-
| ClearSchemaQueryDef
|
|
398
|
-
| CreateTableQueryDef
|
|
399
|
-
| DropTableQueryDef
|
|
400
|
-
| RenameTableQueryDef
|
|
401
|
-
| TruncateQueryDef
|
|
402
|
-
| AddColumnQueryDef
|
|
403
|
-
| DropColumnQueryDef
|
|
404
|
-
| ModifyColumnQueryDef
|
|
405
|
-
| RenameColumnQueryDef
|
|
406
|
-
| DropPkQueryDef
|
|
407
|
-
| AddPkQueryDef
|
|
408
|
-
| AddFkQueryDef
|
|
409
|
-
| DropFkQueryDef
|
|
410
|
-
| AddIdxQueryDef
|
|
411
|
-
| DropIdxQueryDef
|
|
412
|
-
| CreateViewQueryDef
|
|
413
|
-
| DropViewQueryDef
|
|
414
|
-
| CreateProcQueryDef
|
|
415
|
-
| DropProcQueryDef;
|
|
416
|
-
|
|
417
|
-
/**
|
|
418
|
-
* DDL (Data Definition Language)
|
|
419
|
-
*
|
|
420
|
-
*
|
|
421
|
-
* satisfies 키워드로 DdlQueryDef와의
|
|
422
|
-
*
|
|
423
|
-
* @remarks
|
|
424
|
-
* switchFk는 DDL이 아니므로
|
|
425
|
-
*/
|
|
426
|
-
export const DDL_TYPES = [
|
|
427
|
-
"clearSchema",
|
|
428
|
-
"createTable",
|
|
429
|
-
"dropTable",
|
|
430
|
-
"renameTable",
|
|
431
|
-
"truncate",
|
|
432
|
-
"addColumn",
|
|
433
|
-
"dropColumn",
|
|
434
|
-
"modifyColumn",
|
|
435
|
-
"renameColumn",
|
|
436
|
-
"dropPk",
|
|
437
|
-
"addPk",
|
|
438
|
-
"addFk",
|
|
439
|
-
"dropFk",
|
|
440
|
-
"addIdx",
|
|
441
|
-
"dropIdx",
|
|
442
|
-
"createView",
|
|
443
|
-
"dropView",
|
|
444
|
-
"createProc",
|
|
445
|
-
"dropProc",
|
|
446
|
-
] as const satisfies readonly DdlQueryDef["type"][];
|
|
447
|
-
|
|
448
|
-
/** DDL
|
|
449
|
-
export type DdlType = (typeof DDL_TYPES)[number];
|
|
450
|
-
|
|
451
|
-
//#endregion
|
|
452
|
-
|
|
453
|
-
//#region ========== 통합 Union Type ==========
|
|
454
|
-
|
|
455
|
-
/**
|
|
456
|
-
* 모든
|
|
457
|
-
*
|
|
458
|
-
* DML (SELECT/INSERT/UPDATE/DELETE/UPSERT) +
|
|
459
|
-
* DDL (Table/Column/PK/FK/Index/View/Procedure) +
|
|
460
|
-
* Utils (SwitchFk) + Meta (SchemaExists)
|
|
461
|
-
*
|
|
462
|
-
* @see {@link SelectQueryDef} SELECT
|
|
463
|
-
* @see {@link InsertQueryDef} INSERT
|
|
464
|
-
* @see {@link UpdateQueryDef} UPDATE
|
|
465
|
-
* @see {@link DeleteQueryDef} DELETE
|
|
466
|
-
*/
|
|
467
|
-
export type QueryDef =
|
|
468
|
-
// DML
|
|
469
|
-
| SelectQueryDef
|
|
470
|
-
| InsertQueryDef
|
|
471
|
-
| InsertIfNotExistsQueryDef
|
|
472
|
-
| InsertIntoQueryDef
|
|
473
|
-
| UpdateQueryDef
|
|
474
|
-
| DeleteQueryDef
|
|
475
|
-
| UpsertQueryDef
|
|
476
|
-
|
|
477
|
-
// DDL - Schema
|
|
478
|
-
| ClearSchemaQueryDef
|
|
479
|
-
|
|
480
|
-
// DDL - Table
|
|
481
|
-
| CreateTableQueryDef
|
|
482
|
-
| DropTableQueryDef
|
|
483
|
-
| RenameTableQueryDef
|
|
484
|
-
| TruncateQueryDef
|
|
485
|
-
|
|
486
|
-
// DDL - Column
|
|
487
|
-
| AddColumnQueryDef
|
|
488
|
-
| DropColumnQueryDef
|
|
489
|
-
| ModifyColumnQueryDef
|
|
490
|
-
| RenameColumnQueryDef
|
|
491
|
-
|
|
492
|
-
// DDL - PK/FK/Index
|
|
493
|
-
| DropPkQueryDef
|
|
494
|
-
| AddPkQueryDef
|
|
495
|
-
| AddFkQueryDef
|
|
496
|
-
| DropFkQueryDef
|
|
497
|
-
| AddIdxQueryDef
|
|
498
|
-
| DropIdxQueryDef
|
|
499
|
-
|
|
500
|
-
// DDL - View/Procedure
|
|
501
|
-
| CreateViewQueryDef
|
|
502
|
-
| DropViewQueryDef
|
|
503
|
-
| CreateProcQueryDef
|
|
504
|
-
| DropProcQueryDef
|
|
505
|
-
| ExecProcQueryDef
|
|
506
|
-
|
|
507
|
-
// Utils
|
|
508
|
-
| SwitchFkQueryDef
|
|
509
|
-
|
|
510
|
-
// Meta
|
|
511
|
-
| SchemaExistsQueryDef;
|
|
512
|
-
|
|
513
|
-
//#endregion
|
|
1
|
+
import type { ColumnPrimitive, DataType } from "./column";
|
|
2
|
+
import type { Expr, WhereExpr } from "./expr";
|
|
3
|
+
|
|
4
|
+
//#region ========== 공통 ==========
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* DB object 이름 (table, View, Procedure 등)
|
|
8
|
+
*
|
|
9
|
+
* DBMS별 네임스페이스:
|
|
10
|
+
* - MySQL: `database.name` (schema 무시)
|
|
11
|
+
* - MSSQL: `database.schema.name` (schema Default value: dbo)
|
|
12
|
+
* - PostgreSQL: `schema.name` (database는 connection용)
|
|
13
|
+
*/
|
|
14
|
+
export interface QueryDefObjectName {
|
|
15
|
+
database?: string;
|
|
16
|
+
schema?: string;
|
|
17
|
+
name: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
|
|
22
|
+
//#region ========== DML ==========
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* CUD query의 OUTPUT 절 definition
|
|
26
|
+
*
|
|
27
|
+
* INSERT/UPDATE/DELETE 후 반환값 definition
|
|
28
|
+
*/
|
|
29
|
+
export interface CudOutputDef {
|
|
30
|
+
columns: string[];
|
|
31
|
+
pkColNames: string[];
|
|
32
|
+
aiColName?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* SELECT Query definition
|
|
37
|
+
*
|
|
38
|
+
* @property type - Query type ("select")
|
|
39
|
+
* @property from - FROM 절 (table/Subquery)
|
|
40
|
+
* @property as - Table 별칭
|
|
41
|
+
* @property select - SELECT 절 column Mapping
|
|
42
|
+
* @property distinct - DISTINCT 여부
|
|
43
|
+
* @property top - TOP N (MSSQL)
|
|
44
|
+
* @property lock - 락 여부
|
|
45
|
+
* @property where - WHERE condition array
|
|
46
|
+
* @property joins - JOIN definition array
|
|
47
|
+
* @property orderBy - ORDER BY [column, 방향] array
|
|
48
|
+
* @property limit - LIMIT [offset, count]
|
|
49
|
+
* @property groupBy - GROUP BY expression array
|
|
50
|
+
* @property having - HAVING condition array
|
|
51
|
+
* @property with - recursive CTE definition
|
|
52
|
+
*/
|
|
53
|
+
export interface SelectQueryDef {
|
|
54
|
+
type: "select";
|
|
55
|
+
from?: QueryDefObjectName | SelectQueryDef | SelectQueryDef[] | string;
|
|
56
|
+
as: string;
|
|
57
|
+
select?: Record<string, Expr>;
|
|
58
|
+
distinct?: boolean;
|
|
59
|
+
top?: number;
|
|
60
|
+
lock?: boolean;
|
|
61
|
+
where?: WhereExpr[];
|
|
62
|
+
joins?: SelectQueryDefJoin[];
|
|
63
|
+
orderBy?: [Expr, ("ASC" | "DESC")?][];
|
|
64
|
+
limit?: [number, number];
|
|
65
|
+
groupBy?: Expr[];
|
|
66
|
+
having?: WhereExpr[];
|
|
67
|
+
with?: { name: string; base: SelectQueryDef; recursive: SelectQueryDef };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* JOIN Query definition
|
|
72
|
+
*
|
|
73
|
+
* SelectQueryDef 확장 + isSingle flag
|
|
74
|
+
*/
|
|
75
|
+
export interface SelectQueryDefJoin extends SelectQueryDef {
|
|
76
|
+
/** 단일 result 여부 (1:1 relationship) */
|
|
77
|
+
isSingle?: boolean;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* INSERT Query definition
|
|
82
|
+
*
|
|
83
|
+
* @property records - Insert할 레코드 array
|
|
84
|
+
* @property overrideIdentity - IDENTITY_INSERT Enable 여부
|
|
85
|
+
* @property output - OUTPUT 절 definition
|
|
86
|
+
*/
|
|
87
|
+
export interface InsertQueryDef {
|
|
88
|
+
type: "insert";
|
|
89
|
+
table: QueryDefObjectName;
|
|
90
|
+
records: Record<string, ColumnPrimitive>[];
|
|
91
|
+
overrideIdentity?: boolean;
|
|
92
|
+
output?: CudOutputDef;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* 조건부 INSERT Query definition
|
|
97
|
+
*
|
|
98
|
+
* 존재하지 않는 경우에만 삽입
|
|
99
|
+
*/
|
|
100
|
+
export interface InsertIfNotExistsQueryDef {
|
|
101
|
+
type: "insertIfNotExists";
|
|
102
|
+
table: QueryDefObjectName;
|
|
103
|
+
record: Record<string, ColumnPrimitive>;
|
|
104
|
+
existsSelectQuery: SelectQueryDef;
|
|
105
|
+
overrideIdentity?: boolean;
|
|
106
|
+
output?: CudOutputDef;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* INSERT INTO SELECT Query definition
|
|
111
|
+
*
|
|
112
|
+
* Subquery 결과를 삽입
|
|
113
|
+
*/
|
|
114
|
+
export interface InsertIntoQueryDef {
|
|
115
|
+
type: "insertInto";
|
|
116
|
+
table: QueryDefObjectName;
|
|
117
|
+
recordsSelectQuery: SelectQueryDef;
|
|
118
|
+
overrideIdentity?: boolean;
|
|
119
|
+
output?: CudOutputDef;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* UPDATE Query definition
|
|
124
|
+
*
|
|
125
|
+
* @property record - Update할 column/value Mapping
|
|
126
|
+
* @property joins - UPDATE JOIN (지원 시)
|
|
127
|
+
*/
|
|
128
|
+
export interface UpdateQueryDef {
|
|
129
|
+
type: "update";
|
|
130
|
+
table: QueryDefObjectName;
|
|
131
|
+
as: string;
|
|
132
|
+
record: Record<string, Expr>;
|
|
133
|
+
top?: number;
|
|
134
|
+
where?: WhereExpr[];
|
|
135
|
+
joins?: SelectQueryDefJoin[];
|
|
136
|
+
limit?: [number, number];
|
|
137
|
+
output?: CudOutputDef;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* DELETE Query definition
|
|
142
|
+
*/
|
|
143
|
+
export interface DeleteQueryDef {
|
|
144
|
+
type: "delete";
|
|
145
|
+
table: QueryDefObjectName;
|
|
146
|
+
as: string;
|
|
147
|
+
top?: number;
|
|
148
|
+
where?: WhereExpr[];
|
|
149
|
+
joins?: SelectQueryDefJoin[];
|
|
150
|
+
limit?: [number, number];
|
|
151
|
+
output?: CudOutputDef;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* UPSERT Query definition
|
|
156
|
+
*
|
|
157
|
+
* INSERT or UPDATE (MERGE Pattern)
|
|
158
|
+
*/
|
|
159
|
+
export interface UpsertQueryDef {
|
|
160
|
+
type: "upsert";
|
|
161
|
+
table: QueryDefObjectName;
|
|
162
|
+
existsSelectQuery: SelectQueryDef;
|
|
163
|
+
insertRecord: Record<string, Expr>;
|
|
164
|
+
updateRecord: Record<string, Expr>;
|
|
165
|
+
overrideIdentity?: boolean;
|
|
166
|
+
output?: CudOutputDef;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
//#endregion
|
|
170
|
+
|
|
171
|
+
//#region ========== Utils ==========
|
|
172
|
+
|
|
173
|
+
/** FK constraint Enable/Disable */
|
|
174
|
+
export interface SwitchFkQueryDef {
|
|
175
|
+
type: "switchFk";
|
|
176
|
+
table: QueryDefObjectName;
|
|
177
|
+
switch: "on" | "off";
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
//#endregion
|
|
181
|
+
|
|
182
|
+
//#region ========== DDL - Schema ==========
|
|
183
|
+
|
|
184
|
+
/** Clear schema (모든 object Delete) */
|
|
185
|
+
export interface ClearSchemaQueryDef {
|
|
186
|
+
type: "clearSchema";
|
|
187
|
+
database: string;
|
|
188
|
+
schema?: string;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
//#endregion
|
|
192
|
+
|
|
193
|
+
//#region ========== DDL - Table ==========
|
|
194
|
+
|
|
195
|
+
/** CREATE TABLE */
|
|
196
|
+
export interface CreateTableQueryDef {
|
|
197
|
+
type: "createTable";
|
|
198
|
+
table: QueryDefObjectName;
|
|
199
|
+
columns: {
|
|
200
|
+
name: string;
|
|
201
|
+
dataType: DataType;
|
|
202
|
+
autoIncrement?: boolean;
|
|
203
|
+
nullable?: boolean;
|
|
204
|
+
default?: ColumnPrimitive;
|
|
205
|
+
}[];
|
|
206
|
+
primaryKey?: string[];
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/** DROP TABLE */
|
|
210
|
+
export interface DropTableQueryDef {
|
|
211
|
+
type: "dropTable";
|
|
212
|
+
table: QueryDefObjectName;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/** RENAME TABLE */
|
|
216
|
+
export interface RenameTableQueryDef {
|
|
217
|
+
type: "renameTable";
|
|
218
|
+
table: QueryDefObjectName;
|
|
219
|
+
newName: string;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/** TRUNCATE TABLE */
|
|
223
|
+
export interface TruncateQueryDef {
|
|
224
|
+
type: "truncate";
|
|
225
|
+
table: QueryDefObjectName;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
//#endregion
|
|
229
|
+
|
|
230
|
+
//#region ========== DDL - Column ==========
|
|
231
|
+
|
|
232
|
+
/** ADD COLUMN */
|
|
233
|
+
export interface AddColumnQueryDef {
|
|
234
|
+
type: "addColumn";
|
|
235
|
+
table: QueryDefObjectName;
|
|
236
|
+
column: {
|
|
237
|
+
name: string;
|
|
238
|
+
dataType: DataType;
|
|
239
|
+
autoIncrement?: boolean;
|
|
240
|
+
nullable?: boolean;
|
|
241
|
+
default?: ColumnPrimitive;
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
/** DROP COLUMN */
|
|
246
|
+
export interface DropColumnQueryDef {
|
|
247
|
+
type: "dropColumn";
|
|
248
|
+
table: QueryDefObjectName;
|
|
249
|
+
column: string;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/** MODIFY COLUMN (type/property Change) */
|
|
253
|
+
export interface ModifyColumnQueryDef {
|
|
254
|
+
type: "modifyColumn";
|
|
255
|
+
table: QueryDefObjectName;
|
|
256
|
+
column: {
|
|
257
|
+
name: string;
|
|
258
|
+
dataType: DataType;
|
|
259
|
+
autoIncrement?: boolean;
|
|
260
|
+
nullable?: boolean;
|
|
261
|
+
default?: ColumnPrimitive;
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/** RENAME COLUMN */
|
|
266
|
+
export interface RenameColumnQueryDef {
|
|
267
|
+
type: "renameColumn";
|
|
268
|
+
table: QueryDefObjectName;
|
|
269
|
+
column: string;
|
|
270
|
+
newName: string;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
//#endregion
|
|
274
|
+
|
|
275
|
+
//#region ========== DDL - PK/FK/Index ==========
|
|
276
|
+
|
|
277
|
+
/** DROP PRIMARY KEY */
|
|
278
|
+
export interface DropPkQueryDef {
|
|
279
|
+
type: "dropPk";
|
|
280
|
+
table: QueryDefObjectName;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/** ADD PRIMARY KEY */
|
|
284
|
+
export interface AddPkQueryDef {
|
|
285
|
+
type: "addPk";
|
|
286
|
+
table: QueryDefObjectName;
|
|
287
|
+
columns: string[];
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/** ADD FOREIGN KEY */
|
|
291
|
+
export interface AddFkQueryDef {
|
|
292
|
+
type: "addFk";
|
|
293
|
+
table: QueryDefObjectName;
|
|
294
|
+
foreignKey: {
|
|
295
|
+
name: string;
|
|
296
|
+
fkColumns: string[];
|
|
297
|
+
targetTable: QueryDefObjectName;
|
|
298
|
+
targetPkColumns: string[];
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/** DROP FOREIGN KEY */
|
|
303
|
+
export interface DropFkQueryDef {
|
|
304
|
+
type: "dropFk";
|
|
305
|
+
table: QueryDefObjectName;
|
|
306
|
+
foreignKey: string;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/** CREATE INDEX */
|
|
310
|
+
export interface AddIdxQueryDef {
|
|
311
|
+
type: "addIdx";
|
|
312
|
+
table: QueryDefObjectName;
|
|
313
|
+
index: {
|
|
314
|
+
name: string;
|
|
315
|
+
columns: { name: string; orderBy: "ASC" | "DESC" }[];
|
|
316
|
+
unique?: boolean;
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/** DROP INDEX */
|
|
321
|
+
export interface DropIdxQueryDef {
|
|
322
|
+
type: "dropIdx";
|
|
323
|
+
table: QueryDefObjectName;
|
|
324
|
+
index: string;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
//#endregion
|
|
328
|
+
|
|
329
|
+
//#region ========== DDL - View/Procedure ==========
|
|
330
|
+
|
|
331
|
+
/** CREATE VIEW */
|
|
332
|
+
export interface CreateViewQueryDef {
|
|
333
|
+
type: "createView";
|
|
334
|
+
view: QueryDefObjectName;
|
|
335
|
+
queryDef: SelectQueryDef;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/** DROP VIEW */
|
|
339
|
+
export interface DropViewQueryDef {
|
|
340
|
+
type: "dropView";
|
|
341
|
+
view: QueryDefObjectName;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/** CREATE PROCEDURE */
|
|
345
|
+
export interface CreateProcQueryDef {
|
|
346
|
+
type: "createProc";
|
|
347
|
+
procedure: QueryDefObjectName;
|
|
348
|
+
params?: Array<{
|
|
349
|
+
name: string;
|
|
350
|
+
dataType: DataType;
|
|
351
|
+
nullable?: boolean;
|
|
352
|
+
default?: unknown;
|
|
353
|
+
}>;
|
|
354
|
+
returns?: Array<{
|
|
355
|
+
name: string;
|
|
356
|
+
dataType: DataType;
|
|
357
|
+
nullable?: boolean;
|
|
358
|
+
}>;
|
|
359
|
+
query: string;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
/** DROP PROCEDURE */
|
|
363
|
+
export interface DropProcQueryDef {
|
|
364
|
+
type: "dropProc";
|
|
365
|
+
procedure: QueryDefObjectName;
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/** EXECUTE PROCEDURE */
|
|
369
|
+
export interface ExecProcQueryDef {
|
|
370
|
+
type: "execProc";
|
|
371
|
+
procedure: QueryDefObjectName;
|
|
372
|
+
params: Record<string, Expr> | undefined;
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
//#endregion
|
|
376
|
+
|
|
377
|
+
//#region ========== Meta ==========
|
|
378
|
+
|
|
379
|
+
/** Check schema existence */
|
|
380
|
+
export interface SchemaExistsQueryDef {
|
|
381
|
+
type: "schemaExists";
|
|
382
|
+
database: string;
|
|
383
|
+
schema?: string;
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
//#endregion
|
|
387
|
+
|
|
388
|
+
//#region ========== DDL type 상수 ==========
|
|
389
|
+
|
|
390
|
+
/**
|
|
391
|
+
* DDL QueryDef union (컴파일 타임 Validation용)
|
|
392
|
+
*
|
|
393
|
+
* @remarks
|
|
394
|
+
* switchFk는 DDL이 아니므로 exclude (transaction 내 사용 가능)
|
|
395
|
+
*/
|
|
396
|
+
type DdlQueryDef =
|
|
397
|
+
| ClearSchemaQueryDef
|
|
398
|
+
| CreateTableQueryDef
|
|
399
|
+
| DropTableQueryDef
|
|
400
|
+
| RenameTableQueryDef
|
|
401
|
+
| TruncateQueryDef
|
|
402
|
+
| AddColumnQueryDef
|
|
403
|
+
| DropColumnQueryDef
|
|
404
|
+
| ModifyColumnQueryDef
|
|
405
|
+
| RenameColumnQueryDef
|
|
406
|
+
| DropPkQueryDef
|
|
407
|
+
| AddPkQueryDef
|
|
408
|
+
| AddFkQueryDef
|
|
409
|
+
| DropFkQueryDef
|
|
410
|
+
| AddIdxQueryDef
|
|
411
|
+
| DropIdxQueryDef
|
|
412
|
+
| CreateViewQueryDef
|
|
413
|
+
| DropViewQueryDef
|
|
414
|
+
| CreateProcQueryDef
|
|
415
|
+
| DropProcQueryDef;
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* DDL (Data Definition Language) type 상수
|
|
419
|
+
*
|
|
420
|
+
* Transaction 내 DDL 차단 및 DDL type Validation에 사용
|
|
421
|
+
* satisfies 키워드로 DdlQueryDef와의 synchronous화를 컴파일 타임에 Validation
|
|
422
|
+
*
|
|
423
|
+
* @remarks
|
|
424
|
+
* switchFk는 DDL이 아니므로 exclude (transaction 내 사용 가능)
|
|
425
|
+
*/
|
|
426
|
+
export const DDL_TYPES = [
|
|
427
|
+
"clearSchema",
|
|
428
|
+
"createTable",
|
|
429
|
+
"dropTable",
|
|
430
|
+
"renameTable",
|
|
431
|
+
"truncate",
|
|
432
|
+
"addColumn",
|
|
433
|
+
"dropColumn",
|
|
434
|
+
"modifyColumn",
|
|
435
|
+
"renameColumn",
|
|
436
|
+
"dropPk",
|
|
437
|
+
"addPk",
|
|
438
|
+
"addFk",
|
|
439
|
+
"dropFk",
|
|
440
|
+
"addIdx",
|
|
441
|
+
"dropIdx",
|
|
442
|
+
"createView",
|
|
443
|
+
"dropView",
|
|
444
|
+
"createProc",
|
|
445
|
+
"dropProc",
|
|
446
|
+
] as const satisfies readonly DdlQueryDef["type"][];
|
|
447
|
+
|
|
448
|
+
/** DDL type union */
|
|
449
|
+
export type DdlType = (typeof DDL_TYPES)[number];
|
|
450
|
+
|
|
451
|
+
//#endregion
|
|
452
|
+
|
|
453
|
+
//#region ========== 통합 Union Type ==========
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* 모든 Query definition union type
|
|
457
|
+
*
|
|
458
|
+
* DML (SELECT/INSERT/UPDATE/DELETE/UPSERT) +
|
|
459
|
+
* DDL (Table/Column/PK/FK/Index/View/Procedure) +
|
|
460
|
+
* Utils (SwitchFk) + Meta (SchemaExists)
|
|
461
|
+
*
|
|
462
|
+
* @see {@link SelectQueryDef} SELECT query
|
|
463
|
+
* @see {@link InsertQueryDef} INSERT query
|
|
464
|
+
* @see {@link UpdateQueryDef} UPDATE query
|
|
465
|
+
* @see {@link DeleteQueryDef} DELETE query
|
|
466
|
+
*/
|
|
467
|
+
export type QueryDef =
|
|
468
|
+
// DML
|
|
469
|
+
| SelectQueryDef
|
|
470
|
+
| InsertQueryDef
|
|
471
|
+
| InsertIfNotExistsQueryDef
|
|
472
|
+
| InsertIntoQueryDef
|
|
473
|
+
| UpdateQueryDef
|
|
474
|
+
| DeleteQueryDef
|
|
475
|
+
| UpsertQueryDef
|
|
476
|
+
|
|
477
|
+
// DDL - Schema
|
|
478
|
+
| ClearSchemaQueryDef
|
|
479
|
+
|
|
480
|
+
// DDL - Table
|
|
481
|
+
| CreateTableQueryDef
|
|
482
|
+
| DropTableQueryDef
|
|
483
|
+
| RenameTableQueryDef
|
|
484
|
+
| TruncateQueryDef
|
|
485
|
+
|
|
486
|
+
// DDL - Column
|
|
487
|
+
| AddColumnQueryDef
|
|
488
|
+
| DropColumnQueryDef
|
|
489
|
+
| ModifyColumnQueryDef
|
|
490
|
+
| RenameColumnQueryDef
|
|
491
|
+
|
|
492
|
+
// DDL - PK/FK/Index
|
|
493
|
+
| DropPkQueryDef
|
|
494
|
+
| AddPkQueryDef
|
|
495
|
+
| AddFkQueryDef
|
|
496
|
+
| DropFkQueryDef
|
|
497
|
+
| AddIdxQueryDef
|
|
498
|
+
| DropIdxQueryDef
|
|
499
|
+
|
|
500
|
+
// DDL - View/Procedure
|
|
501
|
+
| CreateViewQueryDef
|
|
502
|
+
| DropViewQueryDef
|
|
503
|
+
| CreateProcQueryDef
|
|
504
|
+
| DropProcQueryDef
|
|
505
|
+
| ExecProcQueryDef
|
|
506
|
+
|
|
507
|
+
// Utils
|
|
508
|
+
| SwitchFkQueryDef
|
|
509
|
+
|
|
510
|
+
// Meta
|
|
511
|
+
| SchemaExistsQueryDef;
|
|
512
|
+
|
|
513
|
+
//#endregion
|