@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
@@ -15,7 +15,7 @@ import { queryable } from "./exec/queryable";
15
15
  import { executable } from "./exec/executable";
16
16
  import { obj } from "@simplysm/core-common";
17
17
 
18
- // DDL imports
18
+ // DDL import
19
19
  import * as tableDdl from "./ddl/table-ddl";
20
20
  import * as columnDdl from "./ddl/column-ddl";
21
21
  import * as relationDdl from "./ddl/relation-ddl";
@@ -30,18 +30,18 @@ import type { ForeignKeyBuilder } from "./schema/factory/relation-builder";
30
30
  import type { IndexBuilder } from "./schema/factory/index-builder";
31
31
 
32
32
  /**
33
- * DbContext instance factory
33
+ * DbContext 인스턴스 팩토리
34
34
  *
35
- * Takes DbContextDef (definition) and DbContextExecutor (executor) and creates
36
- * a complete DbContext instance including queryable accessors, DDL methods,
37
- * and connection/transaction management
35
+ * DbContextDef (정의) DbContextExecutor (실행기) 받아
36
+ * queryable 접근자, DDL 메서드, 연결/트랜잭션 관리를 포함한
37
+ * 완전한 DbContext 인스턴스를 생성한다
38
38
  *
39
- * @param def - Definition object created by defineDbContext()
40
- * @param executor - Query executor (NodeDbContextExecutor, ServiceDbContextExecutor, etc.)
41
- * @param opt - Database options
42
- * @param opt.database - Database name
43
- * @param opt.schema - Schema name (MSSQL: dbo, PostgreSQL: public)
44
- * @returns A complete DbContext instance
39
+ * @param def - defineDbContext()로 생성된 정의 객체
40
+ * @param executor - 쿼리 실행기 (NodeDbContextExecutor, ServiceDbContextExecutor )
41
+ * @param opt - 데이터베이스 옵션
42
+ * @param opt.database - 데이터베이스 이름
43
+ * @param opt.schema - schema 이름 (MSSQL: dbo, PostgreSQL: public)
44
+ * @returns 완전한 DbContext 인스턴스
45
45
  *
46
46
  * @example
47
47
  * ```typescript
@@ -61,12 +61,12 @@ export function createDbContext<TDef extends DbContextDef<any, any, any>>(
61
61
  executor: DbContextExecutor,
62
62
  opt: { database: string; schema?: string },
63
63
  ): DbContextInstance<TDef> {
64
- // ── Internal state (closure) ──
64
+ // ── 내부 상태 (클로저) ──
65
65
  let aliasCounter = 0;
66
66
  let status: DbContextStatus = "ready";
67
67
  let relationsValidated = false;
68
68
 
69
- // ── DbContextBase implementation ──
69
+ // ── DbContextBase 구현 ──
70
70
  const base: DbContextBase = {
71
71
  get status() {
72
72
  return status;
@@ -94,7 +94,7 @@ export function createDbContext<TDef extends DbContextDef<any, any, any>>(
94
94
  status === "transact" &&
95
95
  defs.some((d) => (DDL_TYPES as readonly string[]).includes(d.type))
96
96
  ) {
97
- throw new Error("Cannot execute DDL while in TRANSACTION state.");
97
+ throw new Error("TRANSACTION 상태에서는 DDL 실행할 없습니다.");
98
98
  }
99
99
  return executor.executeDefs(defs, resultMetas);
100
100
  },
@@ -112,9 +112,9 @@ export function createDbContext<TDef extends DbContextDef<any, any, any>>(
112
112
  },
113
113
  };
114
114
 
115
- // ── Compose all into single object ──
115
+ // ── 모든 요소를 하나의 객체로 합성 ──
116
116
  const db = {
117
- // Spread base properties (getters/setters need special handling)
117
+ // base 속성 전개 (getter/setter는 별도 처리 필요)
118
118
  get status() {
119
119
  return base.status;
120
120
  },
@@ -132,13 +132,13 @@ export function createDbContext<TDef extends DbContextDef<any, any, any>>(
132
132
  executeDefs: base.executeDefs,
133
133
  getQueryDefObjectName: base.getQueryDefObjectName,
134
134
 
135
- //#region ========== Connection management ==========
135
+ //#region ========== 연결 관리 ==========
136
136
 
137
137
  /**
138
- * Execute callback within a transaction (automatic commit/rollback)
138
+ * 트랜잭션 내에서 콜백 실행 (자동 커밋/롤백)
139
139
  *
140
- * Connect -> Start transaction -> Execute callback -> Commit -> Close connection
141
- * If error occurs, automatically rollback and close connection
140
+ * 연결 -> 트랜잭션 시작 -> 콜백 실행 -> 커밋 -> 연결 종료
141
+ * 오류 발생 자동으로 롤백 연결 종료
142
142
  */
