@simplysm/orm-common 13.0.100 → 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
@@ -4,12 +4,12 @@ import type { Expr, WhereExpr } from "./expr";
4
4
  //#region ========== Common ==========
5
5
 
6
6
  /**
7
- * DB object name (table, View, Procedure, etc.)
7
+ * DB 객체 이름 (table, View, Procedure )
8
8
  *
9
- * DBMS-specific namespaces:
10
- * - MySQL: `database.name` (schema ignored)
11
- * - MSSQL: `database.schema.name` (schema defaults to dbo)
12
- * - PostgreSQL: `schema.name` (database is for connection only)
9
+ * DBMS 네임스페이스:
10
+ * - MySQL: `database.name` (schema 무시)
11
+ * - MSSQL: `database.schema.name` (schema 기본값 dbo)
12
+ * - PostgreSQL: `schema.name` (database 연결용)
13
13
  */
14
14
  export interface QueryDefObjectName {
15
15
  database?: string;
@@ -22,9 +22,9 @@ export interface QueryDefObjectName {
22
22
  //#region ========== DML ==========
23
23
 
24
24
  /**
25
- * CUD query OUTPUT clause definition
25
+ * CUD query OUTPUT 정의
26
26
  *
27
- * Define return values after INSERT/UPDATE/DELETE
27
+ * INSERT/UPDATE/DELETE 후 반환값 정의
28
28
  */
29
29
  export interface CudOutputDef {
30
30
  columns: string[];
@@ -33,22 +33,22 @@ export interface CudOutputDef {
33
33
  }
34
34
 
35
35
  /**
36
- * SELECT Query definition
36
+ * SELECT query 정의
37
37
  *
38
- * @property type - Query type ("select")
39
- * @property from - FROM clause (table/Subquery)
38
+ * @property type - Query 타입 ("select")
39
+ * @property from - FROM (table/subquery)
40
40
  * @property as - Table alias
41
- * @property select - SELECT clause column mapping
42
- * @property distinct - Whether DISTINCT
41
+ * @property select - SELECT column 매핑
42
+ * @property distinct - DISTINCT 여부
43
43
  * @property top - TOP N (MSSQL)
44
- * @property lock - Whether to lock
45
- * @property where - WHERE condition array
46
- * @property joins - JOIN definition array
47
- * @property orderBy - ORDER BY [column, direction] array
44
+ * @property lock - 잠금 여부
45
+ * @property where - WHERE 조건 배열
46
+ * @property joins - JOIN 정의 배열
47
+ * @property orderBy - ORDER BY [column, direction] 배열
48
48
  * @property limit - LIMIT [offset, count]
49
- * @property groupBy - GROUP BY expression array
50
- * @property having - HAVING condition array
51
- * @property with - Recursive CTE definition
49
+ * @property groupBy - GROUP BY expression 배열
50
+ * @property having - HAVING 조건 배열
51
+ * @property with - 재귀 CTE 정의
52
52
  */
53
53
  export interface SelectQueryDef {
54
54
  type: "select";
@@ -68,21 +68,21 @@ export interface SelectQueryDef {
68
68
  }
69
69
 
70
70
  /**
71
- * JOIN Query definition
71
+ * JOIN query 정의
72
72
  *
73
- * SelectQueryDef extension + isSingle flag
73
+ * SelectQueryDef 확장 + isSingle 플래그
74
74
  */
75
75
  export interface SelectQueryDefJoin extends SelectQueryDef {
76
- /** Whether single result (1:1 relation) */
76
+ /** 단일 결과 여부 (1:1 관계) */
77
77
  isSingle?: boolean;
78
78
  }
79
79
 
80
80
  /**
81
- * INSERT Query definition
81
+ * INSERT query 정의
82
82
  *
83
- * @property records - Record array to insert
84
- * @property overrideIdentity - Whether to enable IDENTITY_INSERT
85
- * @property output - OUTPUT clause definition
83
+ * @property records - 삽입할 레코드 배열
84
+ * @property overrideIdentity - IDENTITY_INSERT 활성화 여부
85
+ * @property output - OUTPUT 정의
86
86
  */
87
87
  export interface InsertQueryDef {
88
88
  type: "insert";
@@ -93,9 +93,9 @@ export interface InsertQueryDef {
93
93
  }
94
94
 
95
95
  /**
96
- * Conditional INSERT Query definition
96
+ * 조건부 INSERT query 정의
97
97
  *
98
- * Insert only if not exists
98
+ * 존재하지 않을 때만 삽입
99
99
  */
100
100
  export interface InsertIfNotExistsQueryDef {
101
101
  type: "insertIfNotExists";
@@ -107,9 +107,9 @@ export interface InsertIfNotExistsQueryDef {
107
107
  }
108
108
 
109
109
  /**
110
- * INSERT INTO SELECT Query definition
110
+ * INSERT INTO SELECT query 정의
111
111
  *
112
- * Insert subquery results
112
+ * Subquery 결과를 삽입
113
113
  */
114
114
  export interface InsertIntoQueryDef {
115
115
  type: "insertInto";
@@ -120,10 +120,10 @@ export interface InsertIntoQueryDef {
120
120
  }
121
121
 
122
122
  /**
123
- * UPDATE Query definition
123
+ * UPDATE query 정의
124
124
  *
125
- * @property record - Column/value mapping to update
126
- * @property joins - UPDATE JOIN (when supported)
125
+ * @property record - 갱신할 column/값 매핑
126
+ * @property joins - UPDATE JOIN (지원 )
127
127
  */
128
128
  export interface UpdateQueryDef {
129
129
  type: "update";
@@ -138,7 +138,7 @@ export interface UpdateQueryDef {
138
138
  }
139
139
 
140
140
  /**
141
- * DELETE Query definition
141
+ * DELETE query 정의
142
142
  */
143
143
  export interface DeleteQueryDef {
144
144
  type: "delete";
@@ -152,9 +152,9 @@ export interface DeleteQueryDef {
152
152
  }
153
153
 
154
154
  /**
155
- * UPSERT Query definition
155
+ * UPSERT query 정의
156
156
  *
157
- * INSERT or UPDATE (MERGE Pattern)
157
+ * INSERT 또는 UPDATE (MERGE 패턴)
158
158
  */
159
159
  export interface UpsertQueryDef {
160
160
  type: "upsert";
@@ -170,7 +170,7 @@ export interface UpsertQueryDef {
170
170
 
171
171
  //#region ========== Utils ==========
172
172
 
173
- /** FK constraint enable/disable */
173
+ /** FK 제약조건 활성화/비활성화 */
174
174
  export interface SwitchFkQueryDef {
175
175
  type: "switchFk";
176
176
  table: QueryDefObjectName;
@@ -181,7 +181,7 @@ export interface SwitchFkQueryDef {
181
181
 
182
182
  //#region ========== DDL - Schema ==========
183
183
 
184
- /** Clear schema (delete all objects) */
184
+ /** Schema 초기화 (모든 객체 삭제) */
185
185
  export interface ClearSchemaQueryDef {
186
186
  type: "clearSchema";
187
187
  database: string;
@@ -249,7 +249,7 @@ export interface DropColumnQueryDef {
249
249
  column: string;
250
250
  }
251
251
 
252
- /** MODIFY COLUMN (type/property change) */
252
+ /** MODIFY COLUMN (타입/속성 변경) */
253
253
  export interface ModifyColumnQueryDef {
254
254
  type: "modifyColumn";
255
255
  table: QueryDefObjectName;
@@ -376,7 +376,7 @@ export interface ExecProcQueryDef {
376
376
 
377
377
  //#region ========== Meta ==========
378
378
 
379
- /** Check schema existence */
379
+ /** Schema 존재 여부 확인 */
380
380
  export interface SchemaExistsQueryDef {
381
381
  type: "schemaExists";
382
382
  database: string;
@@ -385,13 +385,13 @@ export interface SchemaExistsQueryDef {
385
385
 
386
386
  //#endregion
387
387
 
388
- //#region ========== DDL type constants ==========
388
+ //#region ========== DDL 타입 상수 ==========
389
389
 
390
390
  /**
391
- * DDL QueryDef union (for compile-time validation)
391
+ * DDL QueryDef union (컴파일 타임 검증용)
392
392
  *
393
393
  * @remarks
394
- * switchFk is excluded because it is not DDL (can be used within transactions)
394
+ * switchFk DDL이 아니므로 제외 (트랜잭션 내에서 사용 가능)
395
395
  */
396
396
  type DdlQueryDef =
397
397
  | ClearSchemaQueryDef
@@ -415,13 +415,13 @@ type DdlQueryDef =
415
415
  | DropProcQueryDef;
416
416
 
417
417
  /**
418
- * DDL (Data Definition Language) type constants
418
+ * DDL (Data Definition Language) 타입 상수
419
419
  *
420
- * Used for blocking DDL within transactions and DDL type validation
421
- * Uses satisfies keyword for compile-time synchronization with DdlQueryDef
420
+ * 트랜잭션 DDL 차단 DDL 타입 검증에 사용
421
+ * DdlQueryDef와의 컴파일 타임 동기화를 위해 satisfies 키워드 사용
422
422
  *
423
423
  * @remarks
424
- * switchFk is excluded because it is not DDL (can be used within transactions)
424
+ * switchFk DDL이 아니므로 제외 (트랜잭션 내에서 사용 가능)
425
425
  */
426
426
  export const DDL_TYPES = [
427
427
  "clearSchema",
@@ -445,15 +445,15 @@ export const DDL_TYPES = [
445
445
  "dropProc",
446
446
  ] as const satisfies readonly DdlQueryDef["type"][];
447
447
 
448
- /** DDL type union */
448
+ /** DDL 타입 union */
449
449
  export type DdlType = (typeof DDL_TYPES)[number];
450
450
 
451
451
  //#endregion
452
452
 
453
- //#region ========== Combined Union Type ==========
453
+ //#region ========== 결합 Union 타입 ==========
454
454
 
455
455
  /**
456
- * All Query definition union type
456
+ * 전체 query 정의 union 타입
457
457
  *
458
458
  * DML (SELECT/INSERT/UPDATE/DELETE/UPSERT) +
459
459
  * DDL (Table/Column/PK/FK/Index/View/Procedure) +
@@ -9,15 +9,15 @@ declare function setImmediate(callback: () => void): void;
9
9
  // ============================================
10
10
 
11
11
  /**
12
- * Parse value to specified type
12
+ * 값을 지정된 타입으로 파싱
13
13
  *
14
- * @param value - value to parse
15
- * @param type - target type (ColumnPrimitiveStr)
16
- * @returns parsed value
17
- * @throws Error if parsing fails
14
+ * @param value - 파싱할
15
+ * @param type - 대상 타입 (ColumnPrimitiveStr)
16
+ * @returns 파싱된
17
+ * @throws 파싱 실패 Error
18
18
  */
19
19
  function parseValue(value: unknown, type: ColumnPrimitiveStr): unknown {
20
- // null/undefined returned as-is (key removal handled by caller)
20
+ // null/undefined 그대로 반환 (key 제거는 호출자가 처리)
21
21
  if (value == null) {
22
22
  return undefined;
23
23
  }
@@ -26,7 +26,7 @@ function parseValue(value: unknown, type: ColumnPrimitiveStr): unknown {
26
26
  case "number": {
27
27
  const num = Number(value);
28
28
  if (Number.isNaN(num)) {
29
- throw new Error(`Failed to parse number: ${String(value)}`);
29
+ throw new Error(`숫자 파싱 실패: ${String(value)}`);
30
30
  }
31
31
  return num;
32
32
  }
@@ -35,7 +35,7 @@ function parseValue(value: unknown, type: ColumnPrimitiveStr): unknown {
35
35
  return String(value);
36
36
 
37
37
  case "boolean":
38
- // Handle 0, 1, "0", "1", true, false, etc.
38
+ // 0, 1, "0", "1", true, false 등 처리
39
39
  if (value === 0 || value === "0" || value === false) return false;
40
40
  if (value === 1 || value === "1" || value === true) return true;
41
41
  return Boolean(value);
@@ -56,7 +56,7 @@ function parseValue(value: unknown, type: ColumnPrimitiveStr): unknown {
56
56
  case "Bytes":
57
57
  if (value instanceof Uint8Array) return value;
58
58
  if (typeof value === "string") return bytes.fromHex(value);
59
- throw new Error(`Failed to parse Bytes: ${typeof value}`);
59
+ throw new Error(`Bytes 파싱 실패: ${typeof value}`);
60
60
  }
61
61
  }
62
62
 
@@ -64,14 +64,14 @@ function parseValue(value: unknown, type: ColumnPrimitiveStr): unknown {
64
64
  // Grouping Utilities
65
65
  // ============================================
66
66
 
67
- /** Precomputed column metadata for flatToNested */
67
+ /** flatToNested용 사전 계산된 column 메타데이터 */
68
68
  interface ColumnInfo {
69
69
  key: string;
70
70
  type: ColumnPrimitiveStr;
71
- parts: string[] | undefined; // undefined for simple keys, string[] for nested keys
71
+ parts: string[] | undefined; // 단순 key는 undefined, 중첩 key는 string[]
72
72
  }
73
73
 
74
- /** Precompute column info once per unique columns object */
74
+ /** 고유한 columns 객체마다 column 정보를 번만 사전 계산 */
75
75
  function buildColumnInfos(columns: Record<string, ColumnPrimitiveStr>): ColumnInfo[] {
76
76
  return Object.entries(columns).map(([key, type]) => ({
77
77
  key,
@@ -81,7 +81,7 @@ function buildColumnInfos(columns: Record<string, ColumnPrimitiveStr>): ColumnIn
81
81
  }
82
82
 
83
83
  /**
84
- * Transform flat record to nested object
84
+ * 플랫 레코드를 중첩 객체로 변환
85
85
  *
86
86
  * @example
87
87
  * { "posts.id": 1, "posts.title": "Hi" } → { posts: { id: 1, title: "Hi" } }
@@ -96,11 +96,11 @@ function flatToNested(
96
96
  const rawValue = record[key];
97
97
  const parsedValue = parseValue(rawValue, type);
98
98
 
99
- // undefined values are not added as keys
99
+ // undefined 값은 key로 추가하지 않음
100
100
  if (parsedValue === undefined) continue;
101
101
 
102
102
  if (parts != null) {
103
- // Nested key: "posts.id" → { posts: { id: ... } }
103
+ // 중첩 key: "posts.id" → { posts: { id: ... } }
104
104
  let current = result;
105
105
  for (let i = 0; i < parts.length - 1; i++) {
106
106
  const part = parts[i];
@@ -111,7 +111,7 @@ function flatToNested(
111
111
  }
112
112
  current[parts[parts.length - 1]] = parsedValue;
113
113
  } else {
114
- // Simple key
114
+ // 단순 key
115
115
  result[key] = parsedValue;
116
116
  }
117
117
  }
@@ -120,7 +120,7 @@ function flatToNested(
120
120
  }
121
121
 
122
122
  /**
123
- * Check if object is empty (all values are undefined)
123
+ * 객체가 비어있는지 확인 (모든 값이 undefined)
124
124
  */
125
125
  function isEmptyObject(record: Record<string, unknown>): boolean {
126
126
  return Object.keys(record).length === 0;
@@ -130,10 +130,10 @@ function isEmptyObject(record: Record<string, unknown>): boolean {
130
130
  // Main Function
131
131
  // ============================================
132
132
 
133
- /** Yield interval: yield to event loop every N records */
133
+ /** 양보 간격: N개 레코드마다 이벤트 루프에 양보 */
134
134
  const YIELD_INTERVAL = 100;
135
135
 
136
- /** Event loop yield: setImmediate for Node.js, setTimeout fallback for browser */
136
+ /** 이벤트 루프 양보: Node.js는 setImmediate, 브라우저는 setTimeout 폴백 */
137
137
  const yieldToEventLoop: () => Promise<void> =
138
138
  typeof setImmediate !== "undefined"
139
139
  ? () => new Promise<void>((resolve) => setImmediate(resolve))
@@ -195,7 +195,7 @@ export async function parseQueryResult<TRecord>(
195
195
  }
196
196
 
197
197
  /**
198
- * Parse simple records without JOINs
198
+ * JOIN이 없는 단순 레코드 파싱
199
199
  */
200
200
  async function parseSimpleRecords<TRecord>(
201
201
  rawResults: Record<string, unknown>[],
@@ -205,37 +205,37 @@ async function parseSimpleRecords<TRecord>(
205
205
  const results: Record<string, unknown>[] = [];
206
206
 
207
207
  for (let i = 0; i < rawResults.length; i++) {
208
- // Yield to event loop
208
+ // 이벤트 루프에 양보
209
209
  if (i > 0 && i % YIELD_INTERVAL === 0) {
210
210
  await yieldToEventLoop();
211
211
  }
212
212
 
213
213
  const parsed = flatToNested(rawResults[i], columnInfos);
214
214
 
215
- // Exclude empty objects
215
+ // 객체 제외
216
216
  if (!isEmptyObject(parsed)) {
217
217
  results.push(parsed);
218
218
  }
219
219
  }
220
220
 
221
- // Return undefined for empty arrays
221
+ // 배열은 undefined 반환
222
222
  return results.length > 0 ? (results as TRecord[]) : undefined;
223
223
  }
224
224
 
225
225
  /**
226
- * Sort JOIN keys by depth (shallower ones first)
226
+ * JOIN key를 깊이순으로 정렬 (얕은 우선)
227
227
  * "posts" (1) < "posts.comments" (2)
228
228
  */
229
229
  function sortJoinKeysByDepth(joinKeys: string[]): string[] {
230
230
  return [...joinKeys].sort((a, b) => {
231
231
  const depthA = a.split(".").length;
232
232
  const depthB = b.split(".").length;
233
- return depthA - depthB; // Shallower ones first
233
+ return depthA - depthB; // 얕은 우선
234
234
  });
235
235
  }
236
236
 
237
237
  /**
238
- * Parse records with JOINs (recursive grouping)
238
+ * JOIN이 있는 레코드 파싱 (재귀 그룹핑)
239
239
  */
240
240
  async function parseJoinedRecords<TRecord>(
241
241
  rawResults: Record<string, unknown>[],
@@ -264,9 +264,9 @@ async function parseJoinedRecords<TRecord>(
264
264
  }
265
265
 
266
266
  /**
267
- * Serialize group key to string (used as Map key)
267
+ * 그룹 key 문자열로 직렬화 (Map key로 사용)
268
268
  *
269
- * Custom serialization faster than JSON.stringify
269
+ * JSON.stringify보다 빠른 커스텀 직렬화
270
270
  */
271
271
  function serializeGroupKey(groupKey: Record<string, unknown>, cachedKeyOrder?: string[]): string {
272
272
  const keys = cachedKeyOrder ?? Object.keys(groupKey).sort((a, b) => a.localeCompare(b));
@@ -411,13 +411,13 @@ function groupRecordsRecursively(
411
411
  }
412
412
 
413
413
  /**
414
- * Build a Set of keys that should be excluded from group key (join keys and their prefixes)
414
+ * 그룹 key에서 제외할 key의 Set 구성 (join key와 접두사)
415
415
  */
416
416
  function buildJoinKeyExclusionSet(joinKeys: string[]): Set<string> {
417
417
  const exclusions = new Set<string>();
418
418
  for (const jk of joinKeys) {
419
419
  exclusions.add(jk);
420
- // Also exclude parent paths (e.g., "posts" for join key "posts.comments")
420
+ // 상위 경로도 제외 (예: join key "posts.comments"에 대해 "posts")
421
421
  const parts = jk.split(".");
422
422
  for (let i = 1; i < parts.length; i++) {
423
423
  exclusions.add(parts.slice(0, i).join("."));
@@ -427,7 +427,7 @@ function buildJoinKeyExclusionSet(joinKeys: string[]): Set<string> {
427
427
  }
428
428
 
429
429
  /**
430
- * Extract group key from record excluding JOIN keys
430
+ * JOIN key 제외하고 레코드에서 그룹 key 추출
431
431
  */
432
432
  function extractGroupKey(
433
433
  record: Record<string, unknown>,
@@ -435,9 +435,9 @@ function extractGroupKey(
435
435
  ): Record<string, unknown> {
436
436
  const result: Record<string, unknown> = {};
437
437
  for (const [key, value] of Object.entries(record)) {
438
- // Only include non-JOIN keys
438
+ // JOIN이 아닌 key만 포함
439
439
  if (!joinKeyExclusions.has(key)) {
440
- // Only use primitive values (not object/array) as group key
440
+ // 프리미티브 값만 그룹 key로 사용 (객체/배열 제외)
441
441
  if (value == null || typeof value !== "object") {
442
442
  result[key] = value;
443
443
  }
@@ -447,7 +447,7 @@ function extractGroupKey(
447
447
  }
448
448
 
449
449
  /**
450
- * Merge JOIN data to existing group
450
+ * 기존 그룹에 JOIN 데이터 병합
451
451
  */
452
452
  function mergeJoinData(
453
453
  existingGroup: Record<string, unknown>,
@@ -458,7 +458,7 @@ function mergeJoinData(
458
458
  const newJoinData = newRecord[localKey] as Record<string, unknown> | undefined;
459
459
 
460
460
  if (newJoinData == null || isEmptyObject(newJoinData)) {
461
- return; // No data to merge
461
+ return; // 병합할 데이터 없음
462
462
  }
463
463
 
464
464
  const existingJoinData = existingGroup[localKey];
@@ -467,7 +467,7 @@ function mergeJoinData(
467
467
  // isSingle: true - error if data exists and values differ
468
468
  if (existingJoinData != null) {
469
469
  if (!obj.equal(existingJoinData as Record<string, unknown>, newJoinData)) {
470
- throw new Error(`isSingle relationship '${localKey}' has multiple different results.`);
470
+ throw new Error(`isSingle 관계 '${localKey}' 여러 개의 다른 결과가 있습니다.`);
471
471
  }
472
472
  } else {
473
473
  existingGroup[localKey] = newJoinData;
@@ -477,10 +477,10 @@ function mergeJoinData(
477
477
  const hashSetKey = `__hashSet__${localKey}`;
478
478
  if (!Array.isArray(existingJoinData)) {
479
479
  existingGroup[localKey] = [newJoinData];
480
- // Initialize internal property for Set-based duplicate checking
480
+ // Set 기반 중복 검사용 내부 속성 초기화
481
481
  existingGroup[hashSetKey] = new Set([serializeGroupKey(newJoinData)]);
482
482
  } else {
483
- // Set-based duplicate checking (O(1))
483
+ // Set 기반 중복 검사 (O(1))
484
484
  const hashSet = existingGroup[hashSetKey] as Set<string> | undefined;
485
485
  const newHash = serializeGroupKey(newJoinData);
486
486
  if (hashSet != null) {
@@ -489,7 +489,7 @@ function mergeJoinData(
489
489
  existingJoinData.push(newJoinData);
490
490
  }
491
491
  } else {
492
- // Fallback without hashSet (legacy approach)
492
+ // hashSet 없는 폴백 (레거시 방식)
493
493
  const isDuplicate = existingJoinData.some((item) =>
494
494
  obj.equal(item as Record<string, unknown>, newJoinData),
495
495
  );