@simplysm/orm-common 13.0.68 → 13.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/README.md +54 -1447
  2. package/dist/create-db-context.d.ts +10 -10
  3. package/dist/create-db-context.js +9 -9
  4. package/dist/create-db-context.js.map +1 -1
  5. package/dist/ddl/column-ddl.d.ts +4 -4
  6. package/dist/ddl/initialize.d.ts +17 -17
  7. package/dist/ddl/initialize.js +2 -2
  8. package/dist/ddl/initialize.js.map +1 -1
  9. package/dist/ddl/relation-ddl.d.ts +6 -6
  10. package/dist/ddl/schema-ddl.d.ts +4 -4
  11. package/dist/ddl/table-ddl.d.ts +24 -24
  12. package/dist/ddl/table-ddl.js +4 -4
  13. package/dist/ddl/table-ddl.js.map +1 -1
  14. package/dist/errors/db-transaction-error.d.ts +15 -15
  15. package/dist/errors/db-transaction-error.d.ts.map +1 -1
  16. package/dist/exec/executable.d.ts +23 -23
  17. package/dist/exec/executable.js +3 -3
  18. package/dist/exec/executable.js.map +1 -1
  19. package/dist/exec/queryable.d.ts +160 -160
  20. package/dist/exec/queryable.js +119 -119
  21. package/dist/exec/queryable.js.map +1 -1
  22. package/dist/exec/search-parser.d.ts +37 -37
  23. package/dist/exec/search-parser.d.ts.map +1 -1
  24. package/dist/expr/expr-unit.d.ts +4 -4
  25. package/dist/expr/expr.d.ts +257 -257
  26. package/dist/expr/expr.js +265 -265
  27. package/dist/expr/expr.js.map +1 -1
  28. package/dist/query-builder/base/expr-renderer-base.d.ts +9 -9
  29. package/dist/query-builder/base/expr-renderer-base.js +2 -2
  30. package/dist/query-builder/base/expr-renderer-base.js.map +1 -1
  31. package/dist/query-builder/base/query-builder-base.d.ts +26 -26
  32. package/dist/query-builder/base/query-builder-base.d.ts.map +1 -1
  33. package/dist/query-builder/base/query-builder-base.js +22 -22
  34. package/dist/query-builder/base/query-builder-base.js.map +1 -1
  35. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts +4 -4
  36. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts.map +1 -1
  37. package/dist/query-builder/mssql/mssql-expr-renderer.js +18 -18
  38. package/dist/query-builder/mssql/mssql-expr-renderer.js.map +1 -1
  39. package/dist/query-builder/mssql/mssql-query-builder.d.ts +2 -2
  40. package/dist/query-builder/mssql/mssql-query-builder.d.ts.map +1 -1
  41. package/dist/query-builder/mssql/mssql-query-builder.js +11 -11
  42. package/dist/query-builder/mssql/mssql-query-builder.js.map +1 -1
  43. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts +4 -4
  44. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts.map +1 -1
  45. package/dist/query-builder/mysql/mysql-expr-renderer.js +17 -17
  46. package/dist/query-builder/mysql/mysql-expr-renderer.js.map +1 -1
  47. package/dist/query-builder/mysql/mysql-query-builder.d.ts +8 -8
  48. package/dist/query-builder/mysql/mysql-query-builder.d.ts.map +1 -1
  49. package/dist/query-builder/mysql/mysql-query-builder.js +5 -5
  50. package/dist/query-builder/mysql/mysql-query-builder.js.map +1 -1
  51. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts +4 -4
  52. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +1 -1
  53. package/dist/query-builder/postgresql/postgresql-expr-renderer.js +17 -17
  54. package/dist/query-builder/postgresql/postgresql-expr-renderer.js.map +1 -1
  55. package/dist/query-builder/postgresql/postgresql-query-builder.d.ts +5 -5
  56. package/dist/query-builder/postgresql/postgresql-query-builder.d.ts.map +1 -1
  57. package/dist/query-builder/postgresql/postgresql-query-builder.js +8 -8
  58. package/dist/query-builder/postgresql/postgresql-query-builder.js.map +1 -1
  59. package/dist/query-builder/query-builder.d.ts +1 -1
  60. package/dist/schema/factory/column-builder.d.ts +79 -79
  61. package/dist/schema/factory/column-builder.js +42 -42
  62. package/dist/schema/factory/index-builder.d.ts +39 -39
  63. package/dist/schema/factory/index-builder.js +26 -26
  64. package/dist/schema/factory/relation-builder.d.ts +99 -99
  65. package/dist/schema/factory/relation-builder.d.ts.map +1 -1
  66. package/dist/schema/factory/relation-builder.js +38 -38
  67. package/dist/schema/procedure-builder.d.ts +49 -49
  68. package/dist/schema/procedure-builder.d.ts.map +1 -1
  69. package/dist/schema/procedure-builder.js +33 -33
  70. package/dist/schema/table-builder.d.ts +59 -59
  71. package/dist/schema/table-builder.d.ts.map +1 -1
  72. package/dist/schema/table-builder.js +43 -43
  73. package/dist/schema/view-builder.d.ts +49 -49
  74. package/dist/schema/view-builder.d.ts.map +1 -1
  75. package/dist/schema/view-builder.js +32 -32
  76. package/dist/types/column.d.ts +22 -22
  77. package/dist/types/column.js +1 -1
  78. package/dist/types/column.js.map +1 -1
  79. package/dist/types/db.d.ts +40 -40
  80. package/dist/types/expr.d.ts +59 -59
  81. package/dist/types/expr.d.ts.map +1 -1
  82. package/dist/types/query-def.d.ts +44 -44
  83. package/dist/types/query-def.d.ts.map +1 -1
  84. package/dist/utils/result-parser.d.ts +11 -11
  85. package/dist/utils/result-parser.js +3 -3
  86. package/dist/utils/result-parser.js.map +1 -1
  87. package/package.json +5 -5
  88. package/src/create-db-context.ts +20 -20
  89. package/src/ddl/column-ddl.ts +4 -4
  90. package/src/ddl/initialize.ts +259 -259
  91. package/src/ddl/relation-ddl.ts +89 -89
  92. package/src/ddl/schema-ddl.ts +4 -4
  93. package/src/ddl/table-ddl.ts +189 -189
  94. package/src/errors/db-transaction-error.ts +13 -13
  95. package/src/exec/executable.ts +25 -25
  96. package/src/exec/queryable.ts +2033 -2033
  97. package/src/exec/search-parser.ts +57 -57
  98. package/src/expr/expr-unit.ts +4 -4
  99. package/src/expr/expr.ts +2140 -2140
  100. package/src/query-builder/base/expr-renderer-base.ts +237 -237
  101. package/src/query-builder/base/query-builder-base.ts +213 -213
  102. package/src/query-builder/mssql/mssql-expr-renderer.ts +607 -607
  103. package/src/query-builder/mssql/mssql-query-builder.ts +650 -650
  104. package/src/query-builder/mysql/mysql-expr-renderer.ts +613 -613
  105. package/src/query-builder/mysql/mysql-query-builder.ts +759 -759
  106. package/src/query-builder/postgresql/postgresql-expr-renderer.ts +611 -611
  107. package/src/query-builder/postgresql/postgresql-query-builder.ts +686 -686
  108. package/src/query-builder/query-builder.ts +19 -19
  109. package/src/schema/factory/column-builder.ts +423 -423
  110. package/src/schema/factory/index-builder.ts +164 -164
  111. package/src/schema/factory/relation-builder.ts +453 -453
  112. package/src/schema/procedure-builder.ts +232 -232
  113. package/src/schema/table-builder.ts +319 -319
  114. package/src/schema/view-builder.ts +221 -221
  115. package/src/types/column.ts +188 -188
  116. package/src/types/db.ts +208 -208
  117. package/src/types/expr.ts +697 -697
  118. package/src/types/query-def.ts +513 -513
  119. package/src/utils/result-parser.ts +458 -458
  120. package/tests/db-context/create-db-context.spec.ts +224 -0
  121. package/tests/db-context/define-db-context.spec.ts +68 -0
  122. package/tests/ddl/basic.expected.ts +341 -0
  123. package/tests/ddl/basic.spec.ts +714 -0
  124. package/tests/ddl/column-builder.expected.ts +310 -0
  125. package/tests/ddl/column-builder.spec.ts +637 -0
  126. package/tests/ddl/index-builder.expected.ts +38 -0
  127. package/tests/ddl/index-builder.spec.ts +202 -0
  128. package/tests/ddl/procedure-builder.expected.ts +52 -0
  129. package/tests/ddl/procedure-builder.spec.ts +234 -0
  130. package/tests/ddl/relation-builder.expected.ts +36 -0
  131. package/tests/ddl/relation-builder.spec.ts +372 -0
  132. package/tests/ddl/table-builder.expected.ts +113 -0
  133. package/tests/ddl/table-builder.spec.ts +433 -0
  134. package/tests/ddl/view-builder.expected.ts +38 -0
  135. package/tests/ddl/view-builder.spec.ts +176 -0
  136. package/tests/dml/delete.expected.ts +96 -0
  137. package/tests/dml/delete.spec.ts +160 -0
  138. package/tests/dml/insert.expected.ts +192 -0
  139. package/tests/dml/insert.spec.ts +288 -0
  140. package/tests/dml/update.expected.ts +176 -0
  141. package/tests/dml/update.spec.ts +318 -0
  142. package/tests/dml/upsert.expected.ts +215 -0
  143. package/tests/dml/upsert.spec.ts +242 -0
  144. package/tests/errors/queryable-errors.spec.ts +177 -0
  145. package/tests/escape.spec.ts +100 -0
  146. package/tests/examples/pivot.expected.ts +211 -0
  147. package/tests/examples/pivot.spec.ts +533 -0
  148. package/tests/examples/sampling.expected.ts +69 -0
  149. package/tests/examples/sampling.spec.ts +104 -0
  150. package/tests/examples/unpivot.expected.ts +120 -0
  151. package/tests/examples/unpivot.spec.ts +226 -0
  152. package/tests/exec/search-parser.spec.ts +283 -0
  153. package/tests/executable/basic.expected.ts +18 -0
  154. package/tests/executable/basic.spec.ts +54 -0
  155. package/tests/expr/comparison.expected.ts +282 -0
  156. package/tests/expr/comparison.spec.ts +400 -0
  157. package/tests/expr/conditional.expected.ts +134 -0
  158. package/tests/expr/conditional.spec.ts +276 -0
  159. package/tests/expr/date.expected.ts +332 -0
  160. package/tests/expr/date.spec.ts +526 -0
  161. package/tests/expr/math.expected.ts +62 -0
  162. package/tests/expr/math.spec.ts +106 -0
  163. package/tests/expr/string.expected.ts +218 -0
  164. package/tests/expr/string.spec.ts +356 -0
  165. package/tests/expr/utility.expected.ts +147 -0
  166. package/tests/expr/utility.spec.ts +182 -0
  167. package/tests/select/basic.expected.ts +322 -0
  168. package/tests/select/basic.spec.ts +502 -0
  169. package/tests/select/filter.expected.ts +357 -0
  170. package/tests/select/filter.spec.ts +1068 -0
  171. package/tests/select/group.expected.ts +169 -0
  172. package/tests/select/group.spec.ts +244 -0
  173. package/tests/select/join.expected.ts +582 -0
  174. package/tests/select/join.spec.ts +805 -0
  175. package/tests/select/order.expected.ts +150 -0
  176. package/tests/select/order.spec.ts +189 -0
  177. package/tests/select/recursive-cte.expected.ts +244 -0
  178. package/tests/select/recursive-cte.spec.ts +514 -0
  179. package/tests/select/result-meta.spec.ts +270 -0
  180. package/tests/select/subquery.expected.ts +363 -0
  181. package/tests/select/subquery.spec.ts +537 -0
  182. package/tests/select/view.expected.ts +155 -0
  183. package/tests/select/view.spec.ts +235 -0
  184. package/tests/select/window.expected.ts +345 -0
  185. package/tests/select/window.spec.ts +618 -0
  186. package/tests/setup/MockExecutor.ts +18 -0
  187. package/tests/setup/TestDbContext.ts +59 -0
  188. package/tests/setup/models/Company.ts +13 -0
  189. package/tests/setup/models/Employee.ts +10 -0
  190. package/tests/setup/models/MonthlySales.ts +11 -0
  191. package/tests/setup/models/Post.ts +16 -0
  192. package/tests/setup/models/Sales.ts +10 -0
  193. package/tests/setup/models/User.ts +19 -0
  194. package/tests/setup/procedure/GetAllUsers.ts +9 -0
  195. package/tests/setup/procedure/GetUserById.ts +12 -0
  196. package/tests/setup/test-utils.ts +72 -0
  197. package/tests/setup/views/ActiveUsers.ts +8 -0
  198. package/tests/setup/views/UserSummary.ts +11 -0
  199. package/tests/types/nullable-queryable-record.spec.ts +145 -0
  200. package/tests/utils/result-parser-perf.spec.ts +210 -0
  201. package/tests/utils/result-parser.spec.ts +701 -0
  202. package/docs/expressions.md +0 -172
  203. package/docs/queries.md +0 -444
  204. 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 IndexBuilder 인스턴스
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 IndexBuilder 인스턴스
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
- * 각 컬럼에 대해 ASC 또는 DESC 지정
89
- *
90
- * @param orderBy - 컬럼별 정렬 순서 (컬럼 수와 동일해야 함)
91
- * @returns IndexBuilder 인스턴스
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 - 인덱스 설명 (DDL 주석으로 사용)
110
- * @returns IndexBuilder 인스턴스
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
+ }