@simplysm/orm-common 13.0.100 → 14.0.4

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 (246) hide show
  1. package/README.md +90 -147
  2. package/dist/create-db-context.d.ts +10 -10
  3. package/dist/create-db-context.js +312 -276
  4. package/dist/create-db-context.js.map +1 -6
  5. package/dist/ddl/column-ddl.d.ts +4 -4
  6. package/dist/ddl/column-ddl.js +41 -35
  7. package/dist/ddl/column-ddl.js.map +1 -6
  8. package/dist/ddl/initialize.d.ts +17 -17
  9. package/dist/ddl/initialize.js +200 -142
  10. package/dist/ddl/initialize.js.map +1 -6
  11. package/dist/ddl/relation-ddl.d.ts +6 -6
  12. package/dist/ddl/relation-ddl.js +55 -48
  13. package/dist/ddl/relation-ddl.js.map +1 -6
  14. package/dist/ddl/schema-ddl.d.ts +4 -4
  15. package/dist/ddl/schema-ddl.js +21 -15
  16. package/dist/ddl/schema-ddl.js.map +1 -6
  17. package/dist/ddl/table-ddl.d.ts +20 -20
  18. package/dist/ddl/table-ddl.js +139 -93
  19. package/dist/ddl/table-ddl.js.map +1 -6
  20. package/dist/define-db-context.js +10 -13
  21. package/dist/define-db-context.js.map +1 -6
  22. package/dist/errors/db-transaction-error.d.ts +15 -15
  23. package/dist/errors/db-transaction-error.d.ts.map +1 -1
  24. package/dist/errors/db-transaction-error.js +53 -19
  25. package/dist/errors/db-transaction-error.js.map +1 -6
  26. package/dist/exec/executable.d.ts +23 -23
  27. package/dist/exec/executable.js +94 -40
  28. package/dist/exec/executable.js.map +1 -6
  29. package/dist/exec/queryable.d.ts +97 -97
  30. package/dist/exec/queryable.js +1310 -1204
  31. package/dist/exec/queryable.js.map +1 -6
  32. package/dist/exec/search-parser.d.ts +31 -31
  33. package/dist/exec/search-parser.d.ts.map +1 -1
  34. package/dist/exec/search-parser.js +158 -59
  35. package/dist/exec/search-parser.js.map +1 -6
  36. package/dist/expr/expr-unit.d.ts +4 -4
  37. package/dist/expr/expr-unit.js +24 -18
  38. package/dist/expr/expr-unit.js.map +1 -6
  39. package/dist/expr/expr.d.ts +108 -108
  40. package/dist/expr/expr.js +1872 -1844
  41. package/dist/expr/expr.js.map +1 -6
  42. package/dist/index.js +23 -1
  43. package/dist/index.js.map +1 -6
  44. package/dist/models/system-migration.js +7 -7
  45. package/dist/models/system-migration.js.map +1 -6
  46. package/dist/query-builder/base/expr-renderer-base.d.ts +10 -10
  47. package/dist/query-builder/base/expr-renderer-base.js +27 -21
  48. package/dist/query-builder/base/expr-renderer-base.js.map +1 -6
  49. package/dist/query-builder/base/query-builder-base.d.ts +21 -21
  50. package/dist/query-builder/base/query-builder-base.d.ts.map +1 -1
  51. package/dist/query-builder/base/query-builder-base.js +90 -80
  52. package/dist/query-builder/base/query-builder-base.js.map +1 -6
  53. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts +5 -5
  54. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts.map +1 -1
  55. package/dist/query-builder/mssql/mssql-expr-renderer.js +447 -420
  56. package/dist/query-builder/mssql/mssql-expr-renderer.js.map +1 -6
  57. package/dist/query-builder/mssql/mssql-query-builder.d.ts +2 -2
  58. package/dist/query-builder/mssql/mssql-query-builder.d.ts.map +1 -1
  59. package/dist/query-builder/mssql/mssql-query-builder.js +483 -443
  60. package/dist/query-builder/mssql/mssql-query-builder.js.map +1 -6
  61. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts +5 -5
  62. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts.map +1 -1
  63. package/dist/query-builder/mysql/mysql-expr-renderer.js +451 -419
  64. package/dist/query-builder/mysql/mysql-expr-renderer.js.map +1 -6
  65. package/dist/query-builder/mysql/mysql-query-builder.d.ts +10 -10
  66. package/dist/query-builder/mysql/mysql-query-builder.d.ts.map +1 -1
  67. package/dist/query-builder/mysql/mysql-query-builder.js +570 -479
  68. package/dist/query-builder/mysql/mysql-query-builder.js.map +1 -6
  69. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts +5 -5
  70. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +1 -1
  71. package/dist/query-builder/postgresql/postgresql-expr-renderer.js +449 -422
  72. package/dist/query-builder/postgresql/postgresql-expr-renderer.js.map +1 -6
  73. package/dist/query-builder/postgresql/postgresql-query-builder.d.ts +8 -8
  74. package/dist/query-builder/postgresql/postgresql-query-builder.d.ts.map +1 -1
  75. package/dist/query-builder/postgresql/postgresql-query-builder.js +511 -460
  76. package/dist/query-builder/postgresql/postgresql-query-builder.js.map +1 -6
  77. package/dist/query-builder/query-builder.d.ts +1 -1
  78. package/dist/query-builder/query-builder.js +13 -13
  79. package/dist/query-builder/query-builder.js.map +1 -6
  80. package/dist/schema/factory/column-builder.d.ts +84 -84
  81. package/dist/schema/factory/column-builder.js +248 -185
  82. package/dist/schema/factory/column-builder.js.map +1 -6
  83. package/dist/schema/factory/index-builder.d.ts +38 -38
  84. package/dist/schema/factory/index-builder.js +144 -85
  85. package/dist/schema/factory/index-builder.js.map +1 -6
  86. package/dist/schema/factory/relation-builder.d.ts +99 -99
  87. package/dist/schema/factory/relation-builder.d.ts.map +1 -1
  88. package/dist/schema/factory/relation-builder.js +274 -136
  89. package/dist/schema/factory/relation-builder.js.map +1 -6
  90. package/dist/schema/procedure-builder.d.ts +51 -51
  91. package/dist/schema/procedure-builder.d.ts.map +1 -1
  92. package/dist/schema/procedure-builder.js +205 -131
  93. package/dist/schema/procedure-builder.js.map +1 -6
  94. package/dist/schema/table-builder.d.ts +55 -55
  95. package/dist/schema/table-builder.d.ts.map +1 -1
  96. package/dist/schema/table-builder.js +274 -205
  97. package/dist/schema/table-builder.js.map +1 -6
  98. package/dist/schema/view-builder.d.ts +44 -44
  99. package/dist/schema/view-builder.d.ts.map +1 -1
  100. package/dist/schema/view-builder.js +189 -116
  101. package/dist/schema/view-builder.js.map +1 -6
  102. package/dist/types/column.d.ts +21 -21
  103. package/dist/types/column.js +60 -30
  104. package/dist/types/column.js.map +1 -6
  105. package/dist/types/db-context-def.d.ts +9 -9
  106. package/dist/types/db-context-def.js +2 -1
  107. package/dist/types/db-context-def.js.map +1 -6
  108. package/dist/types/db.d.ts +47 -47
  109. package/dist/types/db.js +15 -5
  110. package/dist/types/db.js.map +1 -6
  111. package/dist/types/expr.d.ts +81 -81
  112. package/dist/types/expr.d.ts.map +1 -1
  113. package/dist/types/expr.js +3 -1
  114. package/dist/types/expr.js.map +1 -6
  115. package/dist/types/query-def.d.ts +46 -46
  116. package/dist/types/query-def.d.ts.map +1 -1
  117. package/dist/types/query-def.js +31 -24
  118. package/dist/types/query-def.js.map +1 -6
  119. package/dist/utils/result-parser.d.ts +11 -11
  120. package/dist/utils/result-parser.js +362 -221
  121. package/dist/utils/result-parser.js.map +1 -6
  122. package/docs/core.md +117 -145
  123. package/docs/expression.md +186 -203
  124. package/docs/query-builder.md +75 -42
  125. package/docs/queryable.md +189 -151
  126. package/docs/schema-builders.md +172 -283
  127. package/docs/types.md +229 -173
  128. package/package.json +7 -5
  129. package/src/create-db-context.ts +31 -31
  130. package/src/ddl/column-ddl.ts +4 -4
  131. package/src/ddl/initialize.ts +38 -38
  132. package/src/ddl/relation-ddl.ts +6 -6
  133. package/src/ddl/schema-ddl.ts +4 -4
  134. package/src/ddl/table-ddl.ts +24 -24
  135. package/src/errors/db-transaction-error.ts +13 -13
  136. package/src/exec/executable.ts +25 -25
  137. package/src/exec/queryable.ts +152 -152
  138. package/src/exec/search-parser.ts +50 -50
  139. package/src/expr/expr-unit.ts +4 -4
  140. package/src/expr/expr.ts +118 -118
  141. package/src/index.ts +8 -8
  142. package/src/models/system-migration.ts +1 -1
  143. package/src/query-builder/base/expr-renderer-base.ts +21 -21
  144. package/src/query-builder/base/query-builder-base.ts +33 -33
  145. package/src/query-builder/mssql/mssql-expr-renderer.ts +28 -28
  146. package/src/query-builder/mssql/mssql-query-builder.ts +37 -37
  147. package/src/query-builder/mysql/mysql-expr-renderer.ts +29 -29
  148. package/src/query-builder/mysql/mysql-query-builder.ts +70 -70
  149. package/src/query-builder/postgresql/postgresql-expr-renderer.ts +22 -22
  150. package/src/query-builder/postgresql/postgresql-query-builder.ts +54 -54
  151. package/src/query-builder/query-builder.ts +1 -1
  152. package/src/schema/factory/column-builder.ts +86 -86
  153. package/src/schema/factory/index-builder.ts +38 -38
  154. package/src/schema/factory/relation-builder.ts +102 -102
  155. package/src/schema/procedure-builder.ts +52 -52
  156. package/src/schema/table-builder.ts +56 -56
  157. package/src/schema/view-builder.ts +47 -47
  158. package/src/types/column.ts +24 -24
  159. package/src/types/db-context-def.ts +15 -15
  160. package/src/types/db.ts +50 -50
  161. package/src/types/expr.ts +103 -103
  162. package/src/types/query-def.ts +50 -50
  163. package/src/utils/result-parser.ts +88 -88
  164. package/docs/utilities.md +0 -27
  165. package/tests/db-context/create-db-context.spec.ts +0 -193
  166. package/tests/db-context/define-db-context.spec.ts +0 -17
  167. package/tests/ddl/basic.expected.ts +0 -341
  168. package/tests/ddl/basic.spec.ts +0 -557
  169. package/tests/ddl/column-builder.expected.ts +0 -310
  170. package/tests/ddl/column-builder.spec.ts +0 -525
  171. package/tests/ddl/index-builder.expected.ts +0 -38
  172. package/tests/ddl/index-builder.spec.ts +0 -148
  173. package/tests/ddl/procedure-builder.expected.ts +0 -52
  174. package/tests/ddl/procedure-builder.spec.ts +0 -128
  175. package/tests/ddl/relation-builder.expected.ts +0 -36
  176. package/tests/ddl/relation-builder.spec.ts +0 -171
  177. package/tests/ddl/table-builder.expected.ts +0 -113
  178. package/tests/ddl/table-builder.spec.ts +0 -399
  179. package/tests/ddl/view-builder.expected.ts +0 -38
  180. package/tests/ddl/view-builder.spec.ts +0 -116
  181. package/tests/dml/delete.expected.ts +0 -96
  182. package/tests/dml/delete.spec.ts +0 -127
  183. package/tests/dml/insert.expected.ts +0 -192
  184. package/tests/dml/insert.spec.ts +0 -210
  185. package/tests/dml/update.expected.ts +0 -176
  186. package/tests/dml/update.spec.ts +0 -222
  187. package/tests/dml/upsert.expected.ts +0 -215
  188. package/tests/dml/upsert.spec.ts +0 -190
  189. package/tests/errors/queryable-errors.spec.ts +0 -126
  190. package/tests/escape.spec.ts +0 -59
  191. package/tests/examples/pivot.expected.ts +0 -211
  192. package/tests/examples/pivot.spec.ts +0 -200
  193. package/tests/examples/sampling.expected.ts +0 -69
  194. package/tests/examples/sampling.spec.ts +0 -42
  195. package/tests/examples/unpivot.expected.ts +0 -120
  196. package/tests/examples/unpivot.spec.ts +0 -161
  197. package/tests/exec/search-parser.spec.ts +0 -267
  198. package/tests/executable/basic.expected.ts +0 -18
  199. package/tests/executable/basic.spec.ts +0 -54
  200. package/tests/expr/comparison.expected.ts +0 -282
  201. package/tests/expr/comparison.spec.ts +0 -334
  202. package/tests/expr/conditional.expected.ts +0 -134
  203. package/tests/expr/conditional.spec.ts +0 -249
  204. package/tests/expr/date.expected.ts +0 -332
  205. package/tests/expr/date.spec.ts +0 -459
  206. package/tests/expr/math.expected.ts +0 -62
  207. package/tests/expr/math.spec.ts +0 -59
  208. package/tests/expr/string.expected.ts +0 -218
  209. package/tests/expr/string.spec.ts +0 -300
  210. package/tests/expr/utility.expected.ts +0 -147
  211. package/tests/expr/utility.spec.ts +0 -155
  212. package/tests/select/basic.expected.ts +0 -322
  213. package/tests/select/basic.spec.ts +0 -433
  214. package/tests/select/filter.expected.ts +0 -357
  215. package/tests/select/filter.spec.ts +0 -954
  216. package/tests/select/group.expected.ts +0 -169
  217. package/tests/select/group.spec.ts +0 -159
  218. package/tests/select/join.expected.ts +0 -582
  219. package/tests/select/join.spec.ts +0 -692
  220. package/tests/select/order.expected.ts +0 -150
  221. package/tests/select/order.spec.ts +0 -140
  222. package/tests/select/recursive-cte.expected.ts +0 -244
  223. package/tests/select/recursive-cte.spec.ts +0 -514
  224. package/tests/select/result-meta.spec.ts +0 -270
  225. package/tests/select/subquery.expected.ts +0 -363
  226. package/tests/select/subquery.spec.ts +0 -441
  227. package/tests/select/view.expected.ts +0 -155
  228. package/tests/select/view.spec.ts +0 -235
  229. package/tests/select/window.expected.ts +0 -345
  230. package/tests/select/window.spec.ts +0 -433
  231. package/tests/setup/MockExecutor.ts +0 -18
  232. package/tests/setup/TestDbContext.ts +0 -59
  233. package/tests/setup/models/Company.ts +0 -13
  234. package/tests/setup/models/Employee.ts +0 -10
  235. package/tests/setup/models/MonthlySales.ts +0 -11
  236. package/tests/setup/models/Post.ts +0 -16
  237. package/tests/setup/models/Sales.ts +0 -10
  238. package/tests/setup/models/User.ts +0 -19
  239. package/tests/setup/procedure/GetAllUsers.ts +0 -9
  240. package/tests/setup/procedure/GetUserById.ts +0 -12
  241. package/tests/setup/test-utils.ts +0 -72
  242. package/tests/setup/views/ActiveUsers.ts +0 -8
  243. package/tests/setup/views/UserSummary.ts +0 -11
  244. package/tests/types/nullable-queryable-record.spec.ts +0 -97
  245. package/tests/utils/result-parser-perf.spec.ts +0 -143
  246. 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"}