143
143
  async connect<TResult>(
144
144
  fn: () => Promise<TResult>,
@@ -191,9 +191,9 @@ export function createDbContext<TDef extends DbContextDef<any, any, any>>(
191
191
  },
192
192
 
193
193
  /**
194
- * Connect without transaction, execute callback, and auto-close
194
+ * 트랜잭션 없이 연결 콜백 실행, 자동 종료
195
195
  *
196
- * Used for DDL operations or read operations that don't require transactions
196
+ * 트랜잭션이 필요 없는 DDL 작업이나 읽기 작업에 사용
197
197
  */
198
198
  async connectWithoutTransaction<TResult>(callback: () => Promise<TResult>): Promise<TResult> {
199
199
  if (!relationsValidated) {
@@ -220,16 +220,16 @@ export function createDbContext<TDef extends DbContextDef<any, any, any>>(
220
220
  },
221
221
 
222
222
  /**
223
- * Start transaction in already connected state (automatic commit/rollback)
223
+ * 이미 연결된 상태에서 트랜잭션 시작 (자동 커밋/롤백)
224
224
  *
225
- * Used when transaction is needed partially within connectWithoutTransaction
225
+ * connectWithoutTransaction 내에서 부분적으로 트랜잭션이 필요할 사용
226
226
  */
227
227
  async transaction<TResult>(
228
228
  fn: () => Promise<TResult>,
229
229
  isolationLevel?: IsolationLevel,
230
230
  ): Promise<TResult> {
231
231
  if (status === "transact") {
232
- throw new Error("Already in TRANSACTION state.");
232
+ throw new Error("이미 TRANSACTION 상태입니다.");
233
233
  }
234
234
 
235
235
  await executor.beginTransaction(isolationLevel);
@@ -253,7 +253,7 @@ export function createDbContext<TDef extends DbContextDef<any, any, any>>(
253
253
  } else {
254
254
  throw err1;
255
255
  }
256
- // If NO_ACTIVE_TRANSACTION error, ignore and throw original error
256
+ // NO_ACTIVE_TRANSACTION 오류이면 무시하고 원래 오류를 던짐
257
257
  status = "connect";
258
258
  }
259
259
  throw err;
@@ -264,7 +264,7 @@ export function createDbContext<TDef extends DbContextDef<any, any, any>>(
264
264
 
265
265
  //#endregion
266
266
 
267
- //#region ========== DDL execution methods ==========
267
+ //#region ========== DDL 실행 메서드 ==========
268
268
 
269
269
  async createTable(table: TableBuilder<any, any>): Promise<void> {
270
270
  await base.executeDefs([tableDdl.getCreateTableQueryDef(base, table)]);
@@ -347,7 +347,7 @@ export function createDbContext<TDef extends DbContextDef<any, any, any>>(
347
347
 
348
348
  //#endregion
349
349
 
350
- //#region ========== DDL QueryDef generators ==========
350
+ //#region ========== DDL QueryDef 생성기 ==========
351
351
 
352
352
  getCreateTableQueryDef: (table: TableBuilder<any, any>) =>
353
353
  tableDdl.getCreateTableQueryDef(base, table),
@@ -383,7 +383,7 @@ export function createDbContext<TDef extends DbContextDef<any, any, any>>(
383
383
 
384
384
  //#endregion
385
385
 
386
- //#region ========== Initialize ==========
386
+ //#region ========== 초기화 ==========
387
387
 
388
388
  async initialize(options?: { dbs?: string[]; force?: boolean }): Promise<void> {
389
389
  await initializeImpl(db as any, def, options);
@@ -392,7 +392,7 @@ export function createDbContext<TDef extends DbContextDef<any, any, any>>(
392
392
  //#endregion
393
393
  };
394
394
 
395
- // ── Add Queryable accessors ──
395
+ // ── Queryable 접근자 추가 ──
396
396
  for (const [key, tableOrView] of Object.entries(def.meta.tables)) {
397
397
  (db as any)[key] = queryable(db as any, tableOrView as TableBuilder<any, any>);
398
398
  }
@@ -400,7 +400,7 @@ export function createDbContext<TDef extends DbContextDef<any, any, any>>(
400
400
  (db as any)[key] = queryable(db as any, view as ViewBuilder<any, any, any>);
401
401
  }
402
402
 
403
- // ── Add Executable accessors ──
403
+ // ── Executable 접근자 추가 ──
404
404
  for (const [key, proc] of Object.entries(def.meta.procedures)) {
405
405
  (db as any)[key] = executable(base, proc as ProcedureBuilder<any, any>);
406
406
  }
@@ -8,7 +8,7 @@ import type {
8
8
  } from "../types/query-def";
9
9
 
10
10
  /**
11
- * Generate ADD COLUMN QueryDef
11
+ * ADD COLUMN QueryDef 생성
12
12
  */
13
13
  export function getAddColumnQueryDef(
14
14
  table: QueryDefObjectName,
@@ -29,7 +29,7 @@ export function getAddColumnQueryDef(
29
29
  }
30
30
 
31
31
  /**
32
- * Generate DROP COLUMN QueryDef
32
+ * DROP COLUMN QueryDef 생성
33
33
  */
34
34
  export function getDropColumnQueryDef(
35
35
  table: QueryDefObjectName,
@@ -39,7 +39,7 @@ export function getDropColumnQueryDef(
39
39
  }
40
40
 
41
41
  /**
42
- * Generate MODIFY COLUMN QueryDef
42
+ * MODIFY COLUMN QueryDef 생성
43
43
  */
44
44
  export function getModifyColumnQueryDef(
45
45
  table: QueryDefObjectName,
@@ -60,7 +60,7 @@ export function getModifyColumnQueryDef(
60
60
  }
61
61
 
62
62
  /**
63
- * Generate RENAME COLUMN QueryDef
63
+ * RENAME COLUMN QueryDef 생성
64
64
  */
65
65
  export function getRenameColumnQueryDef(
66
66
  table: QueryDefObjectName,
@@ -15,24 +15,24 @@ import { getAddForeignKeyQueryDef, getAddIndexQueryDef } from "./relation-ddl";
15
15
  import { getClearSchemaQueryDef, getSchemaExistsQueryDef } from "./schema-ddl";
16
16
 
17
17
  /**
18
- * Code First Database Initialize
18
+ * Code First 데이터베이스 초기화
19
19
  *
20
- * Creates Tables/Views/Procedures defined in DbContext to Database and
21
- * applies migrations
20
+ * DbContext에 정의된 Table/View/Procedure를 데이터베이스에 생성하고
21
+ * migration을 적용한다
22
22
  *
23
- * @param db - DbContext instance
24
- * @param def - DbContext definition
25
- * @param options - Initialize options
26
- * @param options.dbs - List of target Databases for initialize (current database if not specified)
27
- * @param options.force - If true, delete existing schema and recreate all
28
- * @throws {Error} When there is no Database to initialize
29
- * @throws {Error} When the specified Database does not exist
23
+ * @param db - DbContext 인스턴스
24
+ * @param def - DbContext 정의
25
+ * @param options - 초기화 옵션
26
+ * @param options.dbs - 초기화 대상 데이터베이스 목록 (미지정 현재 데이터베이스)
27
+ * @param options.force - true이면 기존 schema 삭제하고 모두 재생성
28
+ * @throws {Error} 초기화할 데이터베이스가 없을
29
+ * @throws {Error} 지정된 데이터베이스가 존재하지 않을
30
30
  *
31
- * Behavior:
32
- * - **force=true**: clearSchema → create allregister all migrations as "applied"
33
- * - **force=false** (default):
34
- * - No _Migration Table: create all + register all migrations
35
- * - _Migration Table exists: execute only unapplied migrations
31
+ * 동작:
32
+ * - **force=true**: clearSchema → 전체 생성모든 migration을 "적용됨"으로 등록
33
+ * - **force=false** (기본값):
34
+ * - _Migration 테이블 없음: 전체 생성 + 모든 migration 등록
35
+ * - _Migration 테이블 있음: 미적용 migration만 실행
36
36
  */
37
37
  export async function initialize(
38
38
  db: DbContextBase & DbContextDdlMethods & { _migration: () => Queryable<{ code: string }, any> },
@@ -41,55 +41,55 @@ export async function initialize(
41
41
  ): Promise<void> {
42
42
  const dbNames = options?.dbs ?? (db.database !== undefined ? [db.database] : []);
43
43
  if (dbNames.length < 1) {
44
- throw new Error("No Database to initialize.");
44
+ throw new Error("초기화할 데이터베이스가 없습니다.");
45
45
  }
46
46
 
47
47
  const force = options?.force ?? false;
48
48
 
49
- // 1. Check DB existence
49
+ // 1. DB 존재 여부 확인
50
50
  for (const dbName of dbNames) {
51
51
  const schemaExistsDef = getSchemaExistsQueryDef(dbName, db.schema);
52
52
  const result = await db.executeDefs([schemaExistsDef]);
53
53
  const schemaExists = result[0].length > 0;
54
54
  if (!schemaExists) {
55
- throw new Error(`Database '${dbName}' does not exist.`);
55
+ throw new Error(`데이터베이스 '${dbName}'이(가) 존재하지 않습니다.`);
56
56
  }
57
57
  }
58
58
 
59
59
  if (force) {
60
- // 2. force: initialize all dbs
60
+ // 2. force: 모든 DB 초기화
61
61
  for (const dbName of dbNames) {
62
62
  const clearDef = getClearSchemaQueryDef({ database: dbName, schema: db.schema });
63
63
  await db.executeDefs([clearDef]);
64
64
  }
65
65
  await createAllObjects(db, def);
66
66
 
67
- // Register all migrations as "applied"
67
+ // 모든 migration을 "적용됨"으로 등록
68
68
  if (def.meta.migrations.length > 0) {
69
69
  await db._migration().insert(def.meta.migrations.map((m) => ({ code: m.name })));
70
70
  }
71
71
  } else {
72
- // 3. Migration-based initialize
72
+ // 3. Migration 기반 초기화
73
73
  let appliedMigrations: { code: string }[] | undefined;
74
74
  try {
75
75
  appliedMigrations = await db._migration().execute();
76
76
  } catch (err) {
77
- // No Table = new environment
77
+ // 테이블 없음 = 환경
78
78
  if (!isTableNotExistsError(err)) {
79
79
  throw err;
80
80
  }
81
81
  }
82
82
 
83
83
  if (appliedMigrations == null) {
84
- // New environment: create all
84
+ // 환경: 전체 생성
85
85
  await createAllObjects(db, def);
86
86
 
87
- // Register all migrations as "applied"
87
+ // 모든 migration을 "적용됨"으로 등록
88
88
  if (def.meta.migrations.length > 0) {
89
89
  await db._migration().insert(def.meta.migrations.map((m) => ({ code: m.name })));
90
90
  }
91
91
  } else {
92
- // Existing environment: execute only unapplied migrations
92
+ // 기존 환경: 미적용 migration만 실행
93
93
  const appliedCodes = new Set(appliedMigrations.map((m) => m.code));
94
94
  const pendingMigrations = def.meta.migrations.filter((m) => !appliedCodes.has(m.name));
95
95
 
@@ -102,13 +102,13 @@ export async function initialize(
102
102
  }
103
103
 
104
104
  /**
105
- * Generate all objects (table/view/procedure/FK/index)
105
+ * 모든 객체 생성 (table/view/procedure/FK/index)
106
106
  */
107
107
  async function createAllObjects(
108
108
  db: DbContextBase,
109
109
  def: DbContextDef<any, any, any>,
110
110
  ): Promise<void> {
111
- // 1. Generate Table/View/Procedure
111
+ // 1. Table/View/Procedure 생성
112
112
  const builders = getBuilders(def);
113
113
  const createDefs: QueryDef[] = [];
114
114
  for (const builder of builders) {
@@ -118,7 +118,7 @@ async function createAllObjects(
118
118
  await db.executeDefs(createDefs);
119
119
  }
120
120
 
121
- // 2. Generate FK (TableBuilder only)
121
+ // 2. FK 생성 (TableBuilder)
122
122
  const tables = builders.filter((b) => b instanceof TableBuilder);
123
123
  const addFkDefs: QueryDef[] = [];
124
124
  for (const table of tables) {
@@ -136,7 +136,7 @@ async function createAllObjects(
136
136
  await db.executeDefs(addFkDefs);
137
137
  }
138
138
 
139
- // 3. Generate Index (TableBuilder only)
139
+ // 3. Index 생성 (TableBuilder)
140
140
  const createIndexDefs: QueryDef[] = [];
141
141
  for (const table of tables) {
142
142
  const indexes = table.meta.indexes;
@@ -153,7 +153,7 @@ async function createAllObjects(
153
153
  }
154
154
 
155
155
  /**
156
- * Collect all builders from DbContext (Table/View/Procedure)
156
+ * DbContext에서 모든 builder 수집 (Table/View/Procedure)
157
157
  */
158
158
  function getBuilders(
159
159
  def: DbContextDef<any, any, any>,
@@ -186,8 +186,8 @@ function getBuilders(
186
186
  }
187
187
 
188
188
  /**
189
- * Validate ForeignKeyTarget/RelationKeyTarget relations
190
- * - Checks if the table returned by targetTableFn() has a FK/RelationKey matching the relationName
189
+ * ForeignKeyTarget/RelationKeyTarget 관계 검증
190
+ * - targetTableFn() 반환하는 테이블에 relationName과 일치하는 FK/RelationKey 있는지 확인
191
191
  */
192
192
  export function validateRelations(def: DbContextDef<any, any, any>): void {
193
193
  const builders = getBuilders(def);
@@ -211,8 +211,8 @@ export function validateRelations(def: DbContextDef<any, any, any>): void {
211
211
 
212
212
  if (!(fkRel instanceof ForeignKeyBuilder) && !(fkRel instanceof RelationKeyBuilder)) {
213
213
  throw new Error(
214
- `Invalid relation target: '${fkRelName}' referenced by ${table.meta.name}.${relName} ` +
215
- `is not a valid ForeignKey/RelationKey in ${targetTable.meta.name}.`,
214
+ `유효하지 않은 관계 대상: ${table.meta.name}.${relName}이(가) 참조하는 '${fkRelName}'은(는) ` +
215
+ `${targetTable.meta.name}에서 유효한 ForeignKey/RelationKey가 아닙니다.`,
216
216
  );
217
217
  }
218
218
  }
@@ -220,9 +220,9 @@ export function validateRelations(def: DbContextDef<any, any, any>): void {
220
220
  }
221
221
 
222
222
  /**
223
- * Check if the error indicates a table does not exist
223
+ * 오류가 테이블 미존재를 나타내는지 확인
224
224
  *
225
- * DBMS-specific error code/message patterns:
225
+ * DBMS 오류 코드/메시지 패턴:
226
226
  * - MySQL: errno 1146 (ER_NO_SUCH_TABLE), "Table 'xxx' doesn't exist"
227
227
  * - MSSQL: number 208, "Invalid object name 'xxx'"
228
228
  * - PostgreSQL: code "42P01", "relation \"xxx\" does not exist"
@@ -230,13 +230,13 @@ export function validateRelations(def: DbContextDef<any, any, any>): void {
230
230
  function isTableNotExistsError(err: unknown): boolean {
231
231
  if (err == null) return false;
232
232
 
233
- // Check error code first (reliable even in multilingual environments)
233
+ // 오류 코드를 먼저 확인 (다국어 환경에서도 안정적)
234
234
  const errObj = err as Record<string, unknown>;
235
235
  if (errObj["errno"] === 1146) return true; // MySQL ER_NO_SUCH_TABLE
236
236
  if (errObj["number"] === 208) return true; // MSSQL
237
237
  if (errObj["code"] === "42P01") return true; // PostgreSQL
238
238
 
239
- // Fallback: message matching (may be unreliable in multilingual environments)
239
+ // 폴백: 메시지 매칭 (다국어 환경에서는 신뢰할 없을 수 있음)
240
240
  const message = err instanceof Error ? err.message : String(err);
241
241
  const lowerMessage = message.toLowerCase();
242
242
 
@@ -13,21 +13,21 @@ import { getMatchedPrimaryKeys } from "../exec/queryable";
13
13
  import { getQueryDefObjectName } from "./table-ddl";
14
14
 
15
15
  /**
16
- * Generate DROP PRIMARY KEY QueryDef
16
+ * DROP PRIMARY KEY QueryDef 생성
17
17
  */
18
18
  export function getDropPrimaryKeyQueryDef(table: QueryDefObjectName): DropPrimaryKeyQueryDef {
19
19
  return { type: "dropPrimaryKey", table };
20
20
  }
21
21
 
22
22
  /**
23
- * Generate ADD PRIMARY KEY QueryDef
23
+ * ADD PRIMARY KEY QueryDef 생성
24
24
  */
25
25
  export function getAddPrimaryKeyQueryDef(table: QueryDefObjectName, columns: string[]): AddPrimaryKeyQueryDef {
26
26
  return { type: "addPrimaryKey", table, columns };
27
27
  }
28
28
 
29
29
  /**
30
- * Generate ADD FOREIGN KEY QueryDef
30
+ * ADD FOREIGN KEY QueryDef 생성
31
31
  */
32
32
  export function getAddForeignKeyQueryDef(
33
33
  db: DbContextBase,
@@ -52,7 +52,7 @@ export function getAddForeignKeyQueryDef(
52
52
  }
53
53
 
54
54
  /**
55
- * ADD INDEX QueryDef Generate
55
+ * ADD INDEX QueryDef 생성
56
56
  */
57
57
  export function getAddIndexQueryDef(
58
58
  table: QueryDefObjectName,
@@ -75,14 +75,14 @@ export function getAddIndexQueryDef(
75
75
  }
76
76
 
77
77
  /**
78
- * DROP FOREIGN KEY QueryDef Generate
78
+ * DROP FOREIGN KEY QueryDef 생성
79
79
  */
80
80
  export function getDropForeignKeyQueryDef(table: QueryDefObjectName, relationName: string): DropForeignKeyQueryDef {
81
81
  return { type: "dropForeignKey", table, foreignKey: `FK_${table.name}_${relationName}` };
82
82
  }
83
83
 
84
84
  /**
85
- * DROP INDEX QueryDef Generate
85
+ * DROP INDEX QueryDef 생성
86
86
  */
87
87
  export function getDropIndexQueryDef(table: QueryDefObjectName, columns: string[]): DropIndexQueryDef {
88
88
  return { type: "dropIndex", table, index: `IDX_${table.name}_${columns.join("_")}` };
@@ -7,7 +7,7 @@ import type {
7
7
  } from "../types/query-def";
8
8
 
9
9
  /**
10
- * Generate CLEAR SCHEMA QueryDef
10
+ * CLEAR SCHEMA QueryDef 생성
11
11
  */
12
12
  export function getClearSchemaQueryDef(params: {
13
13
  database: string;
@@ -17,21 +17,21 @@ export function getClearSchemaQueryDef(params: {
17
17
  }
18
18
 
19
19
  /**
20
- * Generate SCHEMA EXISTS QueryDef
20
+ * SCHEMA EXISTS QueryDef 생성
21
21
  */
22
22
  export function getSchemaExistsQueryDef(database: string, schema?: string): SchemaExistsQueryDef {
23
23
  return { type: "schemaExists", database, schema };
24
24
  }
25
25
 
26
26
  /**
27
- * Generate TRUNCATE TABLE QueryDef
27
+ * TRUNCATE TABLE QueryDef 생성
28
28
  */
29
29
  export function getTruncateQueryDef(table: QueryDefObjectName): TruncateQueryDef {
30
30
  return { type: "truncate", table };
31
31
  }
32
32
 
33
33
  /**
34
- * Generate SWITCH FK QueryDef
34
+ * SWITCH FK QueryDef 생성
35
35
  */
36
36
  export function getSwitchFkQueryDef(
37
37
  table: QueryDefObjectName,
@@ -14,12 +14,12 @@ import type { DbContextBase } from "../types/db-context-def";
14
14
  import { obj } from "@simplysm/core-common";
15
15
 
16
16
  /**
17
- * Transform Builder to CREATE QueryDef
17
+ * Builder CREATE QueryDef로 변환
18
18
  *
19
- * @param db - DbContext instance
19
+ * @param db - DbContext 인스턴스
20
20
  * @param builder - Table/View/Procedure builder
21
21
  * @returns CREATE TABLE/VIEW/PROCEDURE QueryDef
22
- * @throws {Error} When unknown builder type
22
+ * @throws {Error} 없는 builder 타입일 때
23
23
  */
24
24
  export function getCreateObjectQueryDef(
25
25
  db: DbContextBase,
@@ -33,21 +33,21 @@ export function getCreateObjectQueryDef(
33
33
  return getCreateProcQueryDef(db, builder);
34
34
  }
35
35
 
36
- throw new Error(`Unknown builder type: ${typeof builder}`);
36
+ throw new Error(`알 수 없는 builder 타입: ${typeof builder}`);
37
37
  }
38
38
 
39
39
  /**
40
- * CREATE TABLE QueryDef Generate
40
+ * CREATE TABLE QueryDef 생성
41
41
  *
42
- * @param db - DbContext instance
42
+ * @param db - DbContext 인스턴스
43
43
  * @param table - Table builder
44
44
  * @returns CREATE TABLE QueryDef
45
- * @throws {Error} When table has no columns
45
+ * @throws {Error} 테이블에 column이 없을
46
46
  */
47
47
  export function getCreateTableQueryDef(db: DbContextBase, table: TableBuilder<any, any>): QueryDef {
48
48
  const columns = table.meta.columns as ColumnBuilderRecord | undefined;
49
49
  if (columns == null) {
50
- throw new Error(`Table '${table.meta.name}' has no columns.`);
50
+ throw new Error(`테이블 '${table.meta.name}' column이 없습니다.`);
51
51
  }
52
52
 
53
53
  return {
@@ -65,19 +65,19 @@ export function getCreateTableQueryDef(db: DbContextBase, table: TableBuilder<an
65
65
  }
66
66
 
67
67
  /**
68
- * CREATE VIEW QueryDef Generate
68
+ * CREATE VIEW QueryDef 생성
69
69
  *
70
- * @param db - DbContext instance
70
+ * @param db - DbContext 인스턴스
71
71
  * @param view - View builder
72
72
  * @returns CREATE VIEW QueryDef
73
- * @throws {Error} When view has no viewFn
73
+ * @throws {Error} View에 viewFn이 없을
74
74
  */
75
75
  export function getCreateViewQueryDef(
76
76
  db: DbContextBase,
77
77
  view: ViewBuilder<any, any, any>,
78
78
  ): QueryDef {
79
79
  if (view.meta.viewFn == null) {
80
- throw new Error(`View '${view.meta.name}' has no viewFn.`);
80
+ throw new Error(`View '${view.meta.name}' viewFn이 없습니다.`);
81
81
  }
82
82
 
83
83
  const qr = view.meta.viewFn(db);
@@ -95,19 +95,19 @@ export function getCreateViewQueryDef(
95
95
  }
96
96
 
97
97
  /**
98
- * CREATE PROCEDURE QueryDef Generate
98
+ * CREATE PROCEDURE QueryDef 생성
99
99
  *
100
- * @param db - DbContext instance
100
+ * @param db - DbContext 인스턴스
101
101
  * @param procedure - Procedure builder
102
102
  * @returns CREATE PROCEDURE QueryDef
103
- * @throws {Error} When procedure has no body
103
+ * @throws {Error} Procedure에 body가 없을
104
104
  */
105
105
  export function getCreateProcQueryDef(
106
106
  db: DbContextBase,
107
107
  procedure: ProcedureBuilder<any, any>,
108
108
  ): QueryDef {
109
109
  if (procedure.meta.query == null) {
110
- throw new Error(`Procedure '${procedure.meta.name}' has no body.`);
110
+ throw new Error(`Procedure '${procedure.meta.name}' body가 없습니다.`);
111
111
  }
112
112
 
113
113
  const params = procedure.meta.params as ColumnBuilderRecord | undefined;
@@ -140,14 +140,14 @@ export function getCreateProcQueryDef(
140
140
  }
141
141
 
142
142
  /**
143
- * DROP TABLE QueryDef Generate
143
+ * DROP TABLE QueryDef 생성
144
144
  */
145
145
  export function getDropTableQueryDef(table: QueryDefObjectName): DropTableQueryDef {
146
146
  return { type: "dropTable", table };
147
147
  }
148
148
 
149
149
  /**
150
- * RENAME TABLE QueryDef Generate
150
+ * RENAME TABLE QueryDef 생성
151
151
  */
152
152
  export function getRenameTableQueryDef(
153
153
  table: QueryDefObjectName,
@@ -157,25 +157,25 @@ export function getRenameTableQueryDef(
157
157
  }
158
158
 
159
159
  /**
160
- * DROP VIEW QueryDef Generate
160
+ * DROP VIEW QueryDef 생성
161
161
  */
162
162
  export function getDropViewQueryDef(view: QueryDefObjectName): DropViewQueryDef {
163
163
  return { type: "dropView", view };
164
164
  }
165
165
 
166
166
  /**
167
- * DROP PROCEDURE QueryDef Generate
167
+ * DROP PROCEDURE QueryDef 생성
168
168
  */
169
169
  export function getDropProcQueryDef(procedure: QueryDefObjectName): DropProcQueryDef {
170
170
  return { type: "dropProc", procedure };
171
171
  }
172
172
 
173
173
  /**
174
- * Transform TableBuilder/ViewBuilder to QueryDefObjectName
174
+ * TableBuilder/ViewBuilder QueryDefObjectName으로 변환
175
175
  *
176
- * @param db - DbContext instance
177
- * @param tableOrView - Table or View builder
178
- * @returns Object name information for use in QueryDef
176
+ * @param db - DbContext 인스턴스
177
+ * @param tableOrView - Table 또는 View builder
178
+ * @returns QueryDef에서 사용할 객체 이름 정보
179
179
  */
180
180
  export function getQueryDefObjectName(
181
181
  db: DbContextBase,