@simplysm/orm-common 13.0.100 → 14.0.1
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/dist/create-db-context.d.ts +10 -10
- package/dist/create-db-context.js +312 -276
- package/dist/create-db-context.js.map +1 -6
- package/dist/ddl/column-ddl.d.ts +4 -4
- package/dist/ddl/column-ddl.js +41 -35
- package/dist/ddl/column-ddl.js.map +1 -6
- package/dist/ddl/initialize.d.ts +17 -17
- package/dist/ddl/initialize.js +200 -142
- package/dist/ddl/initialize.js.map +1 -6
- package/dist/ddl/relation-ddl.d.ts +6 -6
- package/dist/ddl/relation-ddl.js +55 -48
- package/dist/ddl/relation-ddl.js.map +1 -6
- package/dist/ddl/schema-ddl.d.ts +4 -4
- package/dist/ddl/schema-ddl.js +21 -15
- package/dist/ddl/schema-ddl.js.map +1 -6
- package/dist/ddl/table-ddl.d.ts +20 -20
- package/dist/ddl/table-ddl.js +139 -93
- package/dist/ddl/table-ddl.js.map +1 -6
- package/dist/define-db-context.js +10 -13
- package/dist/define-db-context.js.map +1 -6
- package/dist/errors/db-transaction-error.d.ts +15 -15
- package/dist/errors/db-transaction-error.d.ts.map +1 -1
- package/dist/errors/db-transaction-error.js +53 -19
- package/dist/errors/db-transaction-error.js.map +1 -6
- package/dist/exec/executable.d.ts +23 -23
- package/dist/exec/executable.js +94 -40
- package/dist/exec/executable.js.map +1 -6
- package/dist/exec/queryable.d.ts +97 -97
- package/dist/exec/queryable.js +1310 -1204
- package/dist/exec/queryable.js.map +1 -6
- package/dist/exec/search-parser.d.ts +31 -31
- package/dist/exec/search-parser.d.ts.map +1 -1
- package/dist/exec/search-parser.js +158 -59
- package/dist/exec/search-parser.js.map +1 -6
- package/dist/expr/expr-unit.d.ts +4 -4
- package/dist/expr/expr-unit.js +24 -18
- package/dist/expr/expr-unit.js.map +1 -6
- package/dist/expr/expr.d.ts +6 -6
- package/dist/expr/expr.js +1872 -1844
- package/dist/expr/expr.js.map +1 -6
- package/dist/index.js +23 -1
- package/dist/index.js.map +1 -6
- package/dist/models/system-migration.js +7 -7
- package/dist/models/system-migration.js.map +1 -6
- package/dist/query-builder/base/expr-renderer-base.d.ts +10 -10
- package/dist/query-builder/base/expr-renderer-base.js +27 -21
- package/dist/query-builder/base/expr-renderer-base.js.map +1 -6
- package/dist/query-builder/base/query-builder-base.d.ts +21 -21
- package/dist/query-builder/base/query-builder-base.d.ts.map +1 -1
- package/dist/query-builder/base/query-builder-base.js +90 -80
- package/dist/query-builder/base/query-builder-base.js.map +1 -6
- 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 +447 -420
- package/dist/query-builder/mssql/mssql-expr-renderer.js.map +1 -6
- package/dist/query-builder/mssql/mssql-query-builder.js +483 -443
- package/dist/query-builder/mssql/mssql-query-builder.js.map +1 -6
- 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 +451 -419
- package/dist/query-builder/mysql/mysql-expr-renderer.js.map +1 -6
- package/dist/query-builder/mysql/mysql-query-builder.js +570 -479
- package/dist/query-builder/mysql/mysql-query-builder.js.map +1 -6
- 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 +449 -422
- package/dist/query-builder/postgresql/postgresql-expr-renderer.js.map +1 -6
- package/dist/query-builder/postgresql/postgresql-query-builder.js +511 -460
- package/dist/query-builder/postgresql/postgresql-query-builder.js.map +1 -6
- package/dist/query-builder/query-builder.d.ts +1 -1
- package/dist/query-builder/query-builder.js +13 -13
- package/dist/query-builder/query-builder.js.map +1 -6
- package/dist/schema/factory/column-builder.d.ts +84 -84
- package/dist/schema/factory/column-builder.js +248 -185
- package/dist/schema/factory/column-builder.js.map +1 -6
- package/dist/schema/factory/index-builder.d.ts +38 -38
- package/dist/schema/factory/index-builder.js +144 -85
- package/dist/schema/factory/index-builder.js.map +1 -6
- package/dist/schema/factory/relation-builder.d.ts +91 -91
- package/dist/schema/factory/relation-builder.d.ts.map +1 -1
- package/dist/schema/factory/relation-builder.js +274 -136
- package/dist/schema/factory/relation-builder.js.map +1 -6
- package/dist/schema/procedure-builder.d.ts +51 -51
- package/dist/schema/procedure-builder.d.ts.map +1 -1
- package/dist/schema/procedure-builder.js +205 -131
- package/dist/schema/procedure-builder.js.map +1 -6
- package/dist/schema/table-builder.d.ts +55 -55
- package/dist/schema/table-builder.d.ts.map +1 -1
- package/dist/schema/table-builder.js +274 -205
- package/dist/schema/table-builder.js.map +1 -6
- package/dist/schema/view-builder.d.ts +44 -44
- package/dist/schema/view-builder.d.ts.map +1 -1
- package/dist/schema/view-builder.js +189 -116
- package/dist/schema/view-builder.js.map +1 -6
- package/dist/types/column.js +60 -30
- package/dist/types/column.js.map +1 -6
- package/dist/types/db-context-def.d.ts +9 -9
- package/dist/types/db-context-def.js +2 -1
- package/dist/types/db-context-def.js.map +1 -6
- package/dist/types/db.d.ts +47 -47
- package/dist/types/db.js +15 -5
- package/dist/types/db.js.map +1 -6
- package/dist/types/expr.d.ts +81 -81
- package/dist/types/expr.d.ts.map +1 -1
- package/dist/types/expr.js +3 -1
- package/dist/types/expr.js.map +1 -6
- package/dist/types/query-def.d.ts +46 -46
- package/dist/types/query-def.d.ts.map +1 -1
- package/dist/types/query-def.js +31 -24
- package/dist/types/query-def.js.map +1 -6
- package/dist/utils/result-parser.js +362 -221
- package/dist/utils/result-parser.js.map +1 -6
- package/package.json +5 -7
- package/src/create-db-context.ts +31 -31
- package/src/ddl/column-ddl.ts +4 -4
- package/src/ddl/initialize.ts +38 -38
- package/src/ddl/relation-ddl.ts +6 -6
- package/src/ddl/schema-ddl.ts +4 -4
- package/src/ddl/table-ddl.ts +24 -24
- package/src/errors/db-transaction-error.ts +13 -13
- package/src/exec/executable.ts +25 -25
- package/src/exec/queryable.ts +134 -134
- package/src/exec/search-parser.ts +50 -50
- package/src/expr/expr-unit.ts +4 -4
- package/src/expr/expr.ts +13 -13
- package/src/index.ts +8 -8
- package/src/models/system-migration.ts +1 -1
- package/src/query-builder/base/expr-renderer-base.ts +21 -21
- package/src/query-builder/base/query-builder-base.ts +33 -33
- package/src/query-builder/mssql/mssql-expr-renderer.ts +11 -11
- package/src/query-builder/mssql/mssql-query-builder.ts +11 -11
- package/src/query-builder/mysql/mysql-expr-renderer.ts +15 -15
- package/src/query-builder/mysql/mysql-query-builder.ts +3 -3
- package/src/query-builder/postgresql/postgresql-expr-renderer.ts +9 -9
- package/src/query-builder/postgresql/postgresql-query-builder.ts +7 -7
- package/src/query-builder/query-builder.ts +1 -1
- package/src/schema/factory/column-builder.ts +86 -86
- package/src/schema/factory/index-builder.ts +38 -38
- package/src/schema/factory/relation-builder.ts +93 -93
- package/src/schema/procedure-builder.ts +52 -52
- package/src/schema/table-builder.ts +56 -56
- package/src/schema/view-builder.ts +45 -45
- package/src/types/column.ts +1 -1
- package/src/types/db-context-def.ts +15 -15
- package/src/types/db.ts +50 -50
- package/src/types/expr.ts +103 -103
- package/src/types/query-def.ts +50 -50
- package/src/utils/result-parser.ts +39 -39
- package/README.md +0 -192
- package/docs/core.md +0 -234
- package/docs/expression.md +0 -234
- package/docs/query-builder.md +0 -93
- package/docs/queryable.md +0 -198
- package/docs/schema-builders.md +0 -463
- package/docs/types.md +0 -445
- package/docs/utilities.md +0 -27
- package/tests/db-context/create-db-context.spec.ts +0 -193
- package/tests/db-context/define-db-context.spec.ts +0 -17
- package/tests/ddl/basic.expected.ts +0 -341
- package/tests/ddl/basic.spec.ts +0 -557
- package/tests/ddl/column-builder.expected.ts +0 -310
- package/tests/ddl/column-builder.spec.ts +0 -525
- package/tests/ddl/index-builder.expected.ts +0 -38
- package/tests/ddl/index-builder.spec.ts +0 -148
- package/tests/ddl/procedure-builder.expected.ts +0 -52
- package/tests/ddl/procedure-builder.spec.ts +0 -128
- package/tests/ddl/relation-builder.expected.ts +0 -36
- package/tests/ddl/relation-builder.spec.ts +0 -171
- package/tests/ddl/table-builder.expected.ts +0 -113
- package/tests/ddl/table-builder.spec.ts +0 -399
- package/tests/ddl/view-builder.expected.ts +0 -38
- package/tests/ddl/view-builder.spec.ts +0 -116
- package/tests/dml/delete.expected.ts +0 -96
- package/tests/dml/delete.spec.ts +0 -127
- package/tests/dml/insert.expected.ts +0 -192
- package/tests/dml/insert.spec.ts +0 -210
- package/tests/dml/update.expected.ts +0 -176
- package/tests/dml/update.spec.ts +0 -222
- package/tests/dml/upsert.expected.ts +0 -215
- package/tests/dml/upsert.spec.ts +0 -190
- package/tests/errors/queryable-errors.spec.ts +0 -126
- package/tests/escape.spec.ts +0 -59
- package/tests/examples/pivot.expected.ts +0 -211
- package/tests/examples/pivot.spec.ts +0 -200
- package/tests/examples/sampling.expected.ts +0 -69
- package/tests/examples/sampling.spec.ts +0 -42
- package/tests/examples/unpivot.expected.ts +0 -120
- package/tests/examples/unpivot.spec.ts +0 -161
- package/tests/exec/search-parser.spec.ts +0 -267
- package/tests/executable/basic.expected.ts +0 -18
- package/tests/executable/basic.spec.ts +0 -54
- package/tests/expr/comparison.expected.ts +0 -282
- package/tests/expr/comparison.spec.ts +0 -334
- package/tests/expr/conditional.expected.ts +0 -134
- package/tests/expr/conditional.spec.ts +0 -249
- package/tests/expr/date.expected.ts +0 -332
- package/tests/expr/date.spec.ts +0 -459
- package/tests/expr/math.expected.ts +0 -62
- package/tests/expr/math.spec.ts +0 -59
- package/tests/expr/string.expected.ts +0 -218
- package/tests/expr/string.spec.ts +0 -300
- package/tests/expr/utility.expected.ts +0 -147
- package/tests/expr/utility.spec.ts +0 -155
- package/tests/select/basic.expected.ts +0 -322
- package/tests/select/basic.spec.ts +0 -433
- package/tests/select/filter.expected.ts +0 -357
- package/tests/select/filter.spec.ts +0 -954
- package/tests/select/group.expected.ts +0 -169
- package/tests/select/group.spec.ts +0 -159
- package/tests/select/join.expected.ts +0 -582
- package/tests/select/join.spec.ts +0 -692
- package/tests/select/order.expected.ts +0 -150
- package/tests/select/order.spec.ts +0 -140
- package/tests/select/recursive-cte.expected.ts +0 -244
- package/tests/select/recursive-cte.spec.ts +0 -514
- package/tests/select/result-meta.spec.ts +0 -270
- package/tests/select/subquery.expected.ts +0 -363
- package/tests/select/subquery.spec.ts +0 -441
- package/tests/select/view.expected.ts +0 -155
- package/tests/select/view.spec.ts +0 -235
- package/tests/select/window.expected.ts +0 -345
- package/tests/select/window.spec.ts +0 -433
- package/tests/setup/MockExecutor.ts +0 -18
- package/tests/setup/TestDbContext.ts +0 -59
- package/tests/setup/models/Company.ts +0 -13
- package/tests/setup/models/Employee.ts +0 -10
- package/tests/setup/models/MonthlySales.ts +0 -11
- package/tests/setup/models/Post.ts +0 -16
- package/tests/setup/models/Sales.ts +0 -10
- package/tests/setup/models/User.ts +0 -19
- package/tests/setup/procedure/GetAllUsers.ts +0 -9
- package/tests/setup/procedure/GetUserById.ts +0 -12
- package/tests/setup/test-utils.ts +0 -72
- package/tests/setup/views/ActiveUsers.ts +0 -8
- package/tests/setup/views/UserSummary.ts +0 -11
- package/tests/types/nullable-queryable-record.spec.ts +0 -97
- package/tests/utils/result-parser-perf.spec.ts +0 -143
- package/tests/utils/result-parser.spec.ts +0 -667
|
@@ -8,22 +8,22 @@ import type { DataRecord } from "../../types/db";
|
|
|
8
8
|
// ============================================
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* Column
|
|
11
|
+
* Column 정의 builder
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
13
|
+
* Fluent API로 column 타입, nullable, autoIncrement, default, description을 정의
|
|
14
|
+
* TableBuilder.columns()에서 사용
|
|
15
15
|
*
|
|
16
|
-
* @template TValue - Column
|
|
17
|
-
* @template TMeta - Column
|
|
16
|
+
* @template TValue - Column 값 타입
|
|
17
|
+
* @template TMeta - Column 메타데이터 타입
|
|
18
18
|
*
|
|
19
19
|
* @example
|
|
20
20
|
* ```typescript
|
|
21
21
|
* Table("User")
|
|
22
22
|
* .columns((c) => ({
|
|
23
|
-
* id: c.bigint().autoIncrement(), // bigint,
|
|
24
|
-
* name: c.varchar(100), // varchar(100),
|
|
23
|
+
* id: c.bigint().autoIncrement(), // bigint, 자동 증가
|
|
24
|
+
* name: c.varchar(100), // varchar(100), 필수
|
|
25
25
|
* email: c.varchar(200).nullable(), // varchar(200), nullable
|
|
26
|
-
* status: c.varchar(20).default("active"), // varchar(20),
|
|
26
|
+
* status: c.varchar(20).default("active"), // varchar(20), 기본값
|
|
27
27
|
* createdAt: c.datetime().description("created datetime"),
|
|
28
28
|
* }));
|
|
29
29
|
* ```
|
|
@@ -33,16 +33,16 @@ import type { DataRecord } from "../../types/db";
|
|
|
33
33
|
*/
|
|
34
34
|
export class ColumnBuilder<TValue extends ColumnPrimitive, TMeta extends ColumnMeta> {
|
|
35
35
|
/**
|
|
36
|
-
* @param meta - Column
|
|
36
|
+
* @param meta - Column 메타데이터
|
|
37
37
|
*/
|
|
38
38
|
constructor(readonly meta: TMeta) {}
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
|
-
* Auto Increment
|
|
41
|
+
* Auto Increment 설정
|
|
42
42
|
*
|
|
43
|
-
*
|
|
43
|
+
* INSERT 시 자동 증가. INSERT 타입 추론에서 선택적(optional)으로 처리됨
|
|
44
44
|
*
|
|
45
|
-
* @returns
|
|
45
|
+
* @returns 새 ColumnBuilder 인스턴스
|
|
46
46
|
*
|
|
47
47
|
* @example
|
|
48
48
|
* ```typescript
|
|
@@ -54,11 +54,11 @@ export class ColumnBuilder<TValue extends ColumnPrimitive, TMeta extends ColumnM
|
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
|
-
* Nullable
|
|
57
|
+
* Nullable 설정
|
|
58
58
|
*
|
|
59
|
-
*
|
|
59
|
+
* NULL 허용. 값 타입에 undefined가 추가됨
|
|
60
60
|
*
|
|
61
|
-
* @returns
|
|
61
|
+
* @returns 새 ColumnBuilder 인스턴스
|
|
62
62
|
*
|
|
63
63
|
* @example
|
|
64
64
|
* ```typescript
|
|
@@ -70,12 +70,12 @@ export class ColumnBuilder<TValue extends ColumnPrimitive, TMeta extends ColumnM
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
/**
|
|
73
|
-
*
|
|
73
|
+
* 기본값 설정
|
|
74
74
|
*
|
|
75
|
-
*
|
|
75
|
+
* INSERT 시 값이 지정되지 않으면 사용됨. INSERT 타입 추론에서 선택적(optional)으로 처리됨
|
|
76
76
|
*
|
|
77
|
-
* @param value -
|
|
78
|
-
* @returns
|
|
77
|
+
* @param value - 기본값
|
|
78
|
+
* @returns 새 ColumnBuilder 인스턴스
|
|
79
79
|
*
|
|
80
80
|
* @example
|
|
81
81
|
* ```typescript
|
|
@@ -90,10 +90,10 @@ export class ColumnBuilder<TValue extends ColumnPrimitive, TMeta extends ColumnM
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
/**
|
|
93
|
-
*
|
|
93
|
+
* Column 설명 설정
|
|
94
94
|
*
|
|
95
|
-
* @param desc - Column
|
|
96
|
-
* @returns
|
|
95
|
+
* @param desc - Column 설명 (DDL Comment로 사용됨)
|
|
96
|
+
* @returns 새 ColumnBuilder 인스턴스
|
|
97
97
|
*
|
|
98
98
|
* @example
|
|
99
99
|
* ```typescript
|
|
@@ -110,85 +110,85 @@ export class ColumnBuilder<TValue extends ColumnPrimitive, TMeta extends ColumnM
|
|
|
110
110
|
// ============================================
|
|
111
111
|
|
|
112
112
|
/**
|
|
113
|
-
* Column builder factory
|
|
113
|
+
* Column builder factory 생성
|
|
114
114
|
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
115
|
+
* TableBuilder.columns()에서 사용하는 column 타입 factory
|
|
116
|
+
* 모든 기본 데이터 타입에 대한 builder 생성 메서드를 제공
|
|
117
117
|
*
|
|
118
|
-
* @returns
|
|
118
|
+
* @returns 각 Column 타입별 builder 생성 메서드를 포함하는 객체
|
|
119
119
|
*
|
|
120
120
|
* @example
|
|
121
121
|
* ```typescript
|
|
122
122
|
* Table("User")
|
|
123
123
|
* .columns((c) => ({
|
|
124
|
-
* //
|
|
124
|
+
* // 숫자 타입
|
|
125
125
|
* id: c.bigint().autoIncrement(),
|
|
126
126
|
* count: c.int(),
|
|
127
127
|
* price: c.decimal(10, 2),
|
|
128
128
|
*
|
|
129
|
-
* //
|
|
129
|
+
* // 문자열 타입
|
|
130
130
|
* name: c.varchar(100),
|
|
131
131
|
* code: c.char(10),
|
|
132
132
|
* content: c.text(),
|
|
133
133
|
*
|
|
134
|
-
* //
|
|
134
|
+
* // 날짜/시간 타입
|
|
135
135
|
* createdAt: c.datetime(),
|
|
136
136
|
* birthDate: c.date(),
|
|
137
137
|
* startTime: c.time(),
|
|
138
138
|
*
|
|
139
|
-
* //
|
|
139
|
+
* // 기타 타입
|
|
140
140
|
* isActive: c.boolean(),
|
|
141
141
|
* data: c.binary(),
|
|
142
142
|
* uuid: c.uuid(),
|
|
143
143
|
* }));
|
|
144
144
|
* ```
|
|
145
145
|
*
|
|
146
|
-
* @see {@link ColumnBuilder} Column builder
|
|
146
|
+
* @see {@link ColumnBuilder} Column builder 클래스
|
|
147
147
|
*/
|
|
148
148
|
export function createColumnFactory() {
|
|
149
149
|
return {
|
|
150
150
|
/**
|
|
151
|
-
* INT column (4
|
|
151
|
+
* INT column (4바이트, -2^31 ~ 2^31-1)
|
|
152
152
|
*
|
|
153
|
-
* @returns ColumnBuilder
|
|
153
|
+
* @returns ColumnBuilder 인스턴스
|
|
154
154
|
*/
|
|
155
155
|
int(): ColumnBuilder<number, { type: "number"; dataType: { type: "int" } }> {
|
|
156
156
|
return new ColumnBuilder({ type: "number", dataType: { type: "int" } });
|
|
157
157
|
},
|
|
158
158
|
|
|
159
159
|
/**
|
|
160
|
-
* BIGINT column (8
|
|
160
|
+
* BIGINT column (8바이트, -2^63 ~ 2^63-1)
|
|
161
161
|
*
|
|
162
|
-
* @returns ColumnBuilder
|
|
162
|
+
* @returns ColumnBuilder 인스턴스
|
|
163
163
|
*/
|
|
164
164
|
bigint(): ColumnBuilder<number, { type: "number"; dataType: { type: "bigint" } }> {
|
|
165
165
|
return new ColumnBuilder({ type: "number", dataType: { type: "bigint" } });
|
|
166
166
|
},
|
|
167
167
|
|
|
168
168
|
/**
|
|
169
|
-
* FLOAT column (4
|
|
169
|
+
* FLOAT column (4바이트, 단정밀도 부동소수점)
|
|
170
170
|
*
|
|
171
|
-
* @returns ColumnBuilder
|
|
171
|
+
* @returns ColumnBuilder 인스턴스
|
|
172
172
|
*/
|
|
173
173
|
float(): ColumnBuilder<number, { type: "number"; dataType: { type: "float" } }> {
|
|
174
174
|
return new ColumnBuilder({ type: "number", dataType: { type: "float" } });
|
|
175
175
|
},
|
|
176
176
|
|
|
177
177
|
/**
|
|
178
|
-
* DOUBLE column (8
|
|
178
|
+
* DOUBLE column (8바이트, 배정밀도 부동소수점)
|
|
179
179
|
*
|
|
180
|
-
* @returns ColumnBuilder
|
|
180
|
+
* @returns ColumnBuilder 인스턴스
|
|
181
181
|
*/
|
|
182
182
|
double(): ColumnBuilder<number, { type: "number"; dataType: { type: "double" } }> {
|
|
183
183
|
return new ColumnBuilder({ type: "number", dataType: { type: "double" } });
|
|
184
184
|
},
|
|
185
185
|
|
|
186
186
|
/**
|
|
187
|
-
* DECIMAL column (
|
|
187
|
+
* DECIMAL column (고정 소수점)
|
|
188
188
|
*
|
|
189
|
-
* @param precision -
|
|
190
|
-
* @param scale -
|
|
191
|
-
* @returns ColumnBuilder
|
|
189
|
+
* @param precision - 전체 자릿수
|
|
190
|
+
* @param scale - 소수점 이하 자릿수 (선택)
|
|
191
|
+
* @returns ColumnBuilder 인스턴스
|
|
192
192
|
*
|
|
193
193
|
* @example
|
|
194
194
|
* ```typescript
|
|
@@ -206,10 +206,10 @@ export function createColumnFactory() {
|
|
|
206
206
|
},
|
|
207
207
|
|
|
208
208
|
/**
|
|
209
|
-
* VARCHAR column (
|
|
209
|
+
* VARCHAR column (가변 길이 문자열)
|
|
210
210
|
*
|
|
211
|
-
* @param length -
|
|
212
|
-
* @returns ColumnBuilder
|
|
211
|
+
* @param length - 최대 길이
|
|
212
|
+
* @returns ColumnBuilder 인스턴스
|
|
213
213
|
*
|
|
214
214
|
* @example
|
|
215
215
|
* ```typescript
|
|
@@ -223,10 +223,10 @@ export function createColumnFactory() {
|
|
|
223
223
|
},
|
|
224
224
|
|
|
225
225
|
/**
|
|
226
|
-
* CHAR column (
|
|
226
|
+
* CHAR column (고정 길이 문자열)
|
|
227
227
|
*
|
|
228
|
-
* @param length -
|
|
229
|
-
* @returns ColumnBuilder
|
|
228
|
+
* @param length - 고정 길이
|
|
229
|
+
* @returns ColumnBuilder 인스턴스
|
|
230
230
|
*
|
|
231
231
|
* @example
|
|
232
232
|
* ```typescript
|
|
@@ -240,20 +240,20 @@ export function createColumnFactory() {
|
|
|
240
240
|
},
|
|
241
241
|
|
|
242
242
|
/**
|
|
243
|
-
* TEXT column (
|
|
243
|
+
* TEXT column (대용량 텍스트)
|
|
244
244
|
*
|
|
245
|
-
* @returns ColumnBuilder
|
|
245
|
+
* @returns ColumnBuilder 인스턴스
|
|
246
246
|
*/
|
|
247
247
|
text(): ColumnBuilder<string, { type: "string"; dataType: { type: "text" } }> {
|
|
248
248
|
return new ColumnBuilder({ type: "string", dataType: { type: "text" } });
|
|
249
249
|
},
|
|
250
250
|
|
|
251
251
|
/**
|
|
252
|
-
* BINARY column (
|
|
252
|
+
* BINARY column (바이너리 데이터)
|
|
253
253
|
*
|
|
254
|
-
*
|
|
254
|
+
* DBMS별: MySQL=LONGBLOB, MSSQL=VARBINARY(MAX), PostgreSQL=BYTEA
|
|
255
255
|
*
|
|
256
|
-
* @returns ColumnBuilder
|
|
256
|
+
* @returns ColumnBuilder 인스턴스
|
|
257
257
|
*/
|
|
258
258
|
binary(): ColumnBuilder<Bytes, { type: "Bytes"; dataType: { type: "binary" } }> {
|
|
259
259
|
return new ColumnBuilder({ type: "Bytes", dataType: { type: "binary" } });
|
|
@@ -262,36 +262,36 @@ export function createColumnFactory() {
|
|
|
262
262
|
/**
|
|
263
263
|
* BOOLEAN column
|
|
264
264
|
*
|
|
265
|
-
*
|
|
265
|
+
* DBMS별: MySQL=TINYINT(1), MSSQL=BIT, PostgreSQL=BOOLEAN
|
|
266
266
|
*
|
|
267
|
-
* @returns ColumnBuilder
|
|
267
|
+
* @returns ColumnBuilder 인스턴스
|
|
268
268
|
*/
|
|
269
269
|
boolean(): ColumnBuilder<boolean, { type: "boolean"; dataType: { type: "boolean" } }> {
|
|
270
270
|
return new ColumnBuilder({ type: "boolean", dataType: { type: "boolean" } });
|
|
271
271
|
},
|
|
272
272
|
|
|
273
273
|
/**
|
|
274
|
-
* DATETIME column (
|
|
274
|
+
* DATETIME column (날짜 + 시간)
|
|
275
275
|
*
|
|
276
|
-
* @returns ColumnBuilder
|
|
276
|
+
* @returns ColumnBuilder 인스턴스
|
|
277
277
|
*/
|
|
278
278
|
datetime(): ColumnBuilder<DateTime, { type: "DateTime"; dataType: { type: "datetime" } }> {
|
|
279
279
|
return new ColumnBuilder({ type: "DateTime", dataType: { type: "datetime" } });
|
|
280
280
|
},
|
|
281
281
|
|
|
282
282
|
/**
|
|
283
|
-
* DATE column (
|
|
283
|
+
* DATE column (날짜만)
|
|
284
284
|
*
|
|
285
|
-
* @returns ColumnBuilder
|
|
285
|
+
* @returns ColumnBuilder 인스턴스
|
|
286
286
|
*/
|
|
287
287
|
date(): ColumnBuilder<DateOnly, { type: "DateOnly"; dataType: { type: "date" } }> {
|
|
288
288
|
return new ColumnBuilder({ type: "DateOnly", dataType: { type: "date" } });
|
|
289
289
|
},
|
|
290
290
|
|
|
291
291
|
/**
|
|
292
|
-
* TIME column (
|
|
292
|
+
* TIME column (시간만)
|
|
293
293
|
*
|
|
294
|
-
* @returns ColumnBuilder
|
|
294
|
+
* @returns ColumnBuilder 인스턴스
|
|
295
295
|
*/
|
|
296
296
|
time(): ColumnBuilder<Time, { type: "Time"; dataType: { type: "time" } }> {
|
|
297
297
|
return new ColumnBuilder({ type: "Time", dataType: { type: "time" } });
|
|
@@ -300,9 +300,9 @@ export function createColumnFactory() {
|
|
|
300
300
|
/**
|
|
301
301
|
* UUID column
|
|
302
302
|
*
|
|
303
|
-
*
|
|
303
|
+
* DBMS별: MySQL=BINARY(16), MSSQL=UNIQUEIDENTIFIER, PostgreSQL=UUID
|
|
304
304
|
*
|
|
305
|
-
* @returns ColumnBuilder
|
|
305
|
+
* @returns ColumnBuilder 인스턴스
|
|
306
306
|
*/
|
|
307
307
|
uuid(): ColumnBuilder<Uuid, { type: "Uuid"; dataType: { type: "uuid" } }> {
|
|
308
308
|
return new ColumnBuilder({ type: "Uuid", dataType: { type: "uuid" } });
|
|
@@ -311,24 +311,24 @@ export function createColumnFactory() {
|
|
|
311
311
|
}
|
|
312
312
|
|
|
313
313
|
// ============================================
|
|
314
|
-
// ColumnDefRecord - Column builder
|
|
314
|
+
// ColumnDefRecord - Column builder 레코드
|
|
315
315
|
// ============================================
|
|
316
316
|
|
|
317
317
|
/**
|
|
318
|
-
* Column builder
|
|
318
|
+
* Column builder 레코드 타입
|
|
319
319
|
*
|
|
320
|
-
*
|
|
320
|
+
* TableBuilder.columns()의 반환 타입으로 사용됨
|
|
321
321
|
*/
|
|
322
322
|
export type ColumnBuilderRecord = Record<string, ColumnBuilder<ColumnPrimitive, ColumnMeta>>;
|
|
323
323
|
|
|
324
324
|
// ============================================
|
|
325
|
-
// Infer -
|
|
325
|
+
// Infer - 타입 추론 유틸리티
|
|
326
326
|
// ============================================
|
|
327
327
|
|
|
328
328
|
/**
|
|
329
|
-
*
|
|
329
|
+
* Column builder 레코드에서 실제 값 타입을 추론
|
|
330
330
|
*
|
|
331
|
-
* @template T - Column builder
|
|
331
|
+
* @template T - Column builder 레코드 타입
|
|
332
332
|
*
|
|
333
333
|
* @example
|
|
334
334
|
* ```typescript
|
|
@@ -341,20 +341,20 @@ export type InferColumns<TBuilders extends ColumnBuilderRecord> = {
|
|
|
341
341
|
};
|
|
342
342
|
|
|
343
343
|
/**
|
|
344
|
-
*
|
|
344
|
+
* Column builder 레코드에서 expression 입력 타입을 추론
|
|
345
345
|
*
|
|
346
|
-
* @template T - Column builder
|
|
346
|
+
* @template T - Column builder 레코드 타입
|
|
347
347
|
*/
|
|
348
348
|
export type InferColumnExprs<TBuilders extends ColumnBuilderRecord> = {
|
|
349
349
|
[K in keyof TBuilders]: TBuilders[K] extends ColumnBuilder<infer V, any> ? ExprInput<V> : never;
|
|
350
350
|
};
|
|
351
351
|
|
|
352
352
|
/**
|
|
353
|
-
*
|
|
353
|
+
* INSERT용 필수 column key 추출
|
|
354
354
|
*
|
|
355
|
-
*
|
|
355
|
+
* autoIncrement, nullable, default가 없는 column만 필수
|
|
356
356
|
*
|
|
357
|
-
* @template T - Column builder
|
|
357
|
+
* @template T - Column builder 레코드 타입
|
|
358
358
|
*/
|
|
359
359
|
export type RequiredInsertKeys<TBuilders extends ColumnBuilderRecord> = {
|
|
360
360
|
[K in keyof TBuilders]: TBuilders[K]["meta"] extends infer M extends ColumnMeta
|
|
@@ -369,11 +369,11 @@ export type RequiredInsertKeys<TBuilders extends ColumnBuilderRecord> = {
|
|
|
369
369
|
}[keyof TBuilders];
|
|
370
370
|
|
|
371
371
|
/**
|
|
372
|
-
*
|
|
372
|
+
* INSERT용 선택적 column key 추출
|
|
373
373
|
*
|
|
374
|
-
*
|
|
374
|
+
* autoIncrement, nullable, default가 있는 column은 선택적(optional)
|
|
375
375
|
*
|
|
376
|
-
* @template T - Column builder
|
|
376
|
+
* @template T - Column builder 레코드 타입
|
|
377
377
|
*/
|
|
378
378
|
export type OptionalInsertKeys<TBuilders extends ColumnBuilderRecord> = Exclude<
|
|
379
379
|
keyof TBuilders,
|
|
@@ -381,11 +381,11 @@ export type OptionalInsertKeys<TBuilders extends ColumnBuilderRecord> = Exclude<
|
|
|
381
381
|
>;
|
|
382
382
|
|
|
383
383
|
/**
|
|
384
|
-
* INSERT
|
|
384
|
+
* INSERT 타입 추론
|
|
385
385
|
*
|
|
386
|
-
*
|
|
386
|
+
* 필수 column은 필수, 선택적 column은 Partial
|
|
387
387
|
*
|
|
388
|
-
* @template T - Column builder
|
|
388
|
+
* @template T - Column builder 레코드 타입
|
|
389
389
|
*
|
|
390
390
|
* @example
|
|
391
391
|
* ```typescript
|
|
@@ -400,20 +400,20 @@ export type InferInsertColumns<TBuilders extends ColumnBuilderRecord> = Pick<
|
|
|
400
400
|
Partial<Pick<InferColumns<TBuilders>, OptionalInsertKeys<TBuilders>>>;
|
|
401
401
|
|
|
402
402
|
/**
|
|
403
|
-
* UPDATE
|
|
403
|
+
* UPDATE 타입 추론
|
|
404
404
|
*
|
|
405
|
-
*
|
|
405
|
+
* 모든 column이 선택적(optional)
|
|
406
406
|
*
|
|
407
|
-
* @template T - Column builder
|
|
407
|
+
* @template T - Column builder 레코드 타입
|
|
408
408
|
*/
|
|
409
409
|
export type InferUpdateColumns<TBuilders extends ColumnBuilderRecord> = Partial<
|
|
410
410
|
InferColumns<TBuilders>
|
|
411
411
|
>;
|
|
412
412
|
|
|
413
413
|
/**
|
|
414
|
-
*
|
|
414
|
+
* 데이터 레코드에서 Column builder 레코드로 변환
|
|
415
415
|
*
|
|
416
|
-
* @template TData -
|
|
416
|
+
* @template TData - 데이터 레코드 타입
|
|
417
417
|
*/
|
|
418
418
|
export type DataToColumnBuilderRecord<TData extends DataRecord> = {
|
|
419
419
|
[K in keyof TData as TData[K] extends ColumnPrimitive ? K : never]: ColumnBuilder<
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
// ============================================
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* Index
|
|
6
|
+
* Index 정의 builder
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* Fluent API로 index column, 유니크 여부, 정렬 순서를 정의
|
|
9
|
+
* TableBuilder.indexes()에서 사용
|
|
10
10
|
*
|
|
11
|
-
* @template TKeys - Index column key
|
|
11
|
+
* @template TKeys - Index column key 배열 타입
|
|
12
12
|
*
|
|
13
13
|
* @example
|
|
14
14
|
* ```typescript
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
* createdAt: c.datetime(),
|
|
21
21
|
* }))
|
|
22
22
|
* .indexes((i) => [
|
|
23
|
-
* //
|
|
23
|
+
* // 유니크 index
|
|
24
24
|
* i.index("email").unique(),
|
|
25
25
|
*
|
|
26
|
-
* //
|
|
26
|
+
* // 복합 index + 정렬 순서
|
|
27
27
|
* i.index("name", "createdAt").orderBy("ASC", "DESC"),
|
|
28
28
|
*
|
|
29
|
-
* //
|
|
29
|
+
* // 커스텀 이름
|
|
30
30
|
* i.index("createdAt").name("IX_User_CreatedAt"),
|
|
31
31
|
* ]);
|
|
32
32
|
* ```
|
|
@@ -36,12 +36,12 @@
|
|
|
36
36
|
*/
|
|
37
37
|
export class IndexBuilder<TKeys extends string[]> {
|
|
38
38
|
/**
|
|
39
|
-
* @param meta - Index
|
|
40
|
-
* @param meta.columns - Index column
|
|
41
|
-
* @param meta.name - Index
|
|
42
|
-
* @param meta.unique -
|
|
43
|
-
* @param meta.orderBy -
|
|
44
|
-
* @param meta.description - Index
|
|
39
|
+
* @param meta - Index 메타데이터
|
|
40
|
+
* @param meta.columns - Index column 배열
|
|
41
|
+
* @param meta.name - Index 이름 (선택)
|
|
42
|
+
* @param meta.unique - 유니크 index 여부
|
|
43
|
+
* @param meta.orderBy - column별 정렬 순서
|
|
44
|
+
* @param meta.description - Index 설명
|
|
45
45
|
*/
|
|
46
46
|
constructor(
|
|
47
47
|
readonly meta: {
|
|
@@ -54,10 +54,10 @@ export class IndexBuilder<TKeys extends string[]> {
|
|
|
54
54
|
) {}
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
|
-
* Index
|
|
57
|
+
* Index 이름 설정
|
|
58
58
|
*
|
|
59
|
-
* @param name - Index
|
|
60
|
-
* @returns
|
|
59
|
+
* @param name - Index 이름
|
|
60
|
+
* @returns 새 IndexBuilder 인스턴스
|
|
61
61
|
*
|
|
62
62
|
* @example
|
|
63
63
|
* ```typescript
|
|
@@ -69,9 +69,9 @@ export class IndexBuilder<TKeys extends string[]> {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
|
-
*
|
|
72
|
+
* 유니크 index 설정
|
|
73
73
|
*
|
|
74
|
-
* @returns
|
|
74
|
+
* @returns 새 IndexBuilder 인스턴스
|
|
75
75
|
*
|
|
76
76
|
* @example
|
|
77
77
|
* ```typescript
|
|
@@ -83,19 +83,19 @@ export class IndexBuilder<TKeys extends string[]> {
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
|
-
*
|
|
86
|
+
* 정렬 순서 설정
|
|
87
87
|
*
|
|
88
|
-
*
|
|
88
|
+
* 각 column에 ASC 또는 DESC를 지정
|
|
89
89
|
*
|
|
90
|
-
* @param orderBy -
|
|
91
|
-
* @returns
|
|
90
|
+
* @param orderBy - column별 정렬 순서 (column 수와 일치해야 함)
|
|
91
|
+
* @returns 새 IndexBuilder 인스턴스
|
|
92
92
|
*
|
|
93
93
|
* @example
|
|
94
94
|
* ```typescript
|
|
95
|
-
* //
|
|
95
|
+
* // 단일 column
|
|
96
96
|
* i.index("createdAt").orderBy("DESC")
|
|
97
97
|
*
|
|
98
|
-
* //
|
|
98
|
+
* // 복합 column
|
|
99
99
|
* i.index("status", "createdAt").orderBy("ASC", "DESC")
|
|
100
100
|
* ```
|
|
101
101
|
*/
|
|
@@ -104,10 +104,10 @@ export class IndexBuilder<TKeys extends string[]> {
|
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
/**
|
|
107
|
-
* Index
|
|
107
|
+
* Index 설명 설정
|
|
108
108
|
*
|
|
109
|
-
* @param description - Index
|
|
110
|
-
* @returns
|
|
109
|
+
* @param description - Index 설명 (DDL Comment로 사용됨)
|
|
110
|
+
* @returns 새 IndexBuilder 인스턴스
|
|
111
111
|
*/
|
|
112
112
|
description(description: string): IndexBuilder<TKeys> {
|
|
113
113
|
return new IndexBuilder({ ...this.meta, description });
|
|
@@ -119,12 +119,12 @@ export class IndexBuilder<TKeys extends string[]> {
|
|
|
119
119
|
// ============================================
|
|
120
120
|
|
|
121
121
|
/**
|
|
122
|
-
* Index builder factory
|
|
122
|
+
* Index builder factory 생성
|
|
123
123
|
*
|
|
124
|
-
*
|
|
124
|
+
* TableBuilder.indexes()에서 사용하는 index factory
|
|
125
125
|
*
|
|
126
|
-
* @template TColumnKey - Table column key
|
|
127
|
-
* @returns
|
|
126
|
+
* @template TColumnKey - Table column key 타입
|
|
127
|
+
* @returns Index 생성 메서드를 포함하는 객체
|
|
128
128
|
*
|
|
129
129
|
* @example
|
|
130
130
|
* ```typescript
|
|
@@ -140,21 +140,21 @@ export class IndexBuilder<TKeys extends string[]> {
|
|
|
140
140
|
* ]);
|
|
141
141
|
* ```
|
|
142
142
|
*
|
|
143
|
-
* @see {@link IndexBuilder} Index builder
|
|
143
|
+
* @see {@link IndexBuilder} Index builder 클래스
|
|
144
144
|
*/
|
|
145
145
|
export function createIndexFactory<TColumnKey extends string>() {
|
|
146
146
|
return {
|
|
147
147
|
/**
|
|
148
|
-
* Index
|
|
148
|
+
* Index 생성
|
|
149
149
|
*
|
|
150
|
-
* @template TKeys - Index column key
|
|
151
|
-
* @param columns - Index column
|
|
152
|
-
* @returns IndexBuilder
|
|
150
|
+
* @template TKeys - Index column key 배열 타입
|
|
151
|
+
* @param columns - Index column 이름들
|
|
152
|
+
* @returns IndexBuilder 인스턴스
|
|
153
153
|
*
|
|
154
154
|
* @example
|
|
155
155
|
* ```typescript
|
|
156
|
-
* i.index("email") //
|
|
157
|
-
* i.index("name", "email") //
|
|
156
|
+
* i.index("email") // 단일 column
|
|
157
|
+
* i.index("name", "email") // 복합 column
|
|
158
158
|
* ```
|
|
159
159
|
*/
|
|
160
160
|
index<TKeys extends TColumnKey[]>(...columns: [...TKeys]): IndexBuilder<TKeys> {
|