@simplysm/orm-common 13.0.99 → 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.
Files changed (238) hide show
  1. package/dist/create-db-context.d.ts +10 -10
  2. package/dist/create-db-context.js +312 -276
  3. package/dist/create-db-context.js.map +1 -6
  4. package/dist/ddl/column-ddl.d.ts +4 -4
  5. package/dist/ddl/column-ddl.js +41 -35
  6. package/dist/ddl/column-ddl.js.map +1 -6
  7. package/dist/ddl/initialize.d.ts +17 -17
  8. package/dist/ddl/initialize.js +200 -142
  9. package/dist/ddl/initialize.js.map +1 -6
  10. package/dist/ddl/relation-ddl.d.ts +6 -6
  11. package/dist/ddl/relation-ddl.js +55 -48
  12. package/dist/ddl/relation-ddl.js.map +1 -6
  13. package/dist/ddl/schema-ddl.d.ts +4 -4
  14. package/dist/ddl/schema-ddl.js +21 -15
  15. package/dist/ddl/schema-ddl.js.map +1 -6
  16. package/dist/ddl/table-ddl.d.ts +20 -20
  17. package/dist/ddl/table-ddl.js +139 -93
  18. package/dist/ddl/table-ddl.js.map +1 -6
  19. package/dist/define-db-context.js +10 -13
  20. package/dist/define-db-context.js.map +1 -6
  21. package/dist/errors/db-transaction-error.d.ts +15 -15
  22. package/dist/errors/db-transaction-error.d.ts.map +1 -1
  23. package/dist/errors/db-transaction-error.js +53 -19
  24. package/dist/errors/db-transaction-error.js.map +1 -6
  25. package/dist/exec/executable.d.ts +23 -23
  26. package/dist/exec/executable.js +94 -40
  27. package/dist/exec/executable.js.map +1 -6
  28. package/dist/exec/queryable.d.ts +97 -97
  29. package/dist/exec/queryable.js +1310 -1204
  30. package/dist/exec/queryable.js.map +1 -6
  31. package/dist/exec/search-parser.d.ts +31 -31
  32. package/dist/exec/search-parser.d.ts.map +1 -1
  33. package/dist/exec/search-parser.js +158 -59
  34. package/dist/exec/search-parser.js.map +1 -6
  35. package/dist/expr/expr-unit.d.ts +4 -4
  36. package/dist/expr/expr-unit.js +24 -18
  37. package/dist/expr/expr-unit.js.map +1 -6
  38. package/dist/expr/expr.d.ts +6 -6
  39. package/dist/expr/expr.js +1872 -1844
  40. package/dist/expr/expr.js.map +1 -6
  41. package/dist/index.js +23 -1
  42. package/dist/index.js.map +1 -6
  43. package/dist/models/system-migration.js +7 -7
  44. package/dist/models/system-migration.js.map +1 -6
  45. package/dist/query-builder/base/expr-renderer-base.d.ts +10 -10
  46. package/dist/query-builder/base/expr-renderer-base.js +27 -21
  47. package/dist/query-builder/base/expr-renderer-base.js.map +1 -6
  48. package/dist/query-builder/base/query-builder-base.d.ts +21 -21
  49. package/dist/query-builder/base/query-builder-base.d.ts.map +1 -1
  50. package/dist/query-builder/base/query-builder-base.js +90 -80
  51. package/dist/query-builder/base/query-builder-base.js.map +1 -6
  52. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts +4 -4
  53. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts.map +1 -1
  54. package/dist/query-builder/mssql/mssql-expr-renderer.js +447 -420
  55. package/dist/query-builder/mssql/mssql-expr-renderer.js.map +1 -6
  56. package/dist/query-builder/mssql/mssql-query-builder.js +483 -443
  57. package/dist/query-builder/mssql/mssql-query-builder.js.map +1 -6
  58. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts +4 -4
  59. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts.map +1 -1
  60. package/dist/query-builder/mysql/mysql-expr-renderer.js +451 -419
  61. package/dist/query-builder/mysql/mysql-expr-renderer.js.map +1 -6
  62. package/dist/query-builder/mysql/mysql-query-builder.js +570 -479
  63. package/dist/query-builder/mysql/mysql-query-builder.js.map +1 -6
  64. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts +4 -4
  65. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +1 -1
  66. package/dist/query-builder/postgresql/postgresql-expr-renderer.js +449 -422
  67. package/dist/query-builder/postgresql/postgresql-expr-renderer.js.map +1 -6
  68. package/dist/query-builder/postgresql/postgresql-query-builder.js +511 -460
  69. package/dist/query-builder/postgresql/postgresql-query-builder.js.map +1 -6
  70. package/dist/query-builder/query-builder.d.ts +1 -1
  71. package/dist/query-builder/query-builder.js +13 -13
  72. package/dist/query-builder/query-builder.js.map +1 -6
  73. package/dist/schema/factory/column-builder.d.ts +84 -84
  74. package/dist/schema/factory/column-builder.js +248 -185
  75. package/dist/schema/factory/column-builder.js.map +1 -6
  76. package/dist/schema/factory/index-builder.d.ts +38 -38
  77. package/dist/schema/factory/index-builder.js +144 -85
  78. package/dist/schema/factory/index-builder.js.map +1 -6
  79. package/dist/schema/factory/relation-builder.d.ts +91 -91
  80. package/dist/schema/factory/relation-builder.d.ts.map +1 -1
  81. package/dist/schema/factory/relation-builder.js +274 -136
  82. package/dist/schema/factory/relation-builder.js.map +1 -6
  83. package/dist/schema/procedure-builder.d.ts +51 -51
  84. package/dist/schema/procedure-builder.d.ts.map +1 -1
  85. package/dist/schema/procedure-builder.js +205 -131
  86. package/dist/schema/procedure-builder.js.map +1 -6
  87. package/dist/schema/table-builder.d.ts +55 -55
  88. package/dist/schema/table-builder.d.ts.map +1 -1
  89. package/dist/schema/table-builder.js +274 -205
  90. package/dist/schema/table-builder.js.map +1 -6
  91. package/dist/schema/view-builder.d.ts +44 -44
  92. package/dist/schema/view-builder.d.ts.map +1 -1
  93. package/dist/schema/view-builder.js +189 -116
  94. package/dist/schema/view-builder.js.map +1 -6
  95. package/dist/types/column.js +60 -30
  96. package/dist/types/column.js.map +1 -6
  97. package/dist/types/db-context-def.d.ts +9 -9
  98. package/dist/types/db-context-def.js +2 -1
  99. package/dist/types/db-context-def.js.map +1 -6
  100. package/dist/types/db.d.ts +47 -47
  101. package/dist/types/db.js +15 -5
  102. package/dist/types/db.js.map +1 -6
  103. package/dist/types/expr.d.ts +81 -81
  104. package/dist/types/expr.d.ts.map +1 -1
  105. package/dist/types/expr.js +3 -1
  106. package/dist/types/expr.js.map +1 -6
  107. package/dist/types/query-def.d.ts +46 -46
  108. package/dist/types/query-def.d.ts.map +1 -1
  109. package/dist/types/query-def.js +31 -24
  110. package/dist/types/query-def.js.map +1 -6
  111. package/dist/utils/result-parser.js +362 -221
  112. package/dist/utils/result-parser.js.map +1 -6
  113. package/package.json +5 -7
  114. package/src/create-db-context.ts +31 -31
  115. package/src/ddl/column-ddl.ts +4 -4
  116. package/src/ddl/initialize.ts +38 -38
  117. package/src/ddl/relation-ddl.ts +6 -6
  118. package/src/ddl/schema-ddl.ts +4 -4
  119. package/src/ddl/table-ddl.ts +24 -24
  120. package/src/errors/db-transaction-error.ts +13 -13
  121. package/src/exec/executable.ts +25 -25
  122. package/src/exec/queryable.ts +134 -134
  123. package/src/exec/search-parser.ts +50 -50
  124. package/src/expr/expr-unit.ts +4 -4
  125. package/src/expr/expr.ts +13 -13
  126. package/src/index.ts +8 -8
  127. package/src/models/system-migration.ts +1 -1
  128. package/src/query-builder/base/expr-renderer-base.ts +21 -21
  129. package/src/query-builder/base/query-builder-base.ts +33 -33
  130. package/src/query-builder/mssql/mssql-expr-renderer.ts +11 -11
  131. package/src/query-builder/mssql/mssql-query-builder.ts +11 -11
  132. package/src/query-builder/mysql/mysql-expr-renderer.ts +15 -15
  133. package/src/query-builder/mysql/mysql-query-builder.ts +3 -3
  134. package/src/query-builder/postgresql/postgresql-expr-renderer.ts +9 -9
  135. package/src/query-builder/postgresql/postgresql-query-builder.ts +7 -7
  136. package/src/query-builder/query-builder.ts +1 -1
  137. package/src/schema/factory/column-builder.ts +86 -86
  138. package/src/schema/factory/index-builder.ts +38 -38
  139. package/src/schema/factory/relation-builder.ts +93 -93
  140. package/src/schema/procedure-builder.ts +52 -52
  141. package/src/schema/table-builder.ts +56 -56
  142. package/src/schema/view-builder.ts +45 -45
  143. package/src/types/column.ts +1 -1
  144. package/src/types/db-context-def.ts +15 -15
  145. package/src/types/db.ts +50 -50
  146. package/src/types/expr.ts +103 -103
  147. package/src/types/query-def.ts +50 -50
  148. package/src/utils/result-parser.ts +39 -39
  149. package/README.md +0 -192
  150. package/docs/core.md +0 -234
  151. package/docs/expression.md +0 -234
  152. package/docs/query-builder.md +0 -93
  153. package/docs/queryable.md +0 -198
  154. package/docs/schema-builders.md +0 -463
  155. package/docs/types.md +0 -445
  156. package/docs/utilities.md +0 -27
  157. package/tests/db-context/create-db-context.spec.ts +0 -193
  158. package/tests/db-context/define-db-context.spec.ts +0 -17
  159. package/tests/ddl/basic.expected.ts +0 -341
  160. package/tests/ddl/basic.spec.ts +0 -557
  161. package/tests/ddl/column-builder.expected.ts +0 -310
  162. package/tests/ddl/column-builder.spec.ts +0 -525
  163. package/tests/ddl/index-builder.expected.ts +0 -38
  164. package/tests/ddl/index-builder.spec.ts +0 -148
  165. package/tests/ddl/procedure-builder.expected.ts +0 -52
  166. package/tests/ddl/procedure-builder.spec.ts +0 -128
  167. package/tests/ddl/relation-builder.expected.ts +0 -36
  168. package/tests/ddl/relation-builder.spec.ts +0 -171
  169. package/tests/ddl/table-builder.expected.ts +0 -113
  170. package/tests/ddl/table-builder.spec.ts +0 -399
  171. package/tests/ddl/view-builder.expected.ts +0 -38
  172. package/tests/ddl/view-builder.spec.ts +0 -116
  173. package/tests/dml/delete.expected.ts +0 -96
  174. package/tests/dml/delete.spec.ts +0 -127
  175. package/tests/dml/insert.expected.ts +0 -192
  176. package/tests/dml/insert.spec.ts +0 -210
  177. package/tests/dml/update.expected.ts +0 -176
  178. package/tests/dml/update.spec.ts +0 -222
  179. package/tests/dml/upsert.expected.ts +0 -215
  180. package/tests/dml/upsert.spec.ts +0 -190
  181. package/tests/errors/queryable-errors.spec.ts +0 -126
  182. package/tests/escape.spec.ts +0 -59
  183. package/tests/examples/pivot.expected.ts +0 -211
  184. package/tests/examples/pivot.spec.ts +0 -200
  185. package/tests/examples/sampling.expected.ts +0 -69
  186. package/tests/examples/sampling.spec.ts +0 -42
  187. package/tests/examples/unpivot.expected.ts +0 -120
  188. package/tests/examples/unpivot.spec.ts +0 -161
  189. package/tests/exec/search-parser.spec.ts +0 -267
  190. package/tests/executable/basic.expected.ts +0 -18
  191. package/tests/executable/basic.spec.ts +0 -54
  192. package/tests/expr/comparison.expected.ts +0 -282
  193. package/tests/expr/comparison.spec.ts +0 -334
  194. package/tests/expr/conditional.expected.ts +0 -134
  195. package/tests/expr/conditional.spec.ts +0 -249
  196. package/tests/expr/date.expected.ts +0 -332
  197. package/tests/expr/date.spec.ts +0 -459
  198. package/tests/expr/math.expected.ts +0 -62
  199. package/tests/expr/math.spec.ts +0 -59
  200. package/tests/expr/string.expected.ts +0 -218
  201. package/tests/expr/string.spec.ts +0 -300
  202. package/tests/expr/utility.expected.ts +0 -147
  203. package/tests/expr/utility.spec.ts +0 -155
  204. package/tests/select/basic.expected.ts +0 -322
  205. package/tests/select/basic.spec.ts +0 -433
  206. package/tests/select/filter.expected.ts +0 -357
  207. package/tests/select/filter.spec.ts +0 -954
  208. package/tests/select/group.expected.ts +0 -169
  209. package/tests/select/group.spec.ts +0 -159
  210. package/tests/select/join.expected.ts +0 -582
  211. package/tests/select/join.spec.ts +0 -692
  212. package/tests/select/order.expected.ts +0 -150
  213. package/tests/select/order.spec.ts +0 -140
  214. package/tests/select/recursive-cte.expected.ts +0 -244
  215. package/tests/select/recursive-cte.spec.ts +0 -514
  216. package/tests/select/result-meta.spec.ts +0 -270
  217. package/tests/select/subquery.expected.ts +0 -363
  218. package/tests/select/subquery.spec.ts +0 -441
  219. package/tests/select/view.expected.ts +0 -155
  220. package/tests/select/view.spec.ts +0 -235
  221. package/tests/select/window.expected.ts +0 -345
  222. package/tests/select/window.spec.ts +0 -433
  223. package/tests/setup/MockExecutor.ts +0 -18
  224. package/tests/setup/TestDbContext.ts +0 -59
  225. package/tests/setup/models/Company.ts +0 -13
  226. package/tests/setup/models/Employee.ts +0 -10
  227. package/tests/setup/models/MonthlySales.ts +0 -11
  228. package/tests/setup/models/Post.ts +0 -16
  229. package/tests/setup/models/Sales.ts +0 -10
  230. package/tests/setup/models/User.ts +0 -19
  231. package/tests/setup/procedure/GetAllUsers.ts +0 -9
  232. package/tests/setup/procedure/GetUserById.ts +0 -12
  233. package/tests/setup/test-utils.ts +0 -72
  234. package/tests/setup/views/ActiveUsers.ts +0 -8
  235. package/tests/setup/views/UserSummary.ts +0 -11
  236. package/tests/types/nullable-queryable-record.spec.ts +0 -97
  237. package/tests/utils/result-parser-perf.spec.ts +0 -143
  238. package/tests/utils/result-parser.spec.ts +0 -667
