@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
|
@@ -1,164 +1,164 @@
|
|
|
1
|
-
// ============================================
|
|
2
|
-
// IndexBuilder
|
|
3
|
-
// ============================================
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* Fluent API를 통해
|
|
9
|
-
* TableBuilder.indexes()
|
|
10
|
-
*
|
|
11
|
-
* @template TKeys -
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* Table("User")
|
|
16
|
-
* .columns((c) => ({
|
|
17
|
-
* id: c.bigint(),
|
|
18
|
-
* email: c.varchar(200),
|
|
19
|
-
* name: c.varchar(100),
|
|
20
|
-
* createdAt: c.datetime(),
|
|
21
|
-
* }))
|
|
22
|
-
* .indexes((i) => [
|
|
23
|
-
* // 유니크
|
|
24
|
-
* i.index("email").unique(),
|
|
25
|
-
*
|
|
26
|
-
* // 복합
|
|
27
|
-
* i.index("name", "createdAt").orderBy("ASC", "DESC"),
|
|
28
|
-
*
|
|
29
|
-
* // 커스텀 이름
|
|
30
|
-
* i.index("createdAt").name("IX_User_CreatedAt"),
|
|
31
|
-
* ]);
|
|
32
|
-
* ```
|
|
33
|
-
*
|
|
34
|
-
* @see {@link createIndexFactory}
|
|
35
|
-
* @see {@link TableBuilder}
|
|
36
|
-
*/
|
|
37
|
-
export class IndexBuilder<TKeys extends string[]> {
|
|
38
|
-
/**
|
|
39
|
-
* @param meta -
|
|
40
|
-
* @param meta.columns -
|
|
41
|
-
* @param meta.name -
|
|
42
|
-
* @param meta.unique - 유니크
|
|
43
|
-
* @param meta.orderBy -
|
|
44
|
-
* @param meta.description -
|
|
45
|
-
*/
|
|
46
|
-
constructor(
|
|
47
|
-
readonly meta: {
|
|
48
|
-
columns: TKeys;
|
|
49
|
-
name?: string;
|
|
50
|
-
unique?: boolean;
|
|
51
|
-
orderBy?: { [K in keyof TKeys]: "ASC" | "DESC" };
|
|
52
|
-
description?: string;
|
|
53
|
-
},
|
|
54
|
-
) {}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* @param name -
|
|
60
|
-
* @returns
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* ```typescript
|
|
64
|
-
* i.index("email").name("IX_User_Email")
|
|
65
|
-
* ```
|
|
66
|
-
*/
|
|
67
|
-
name(name: string): IndexBuilder<TKeys> {
|
|
68
|
-
return new IndexBuilder({ ...this.meta, name });
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* 유니크
|
|
73
|
-
*
|
|
74
|
-
* @returns
|
|
75
|
-
*
|
|
76
|
-
* @example
|
|
77
|
-
* ```typescript
|
|
78
|
-
* i.index("email").unique()
|
|
79
|
-
* ```
|
|
80
|
-
*/
|
|
81
|
-
unique(): IndexBuilder<TKeys> {
|
|
82
|
-
return new IndexBuilder({ ...this.meta, unique: true });
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* 각
|
|
89
|
-
*
|
|
90
|
-
* @param orderBy -
|
|
91
|
-
* @returns
|
|
92
|
-
*
|
|
93
|
-
* @example
|
|
94
|
-
* ```typescript
|
|
95
|
-
* // 단일
|
|
96
|
-
* i.index("createdAt").orderBy("DESC")
|
|
97
|
-
*
|
|
98
|
-
* // 복합
|
|
99
|
-
* i.index("status", "createdAt").orderBy("ASC", "DESC")
|
|
100
|
-
* ```
|
|
101
|
-
*/
|
|
102
|
-
orderBy(...orderBy: { [K in keyof TKeys]: "ASC" | "DESC" }): IndexBuilder<TKeys> {
|
|
103
|
-
return new IndexBuilder({ ...this.meta, orderBy });
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* @param description -
|
|
110
|
-
* @returns
|
|
111
|
-
*/
|
|
112
|
-
description(description: string): IndexBuilder<TKeys> {
|
|
113
|
-
return new IndexBuilder({ ...this.meta, description });
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// ============================================
|
|
118
|
-
// IndexFactory
|
|
119
|
-
// ============================================
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
* TableBuilder.indexes()
|
|
125
|
-
*
|
|
126
|
-
* @template TColumnKey -
|
|
127
|
-
* @returns
|
|
128
|
-
*
|
|
129
|
-
* @example
|
|
130
|
-
* ```typescript
|
|
131
|
-
* Table("User")
|
|
132
|
-
* .columns((c) => ({
|
|
133
|
-
* id: c.bigint(),
|
|
134
|
-
* email: c.varchar(200),
|
|
135
|
-
* name: c.varchar(100),
|
|
136
|
-
* }))
|
|
137
|
-
* .indexes((i) => [
|
|
138
|
-
* i.index("email").unique(),
|
|
139
|
-
* i.index("name"),
|
|
140
|
-
* ]);
|
|
141
|
-
* ```
|
|
142
|
-
*
|
|
143
|
-
* @see {@link IndexBuilder}
|
|
144
|
-
*/
|
|
145
|
-
export function createIndexFactory<TColumnKey extends string>() {
|
|
146
|
-
return {
|
|
147
|
-
/**
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* @template TKeys -
|
|
151
|
-
* @param columns -
|
|
152
|
-
* @returns IndexBuilder
|
|
153
|
-
*
|
|
154
|
-
* @example
|
|
155
|
-
* ```typescript
|
|
156
|
-
* i.index("email") // 단일
|
|
157
|
-
* i.index("name", "email") // 복합
|
|
158
|
-
* ```
|
|
159
|
-
*/
|
|
160
|
-
index<TKeys extends TColumnKey[]>(...columns: [...TKeys]): IndexBuilder<TKeys> {
|
|
161
|
-
return new IndexBuilder({ columns });
|
|
162
|
-
},
|
|
163
|
-
};
|
|
164
|
-
}
|
|
1
|
+
// ============================================
|
|
2
|
+
// IndexBuilder
|
|
3
|
+
// ============================================
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Index definition builder
|
|
7
|
+
*
|
|
8
|
+
* Fluent API를 통해 Index의 column, 유니크 여부, sorting 순서를 definition
|
|
9
|
+
* TableBuilder.indexes()used in
|
|
10
|
+
*
|
|
11
|
+
* @template TKeys - Index column key array type
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* Table("User")
|
|
16
|
+
* .columns((c) => ({
|
|
17
|
+
* id: c.bigint(),
|
|
18
|
+
* email: c.varchar(200),
|
|
19
|
+
* name: c.varchar(100),
|
|
20
|
+
* createdAt: c.datetime(),
|
|
21
|
+
* }))
|
|
22
|
+
* .indexes((i) => [
|
|
23
|
+
* // 유니크 Index
|
|
24
|
+
* i.index("email").unique(),
|
|
25
|
+
*
|
|
26
|
+
* // 복합 Index + sorting order
|
|
27
|
+
* i.index("name", "createdAt").orderBy("ASC", "DESC"),
|
|
28
|
+
*
|
|
29
|
+
* // 커스텀 이름
|
|
30
|
+
* i.index("createdAt").name("IX_User_CreatedAt"),
|
|
31
|
+
* ]);
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @see {@link createIndexFactory} Index factory
|
|
35
|
+
* @see {@link TableBuilder} Table builder
|
|
36
|
+
*/
|
|
37
|
+
export class IndexBuilder<TKeys extends string[]> {
|
|
38
|
+
/**
|
|
39
|
+
* @param meta - Index Metadata
|
|
40
|
+
* @param meta.columns - Index column array
|
|
41
|
+
* @param meta.name - Index 이름 (Select)
|
|
42
|
+
* @param meta.unique - 유니크 Index 여부
|
|
43
|
+
* @param meta.orderBy - Column별 sorting order
|
|
44
|
+
* @param meta.description - Index description
|
|
45
|
+
*/
|
|
46
|
+
constructor(
|
|
47
|
+
readonly meta: {
|
|
48
|
+
columns: TKeys;
|
|
49
|
+
name?: string;
|
|
50
|
+
unique?: boolean;
|
|
51
|
+
orderBy?: { [K in keyof TKeys]: "ASC" | "DESC" };
|
|
52
|
+
description?: string;
|
|
53
|
+
},
|
|
54
|
+
) {}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Index set name
|
|
58
|
+
*
|
|
59
|
+
* @param name - Index 이름
|
|
60
|
+
* @returns new IndexBuilder instance
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```typescript
|
|
64
|
+
* i.index("email").name("IX_User_Email")
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
name(name: string): IndexBuilder<TKeys> {
|
|
68
|
+
return new IndexBuilder({ ...this.meta, name });
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* 유니크 Index 설정
|
|
73
|
+
*
|
|
74
|
+
* @returns new IndexBuilder instance
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* i.index("email").unique()
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
unique(): IndexBuilder<TKeys> {
|
|
82
|
+
return new IndexBuilder({ ...this.meta, unique: true });
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* sorting order 설정
|
|
87
|
+
*
|
|
88
|
+
* 각 column에 대해 ASC 또는 DESC 지정
|
|
89
|
+
*
|
|
90
|
+
* @param orderBy - Column별 sorting order (column 수와 동일해야 함)
|
|
91
|
+
* @returns new IndexBuilder instance
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* // 단일 column
|
|
96
|
+
* i.index("createdAt").orderBy("DESC")
|
|
97
|
+
*
|
|
98
|
+
* // 복합 column
|
|
99
|
+
* i.index("status", "createdAt").orderBy("ASC", "DESC")
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
orderBy(...orderBy: { [K in keyof TKeys]: "ASC" | "DESC" }): IndexBuilder<TKeys> {
|
|
103
|
+
return new IndexBuilder({ ...this.meta, orderBy });
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Index set description
|
|
108
|
+
*
|
|
109
|
+
* @param description - Index description (DDL Comment으로 사용)
|
|
110
|
+
* @returns new IndexBuilder instance
|
|
111
|
+
*/
|
|
112
|
+
description(description: string): IndexBuilder<TKeys> {
|
|
113
|
+
return new IndexBuilder({ ...this.meta, description });
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// ============================================
|
|
118
|
+
// IndexFactory
|
|
119
|
+
// ============================================
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Index builder factory Generate
|
|
123
|
+
*
|
|
124
|
+
* TableBuilder.indexes()used in하는 Index factory
|
|
125
|
+
*
|
|
126
|
+
* @template TColumnKey - Table column key type
|
|
127
|
+
* @returns Index Generate 메서드를 포함한 object
|
|
128
|
+
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```typescript
|
|
131
|
+
* Table("User")
|
|
132
|
+
* .columns((c) => ({
|
|
133
|
+
* id: c.bigint(),
|
|
134
|
+
* email: c.varchar(200),
|
|
135
|
+
* name: c.varchar(100),
|
|
136
|
+
* }))
|
|
137
|
+
* .indexes((i) => [
|
|
138
|
+
* i.index("email").unique(),
|
|
139
|
+
* i.index("name"),
|
|
140
|
+
* ]);
|
|
141
|
+
* ```
|
|
142
|
+
*
|
|
143
|
+
* @see {@link IndexBuilder} Index builder class
|
|
144
|
+
*/
|
|
145
|
+
export function createIndexFactory<TColumnKey extends string>() {
|
|
146
|
+
return {
|
|
147
|
+
/**
|
|
148
|
+
* Index Generate
|
|
149
|
+
*
|
|
150
|
+
* @template TKeys - Index column key array type
|
|
151
|
+
* @param columns - Index column명들
|
|
152
|
+
* @returns IndexBuilder instance
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```typescript
|
|
156
|
+
* i.index("email") // 단일 column
|
|
157
|
+
* i.index("name", "email") // 복합 column
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
index<TKeys extends TColumnKey[]>(...columns: [...TKeys]): IndexBuilder<TKeys> {
|
|
161
|
+
return new IndexBuilder({ columns });
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|