@@ -1,208 +1,277 @@
1
- import {
2
- createColumnFactory
3
- } from "./factory/column-builder.js";
1
+ import { createColumnFactory, } from "./factory/column-builder.js";
4
2
  import { createIndexFactory } from "./factory/index-builder.js";
5
- import {
6
- createRelationFactory
7
- } from "./factory/relation-builder.js";
8
- class TableBuilder {
9
- /**
10
- * @param meta - Table Metadata
11
- * @param meta.name - Table name
12
- * @param meta.description - Table description (comment)
13
- * @param meta.database - Database name
14
- * @param meta.schema - Schema name (MSSQL/PostgreSQL)
15
- * @param meta.columns - Column definition
16
- * @param meta.primaryKey - PK column array
17
- * @param meta.relations - Relation definition
18
- * @param meta.indexes - Index definition
19
- */
20
- constructor(meta) {
21
- this.meta = meta;
22
- }
23
- /** Column definition (type for inference) */
24
- $columns;
25
- /** Relation definition (type for inference) */
26
- $relations;
27
- /** Full Type inference (column + relation) */
28
- $inferSelect;
29
- /** Column-only Type inference */
30
- $inferColumns;
31
- /** INSERT Type inference (autoIncrement excluded, nullable/default are optional) */
32
- $inferInsert;
33
- /** UPDATE Type inference (all fields optional) */
34
- $inferUpdate;
35
- /**
36
- * Table set description
37
- *
38
- * @param desc - Table description (used as DDL Comment)
39
- * @returns new TableBuilder instance
40
- */
41
- description(desc) {
42
- return new TableBuilder({ ...this.meta, description: desc });
43
- }
44
- /**
45
- * Database set name
46
- *
47
- * @param db - Database name
48
- * @returns new TableBuilder instance
49
- *
50
- * @example
51
- * ```typescript
52
- * const User = Table("User").database("mydb");
53
- * ```
54
- */
55
- database(db) {
56
- return new TableBuilder({ ...this.meta, database: db });
57
- }
58
- /**
59
- * schema set name
60
- *
61
- * Used in MSSQL, PostgreSQL
62
- *
63
- * @param schema - Schema name (MSSQL: dbo, PostgreSQL: public)
64
- * @returns new TableBuilder instance
65
- *
66
- * @example
67
- * ```typescript
68
- * const User = Table("User")
69
- * .database("mydb")
70
- * .schema("custom_schema");
71
- * ```
72
- */
73
- schema(schema) {
74
- return new TableBuilder({ ...this.meta, schema });
75
- }
76
- /**
77
- * Column definition
78
- *
79
- * Type-safe Column definition through column factory
80
- *
81
- * @template TNewColumnDefs - New Column definition type
82
- * @param fn - Function that receives a Column factory and returns Column definitions
83
- * @returns new TableBuilder instance
84
- *
85
- * @example
86
- * ```typescript
87
- * const User = Table("User")
88
- * .columns((c) => ({
89
- * id: c.bigint().autoIncrement(),
90
- * name: c.varchar(100),
91
- * email: c.varchar(200).nullable(),
92
- * createdAt: c.datetime().default("CURRENT_TIMESTAMP"),
93
- * }));
94
- * ```
95
- */
96
- columns(fn) {
97
- return new TableBuilder({
98
- ...this.meta,
99
- columns: fn(createColumnFactory())
100
- });
101
- }
102
- /**
103
- * Primary Key configuration
104
- *
105
- * @param columns - Column names composing the PK (composite PK supported)
106
- * @returns new TableBuilder instance
107
- *
108
- * @example
109
- * ```typescript
110
- * // Single PK
111
- * const User = Table("User")
112
- * .columns((c) => ({ id: c.bigint() }))
113
- * .primaryKey("id");
114
- *
115
- * // Composite PK
116
- * const UserRole = Table("UserRole")
117
- * .columns((c) => ({
118
- * userId: c.bigint(),
119
- * roleId: c.bigint(),
120
- * }))
121
- * .primaryKey("userId", "roleId");
122
- * ```
123
- */
124
- primaryKey(...columns) {
125
- return new TableBuilder({
126
- ...this.meta,
127
- primaryKey: columns
128
- });
129
- }
130
- /**
131
- * Index definition
132
- *
133
- * @param fn - Function that receives an Index factory and returns an Index array
134
- * @returns new TableBuilder instance
135
- *
136
- * @example
137
- * ```typescript
138
- * const User = Table("User")
139
- * .columns((c) => ({
140
- * id: c.bigint(),
141
- * email: c.varchar(200),
142
- * name: c.varchar(100),
143
- * }))
144
- * .indexes((i) => [
145
- * i.index("email").unique(),
146
- * i.index("name").orderBy("ASC"),
147
- * ]);
148
- * ```
149
- */
150
- indexes(fn) {
151
- return new TableBuilder({
152
- ...this.meta,
153
- indexes: fn(createIndexFactory())
154
- });
155
- }
156
- /**
157
- * Relation definition
158
- *
159
- * Set up FK, reverse-references, and other inter-Table relations
160
- *
161
- * @template T - Relation definition type
162
- * @param fn - Function that receives a relation factory and returns relation definitions
163
- * @returns new TableBuilder instance
164
- *
165
- * @example
166
- * ```typescript
167
- * const Post = Table("Post")
168
- * .columns((c) => ({
169
- * id: c.bigint().autoIncrement(),
170
- * authorId: c.bigint(),
171
- * title: c.varchar(200),
172
- * }))
173
- * .primaryKey("id")
174
- * .relations((r) => ({
175
- * // FK relation (N:1)
176
- * author: r.foreignKey(["authorId"], () => User),
177
- * }));
178
- *
179
- * const User = Table("User")
180
- * .columns((c) => ({
181
- * id: c.bigint().autoIncrement(),
182
- * name: c.varchar(100),
183
- * }))
184
- * .primaryKey("id")
185
- * .relations((r) => ({
186
- * // Reverse-reference (1:N)
187
- * posts: r.foreignKeyTarget(() => Post, "author"),
188
- * }));
189
- * ```
190
- *
191
- * @see {@link ForeignKeyBuilder} FK builder
192
- * @see {@link ForeignKeyTargetBuilder} FK reverse-reference builder
193
- */
194
- relations(fn) {
195
- return new TableBuilder({
196
- ...this.meta,
197
- relations: fn(createRelationFactory(() => this))
198
- });
199
- }
3
+ import { createRelationFactory, } from "./factory/relation-builder.js";
4
+ // ============================================
5
+ // TableBuilder
6
+ // ============================================
7
+ /**
8
+ * Database Table 정의 builder
9
+ *
10
+ * Fluent API로 Table column, PK, index, 관계를 정의
11
+ * DbContext의 queryable()과 함께 사용하여 타입 안전한 query 구성
12
+ *
13
+ * @template TColumns - Column 정의 레코드 타입
14
+ * @template TRelations - 관계 정의 레코드 타입
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // Table definition
19
+ * const User = Table("User")
20
+ * .database("mydb")
21
+ * .columns((c) => ({
22
+ * id: c.bigint().autoIncrement(),
23
+ * name: c.varchar(100),
24
+ * email: c.varchar(200).nullable(),
25
+ * status: c.varchar(20).default("active"),
26
+ * }))
27
+ * .primaryKey("id")
28
+ * .indexes((i) => [i.index("email").unique()]);
29
+ *
30
+ * // Used in DbContext
31
+ * class MyDb extends DbContext {
32
+ * readonly user = queryable(this, User);
33
+ * }
34
+ * ```
35
+ *
36
+ * @see {@link Table} factory 함수
37
+ * @see {@link queryable} Queryable 생성
38
+ */
39
+ export class TableBuilder {
40
+ meta;
41
+ /** Column 정의 (타입 추론용) */
42
+ $columns;
43
+ /** 관계 정의 (타입 추론용) */
44
+ $relations;
45
+ /** 전체 타입 추론 (column + 관계) */
46
+ $inferSelect;
47
+ /** Column 전용 타입 추론 */
48
+ $inferColumns;
49
+ /** INSERT 타입 추론 (autoIncrement 제외, nullable/default는 optional) */
50
+ $inferInsert;
51
+ /** UPDATE 타입 추론 (모든 필드 optional) */
52
+ $inferUpdate;
53
+ /**
54
+ * @param meta - Table 메타데이터
55
+ * @param meta.name - Table 이름
56
+ * @param meta.description - Table 설명 (comment)
57
+ * @param meta.database - Database 이름
58
+ * @param meta.schema - Schema 이름 (MSSQL/PostgreSQL)
59
+ * @param meta.columns - Column 정의
60
+ * @param meta.primaryKey - PK column 배열
61
+ * @param meta.relations - 관계 정의
62
+ * @param meta.indexes - Index 정의
63
+ */
64
+ constructor(meta) {
65
+ this.meta = meta;
66
+ }
67
+ /**
68
+ * Table 설명 설정
69
+ *
70
+ * @param desc - Table 설명 (DDL Comment로 사용됨)
71
+ * @returns 새 TableBuilder 인스턴스
72
+ */
73
+ description(desc) {
74
+ return new TableBuilder({ ...this.meta, description: desc });
75
+ }
76
+ /**
77
+ * Database 이름 설정
78
+ *
79
+ * @param db - Database 이름
80
+ * @returns TableBuilder 인스턴스
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * const User = Table("User").database("mydb");
85
+ * ```
86
+ */
87
+ database(db) {
88
+ return new TableBuilder({ ...this.meta, database: db });
89
+ }
90
+ /**
91
+ * Schema 이름 설정
92
+ *
93
+ * MSSQL, PostgreSQL에서 사용
94
+ *
95
+ * @param schema - Schema 이름 (MSSQL: dbo, PostgreSQL: public)
96
+ * @returns 새 TableBuilder 인스턴스
97
+ *
98
+ * @example
99
+ * ```typescript
100
+ * const User = Table("User")
101
+ * .database("mydb")
102
+ * .schema("custom_schema");
103
+ * ```
104
+ */
105
+ schema(schema) {
106
+ return new TableBuilder({ ...this.meta, schema });
107
+ }
108
+ /**
109
+ * Column 정의
110
+ *
111
+ * Column factory를 통한 타입 안전한 column 정의
112
+ *
113
+ * @template TNewColumnDefs - 새 Column 정의 타입
114
+ * @param fn - Column factory를 받아 column 정의를 반환하는 함수
115
+ * @returns 새 TableBuilder 인스턴스
116
+ *
117
+ * @example
118
+ * ```typescript
119
+ * const User = Table("User")
120
+ * .columns((c) => ({
121
+ * id: c.bigint().autoIncrement(),
122
+ * name: c.varchar(100),
123
+ * email: c.varchar(200).nullable(),
124
+ * createdAt: c.datetime().default("CURRENT_TIMESTAMP"),
125
+ * }));
126
+ * ```
127
+ */
128
+ columns(fn) {
129
+ return new TableBuilder({
130
+ ...this.meta,
131
+ columns: fn(createColumnFactory()),
132
+ });
133
+ }
134
+ /**
135
+ * Primary Key 설정
136
+ *
137
+ * @param columns - PK를 구성하는 column 이름 (복합 PK 지원)
138
+ * @returns 새 TableBuilder 인스턴스
139
+ *
140
+ * @example
141
+ * ```typescript
142
+ * // 단일 PK
143
+ * const User = Table("User")
144
+ * .columns((c) => ({ id: c.bigint() }))
145
+ * .primaryKey("id");
146
+ *
147
+ * // 복합 PK
148
+ * const UserRole = Table("UserRole")
149
+ * .columns((c) => ({
150
+ * userId: c.bigint(),
151
+ * roleId: c.bigint(),
152
+ * }))
153
+ * .primaryKey("userId", "roleId");
154
+ * ```
155
+ */
156
+ primaryKey(...columns) {
157
+ return new TableBuilder({
158
+ ...this.meta,
159
+ primaryKey: columns,
160
+ });
161
+ }
162
+ /**
163
+ * Index 정의
164
+ *
165
+ * @param fn - Index factory를 받아 index 배열을 반환하는 함수
166
+ * @returns 새 TableBuilder 인스턴스
167
+ *
168
+ * @example
169
+ * ```typescript
170
+ * const User = Table("User")
171
+ * .columns((c) => ({
172
+ * id: c.bigint(),
173
+ * email: c.varchar(200),
174
+ * name: c.varchar(100),
175
+ * }))
176
+ * .indexes((i) => [
177
+ * i.index("email").unique(),
178
+ * i.index("name").orderBy("ASC"),
179
+ * ]);
180
+ * ```
181
+ */
182
+ indexes(fn) {
183
+ return new TableBuilder({
184
+ ...this.meta,
185
+ indexes: fn(createIndexFactory()),
186
+ });
187
+ }
188
+ /**
189
+ * 관계 정의
190
+ *
191
+ * FK, 역참조 등 Table 간 관계를 설정
192
+ *
193
+ * @template T - 관계 정의 타입
194
+ * @param fn - 관계 factory를 받아 관계 정의를 반환하는 함수
195
+ * @returns TableBuilder 인스턴스
196
+ *
197
+ * @example
198
+ * ```typescript
199
+ * const Post = Table("Post")
200
+ * .columns((c) => ({
201
+ * id: c.bigint().autoIncrement(),
202
+ * authorId: c.bigint(),
203
+ * title: c.varchar(200),
204
+ * }))
205
+ * .primaryKey("id")
206
+ * .relations((r) => ({
207
+ * // FK relation (N:1)
208
+ * author: r.foreignKey(["authorId"], () => User),
209
+ * }));
210
+ *
211
+ * const User = Table("User")
212
+ * .columns((c) => ({
213
+ * id: c.bigint().autoIncrement(),
214
+ * name: c.varchar(100),
215
+ * }))
216
+ * .primaryKey("id")
217
+ * .relations((r) => ({
218
+ * // Reverse-reference (1:N)
219
+ * posts: r.foreignKeyTarget(() => Post, "author"),
220
+ * }));
221
+ * ```
222
+ *
223
+ * @see {@link ForeignKeyBuilder} FK builder
224
+ * @see {@link ForeignKeyTargetBuilder} FK reverse-reference builder
225
+ */
226
+ relations(fn) {
227
+ return new TableBuilder({
228
+ ...this.meta,
229
+ relations: fn(createRelationFactory(() => this)),
230
+ });
231
+ }
200
232
  }
201
- function Table(name) {
202
- return new TableBuilder({ name });
233
+ // ============================================
234
+ // Table 함수
235
+ // ============================================
236
+ /**
237
+ * Table builder factory 함수
238
+ *
239
+ * Fluent API로 Table schema를 정의하기 위한 TableBuilder를 생성
240
+ *
241
+ * @param name - Table 이름
242
+ * @returns TableBuilder 인스턴스
243
+ *
244
+ * @example
245
+ * ```typescript
246
+ * // Basic usage
247
+ * const User = Table("User")
248
+ * .database("mydb")
249
+ * .columns((c) => ({
250
+ * id: c.bigint().autoIncrement(),
251
+ * name: c.varchar(100),
252
+ * email: c.varchar(200).nullable(),
253
+ * }))
254
+ * .primaryKey("id")
255
+ * .indexes((i) => [i.index("email").unique()]);
256
+ *
257
+ * // With relations
258
+ * const Post = Table("Post")
259
+ * .database("mydb")
260
+ * .columns((c) => ({
261
+ * id: c.bigint().autoIncrement(),
262
+ * authorId: c.bigint(),
263
+ * title: c.varchar(200),
264
+ * content: c.text(),
265
+ * }))
266
+ * .primaryKey("id")
267
+ * .relations((r) => ({
268
+ * author: r.foreignKey(["authorId"], () => User),
269
+ * }));
270
+ * ```
271
+ *
272
+ * @see {@link TableBuilder} builder 클래스
273
+ */
274
+ export function Table(name) {
275
+ return new TableBuilder({ name });
203
276
  }
204
- export {
205
- Table,
206
- TableBuilder
207
- };
208
- //# sourceMappingURL=table-builder.js.map
277
+ //# sourceMappingURL=table-builder.js.map
@@ -1,6 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/schema/table-builder.ts"],
4
- "mappings": "AAAA;AAAA,EAEE;AAAA,OAIK;AACP,SAAS,0BAA6C;AACtD;AAAA,EACE;AAAA,OAGK;AAsCA,MAAM,aAGX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BA,YACW,MAWT;AAXS;AAAA,EAWR;AAAA;AAAA,EApCM;AAAA;AAAA,EAEA;AAAA;AAAA,EAGA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiCT,YAAY,MAAc;AACxB,WAAO,IAAI,aAAa,EAAE,GAAG,KAAK,MAAM,aAAa,KAAK,CAAC;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,SAAS,IAAY;AACnB,WAAO,IAAI,aAAa,EAAE,GAAG,KAAK,MAAM,UAAU,GAAG,CAAC;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,OAAO,QAAgB;AACrB,WAAO,IAAI,aAAa,EAAE,GAAG,KAAK,MAAM,OAAO,CAAC;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,QACE,IACA;AACA,WAAO,IAAI,aAAyC;AAAA,MAClD,GAAG,KAAK;AAAA,MACR,SAAS,GAAG,oBAAoB,CAAC;AAAA,IACnC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,cAAc,SAAsC;AAClD,WAAO,IAAI,aAAa;AAAA,MACtB,GAAG,KAAK;AAAA,MACR,YAAY;AAAA,IACd,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,QACE,IAGA;AACA,WAAO,IAAI,aAAa;AAAA,MACtB,GAAG,KAAK;AAAA,MACR,SAAS,GAAG,mBAA4C,CAAC;AAAA,IAC3D,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwCA,UACE,IAC2B;AAC3B,WAAO,IAAI,aAAa;AAAA,MACtB,GAAG,KAAK;AAAA,MACR,WAAW,GAAG,sBAAqD,MAAM,IAAI,CAAC;AAAA,IAChF,CAAC;AAAA,EACH;AACF;AA4CO,SAAS,MAAM,MAAc;AAClC,SAAO,IAAI,aAAa,EAAE,KAAK,CAAC;AAClC;",
5
- "names": []
6
- }
1
+ {"version":3,"file":"table-builder.js","sourceRoot":"","sources":["..\\..\\src\\schema\\table-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,GAIpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAqB,MAAM,yBAAyB,CAAC;AAChF,OAAO,EACL,qBAAqB,GAGtB,MAAM,4BAA4B,CAAC;AAEpC,+CAA+C;AAC/C,eAAe;AACf,+CAA+C;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,OAAO,YAAY;IA8BZ;IA1BX,yBAAyB;IAChB,QAAQ,CAAY;IAC7B,qBAAqB;IACZ,UAAU,CAAc;IAEjC,6BAA6B;IACpB,YAAY,CAA2D;IAChF,sBAAsB;IACb,aAAa,CAA0B;IAChD,kEAAkE;IACzD,YAAY,CAAgC;IACrD,oCAAoC;IAC3B,YAAY,CAAgC;IAErD;;;;;;;;;;OAUG;IACH,YACW,IAUR;QAVQ,SAAI,GAAJ,IAAI,CAUZ;IACA,CAAC;IAEJ;;;;;OAKG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAU;QACjB,OAAO,IAAI,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,MAAc;QACnB,OAAO,IAAI,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CACL,EAAiE;QAEjE,OAAO,IAAI,YAAY,CAA6B;YAClD,GAAG,IAAI,CAAC,IAAI;YACZ,OAAO,EAAE,EAAE,CAAC,mBAAmB,EAAE,CAAC;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,UAAU,CAAC,GAAG,OAAoC;QAChD,OAAO,IAAI,YAAY,CAAC;YACtB,GAAG,IAAI,CAAC,IAAI;YACZ,UAAU,EAAE,OAAO;SACpB,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CACL,EAE6B;QAE7B,OAAO,IAAI,YAAY,CAAC;YACtB,GAAG,IAAI,CAAC,IAAI;YACZ,OAAO,EAAE,EAAE,CAAC,kBAAkB,EAA2B,CAAC;SAC3D,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACH,SAAS,CACP,EAAqF;QAErF,OAAO,IAAI,YAAY,CAAC;YACtB,GAAG,IAAI,CAAC,IAAI;YACZ,SAAS,EAAE,EAAE,CAAC,qBAAqB,CAAgC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;SAChF,CAAC,CAAC;IACL,CAAC;CACF;AAED,+CAA+C;AAC/C,WAAW;AACX,+CAA+C;AAE/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,UAAU,KAAK,CAAC,IAAY;IAChC,OAAO,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;AACpC,CAAC"}