@simplysm/orm-common 13.0.69 → 13.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/README.md +54 -1447
  2. package/dist/create-db-context.d.ts +10 -10
  3. package/dist/create-db-context.js +9 -9
  4. package/dist/create-db-context.js.map +1 -1
  5. package/dist/ddl/column-ddl.d.ts +4 -4
  6. package/dist/ddl/initialize.d.ts +17 -17
  7. package/dist/ddl/initialize.js +2 -2
  8. package/dist/ddl/initialize.js.map +1 -1
  9. package/dist/ddl/relation-ddl.d.ts +6 -6
  10. package/dist/ddl/schema-ddl.d.ts +4 -4
  11. package/dist/ddl/table-ddl.d.ts +24 -24
  12. package/dist/ddl/table-ddl.js +4 -4
  13. package/dist/ddl/table-ddl.js.map +1 -1
  14. package/dist/errors/db-transaction-error.d.ts +15 -15
  15. package/dist/errors/db-transaction-error.d.ts.map +1 -1
  16. package/dist/exec/executable.d.ts +23 -23
  17. package/dist/exec/executable.js +3 -3
  18. package/dist/exec/executable.js.map +1 -1
  19. package/dist/exec/queryable.d.ts +160 -160
  20. package/dist/exec/queryable.js +119 -119
  21. package/dist/exec/queryable.js.map +1 -1
  22. package/dist/exec/search-parser.d.ts +37 -37
  23. package/dist/exec/search-parser.d.ts.map +1 -1
  24. package/dist/expr/expr-unit.d.ts +4 -4
  25. package/dist/expr/expr.d.ts +257 -257
  26. package/dist/expr/expr.js +265 -265
  27. package/dist/expr/expr.js.map +1 -1
  28. package/dist/query-builder/base/expr-renderer-base.d.ts +9 -9
  29. package/dist/query-builder/base/expr-renderer-base.js +2 -2
  30. package/dist/query-builder/base/expr-renderer-base.js.map +1 -1
  31. package/dist/query-builder/base/query-builder-base.d.ts +26 -26
  32. package/dist/query-builder/base/query-builder-base.d.ts.map +1 -1
  33. package/dist/query-builder/base/query-builder-base.js +22 -22
  34. package/dist/query-builder/base/query-builder-base.js.map +1 -1
  35. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts +4 -4
  36. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts.map +1 -1
  37. package/dist/query-builder/mssql/mssql-expr-renderer.js +18 -18
  38. package/dist/query-builder/mssql/mssql-expr-renderer.js.map +1 -1
  39. package/dist/query-builder/mssql/mssql-query-builder.d.ts +2 -2
  40. package/dist/query-builder/mssql/mssql-query-builder.d.ts.map +1 -1
  41. package/dist/query-builder/mssql/mssql-query-builder.js +11 -11
  42. package/dist/query-builder/mssql/mssql-query-builder.js.map +1 -1
  43. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts +4 -4
  44. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts.map +1 -1
  45. package/dist/query-builder/mysql/mysql-expr-renderer.js +17 -17
  46. package/dist/query-builder/mysql/mysql-expr-renderer.js.map +1 -1
  47. package/dist/query-builder/mysql/mysql-query-builder.d.ts +8 -8
  48. package/dist/query-builder/mysql/mysql-query-builder.d.ts.map +1 -1
  49. package/dist/query-builder/mysql/mysql-query-builder.js +5 -5
  50. package/dist/query-builder/mysql/mysql-query-builder.js.map +1 -1
  51. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts +4 -4
  52. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +1 -1
  53. package/dist/query-builder/postgresql/postgresql-expr-renderer.js +17 -17
  54. package/dist/query-builder/postgresql/postgresql-expr-renderer.js.map +1 -1
  55. package/dist/query-builder/postgresql/postgresql-query-builder.d.ts +5 -5
  56. package/dist/query-builder/postgresql/postgresql-query-builder.d.ts.map +1 -1
  57. package/dist/query-builder/postgresql/postgresql-query-builder.js +8 -8
  58. package/dist/query-builder/postgresql/postgresql-query-builder.js.map +1 -1
  59. package/dist/query-builder/query-builder.d.ts +1 -1
  60. package/dist/schema/factory/column-builder.d.ts +79 -79
  61. package/dist/schema/factory/column-builder.js +42 -42
  62. package/dist/schema/factory/index-builder.d.ts +39 -39
  63. package/dist/schema/factory/index-builder.js +26 -26
  64. package/dist/schema/factory/relation-builder.d.ts +99 -99
  65. package/dist/schema/factory/relation-builder.d.ts.map +1 -1
  66. package/dist/schema/factory/relation-builder.js +38 -38
  67. package/dist/schema/procedure-builder.d.ts +49 -49
  68. package/dist/schema/procedure-builder.d.ts.map +1 -1
  69. package/dist/schema/procedure-builder.js +33 -33
  70. package/dist/schema/table-builder.d.ts +59 -59
  71. package/dist/schema/table-builder.d.ts.map +1 -1
  72. package/dist/schema/table-builder.js +43 -43
  73. package/dist/schema/view-builder.d.ts +49 -49
  74. package/dist/schema/view-builder.d.ts.map +1 -1
  75. package/dist/schema/view-builder.js +32 -32
  76. package/dist/types/column.d.ts +22 -22
  77. package/dist/types/column.js +1 -1
  78. package/dist/types/column.js.map +1 -1
  79. package/dist/types/db.d.ts +40 -40
  80. package/dist/types/expr.d.ts +59 -59
  81. package/dist/types/expr.d.ts.map +1 -1
  82. package/dist/types/query-def.d.ts +44 -44
  83. package/dist/types/query-def.d.ts.map +1 -1
  84. package/dist/utils/result-parser.d.ts +11 -11
  85. package/dist/utils/result-parser.js +3 -3
  86. package/dist/utils/result-parser.js.map +1 -1
  87. package/package.json +5 -5
  88. package/src/create-db-context.ts +20 -20
  89. package/src/ddl/column-ddl.ts +4 -4
  90. package/src/ddl/initialize.ts +259 -259
  91. package/src/ddl/relation-ddl.ts +89 -89
  92. package/src/ddl/schema-ddl.ts +4 -4
  93. package/src/ddl/table-ddl.ts +189 -189
  94. package/src/errors/db-transaction-error.ts +13 -13
  95. package/src/exec/executable.ts +25 -25
  96. package/src/exec/queryable.ts +2033 -2033
  97. package/src/exec/search-parser.ts +57 -57
  98. package/src/expr/expr-unit.ts +4 -4
  99. package/src/expr/expr.ts +2140 -2140
  100. package/src/query-builder/base/expr-renderer-base.ts +237 -237
  101. package/src/query-builder/base/query-builder-base.ts +213 -213
  102. package/src/query-builder/mssql/mssql-expr-renderer.ts +607 -607
  103. package/src/query-builder/mssql/mssql-query-builder.ts +650 -650
  104. package/src/query-builder/mysql/mysql-expr-renderer.ts +613 -613
  105. package/src/query-builder/mysql/mysql-query-builder.ts +759 -759
  106. package/src/query-builder/postgresql/postgresql-expr-renderer.ts +611 -611
  107. package/src/query-builder/postgresql/postgresql-query-builder.ts +686 -686
  108. package/src/query-builder/query-builder.ts +19 -19
  109. package/src/schema/factory/column-builder.ts +423 -423
  110. package/src/schema/factory/index-builder.ts +164 -164
  111. package/src/schema/factory/relation-builder.ts +453 -453
  112. package/src/schema/procedure-builder.ts +232 -232
  113. package/src/schema/table-builder.ts +319 -319
  114. package/src/schema/view-builder.ts +221 -221
  115. package/src/types/column.ts +188 -188
  116. package/src/types/db.ts +208 -208
  117. package/src/types/expr.ts +697 -697
  118. package/src/types/query-def.ts +513 -513
  119. package/src/utils/result-parser.ts +458 -458
  120. package/tests/db-context/create-db-context.spec.ts +224 -0
  121. package/tests/db-context/define-db-context.spec.ts +68 -0
  122. package/tests/ddl/basic.expected.ts +341 -0
  123. package/tests/ddl/basic.spec.ts +714 -0
  124. package/tests/ddl/column-builder.expected.ts +310 -0
  125. package/tests/ddl/column-builder.spec.ts +637 -0
  126. package/tests/ddl/index-builder.expected.ts +38 -0
  127. package/tests/ddl/index-builder.spec.ts +202 -0
  128. package/tests/ddl/procedure-builder.expected.ts +52 -0
  129. package/tests/ddl/procedure-builder.spec.ts +234 -0
  130. package/tests/ddl/relation-builder.expected.ts +36 -0
  131. package/tests/ddl/relation-builder.spec.ts +372 -0
  132. package/tests/ddl/table-builder.expected.ts +113 -0
  133. package/tests/ddl/table-builder.spec.ts +433 -0
  134. package/tests/ddl/view-builder.expected.ts +38 -0
  135. package/tests/ddl/view-builder.spec.ts +176 -0
  136. package/tests/dml/delete.expected.ts +96 -0
  137. package/tests/dml/delete.spec.ts +160 -0
  138. package/tests/dml/insert.expected.ts +192 -0
  139. package/tests/dml/insert.spec.ts +288 -0
  140. package/tests/dml/update.expected.ts +176 -0
  141. package/tests/dml/update.spec.ts +318 -0
  142. package/tests/dml/upsert.expected.ts +215 -0
  143. package/tests/dml/upsert.spec.ts +242 -0
  144. package/tests/errors/queryable-errors.spec.ts +177 -0
  145. package/tests/escape.spec.ts +100 -0
  146. package/tests/examples/pivot.expected.ts +211 -0
  147. package/tests/examples/pivot.spec.ts +533 -0
  148. package/tests/examples/sampling.expected.ts +69 -0
  149. package/tests/examples/sampling.spec.ts +104 -0
  150. package/tests/examples/unpivot.expected.ts +120 -0
  151. package/tests/examples/unpivot.spec.ts +226 -0
  152. package/tests/exec/search-parser.spec.ts +283 -0
  153. package/tests/executable/basic.expected.ts +18 -0
  154. package/tests/executable/basic.spec.ts +54 -0
  155. package/tests/expr/comparison.expected.ts +282 -0
  156. package/tests/expr/comparison.spec.ts +400 -0
  157. package/tests/expr/conditional.expected.ts +134 -0
  158. package/tests/expr/conditional.spec.ts +276 -0
  159. package/tests/expr/date.expected.ts +332 -0
  160. package/tests/expr/date.spec.ts +526 -0
  161. package/tests/expr/math.expected.ts +62 -0
  162. package/tests/expr/math.spec.ts +106 -0
  163. package/tests/expr/string.expected.ts +218 -0
  164. package/tests/expr/string.spec.ts +356 -0
  165. package/tests/expr/utility.expected.ts +147 -0
  166. package/tests/expr/utility.spec.ts +182 -0
  167. package/tests/select/basic.expected.ts +322 -0
  168. package/tests/select/basic.spec.ts +502 -0
  169. package/tests/select/filter.expected.ts +357 -0
  170. package/tests/select/filter.spec.ts +1068 -0
  171. package/tests/select/group.expected.ts +169 -0
  172. package/tests/select/group.spec.ts +244 -0
  173. package/tests/select/join.expected.ts +582 -0
  174. package/tests/select/join.spec.ts +805 -0
  175. package/tests/select/order.expected.ts +150 -0
  176. package/tests/select/order.spec.ts +189 -0
  177. package/tests/select/recursive-cte.expected.ts +244 -0
  178. package/tests/select/recursive-cte.spec.ts +514 -0
  179. package/tests/select/result-meta.spec.ts +270 -0
  180. package/tests/select/subquery.expected.ts +363 -0
  181. package/tests/select/subquery.spec.ts +537 -0
  182. package/tests/select/view.expected.ts +155 -0
  183. package/tests/select/view.spec.ts +235 -0
  184. package/tests/select/window.expected.ts +345 -0
  185. package/tests/select/window.spec.ts +618 -0
  186. package/tests/setup/MockExecutor.ts +18 -0
  187. package/tests/setup/TestDbContext.ts +59 -0
  188. package/tests/setup/models/Company.ts +13 -0
  189. package/tests/setup/models/Employee.ts +10 -0
  190. package/tests/setup/models/MonthlySales.ts +11 -0
  191. package/tests/setup/models/Post.ts +16 -0
  192. package/tests/setup/models/Sales.ts +10 -0
  193. package/tests/setup/models/User.ts +19 -0
  194. package/tests/setup/procedure/GetAllUsers.ts +9 -0
  195. package/tests/setup/procedure/GetUserById.ts +12 -0
  196. package/tests/setup/test-utils.ts +72 -0
  197. package/tests/setup/views/ActiveUsers.ts +8 -0
  198. package/tests/setup/views/UserSummary.ts +11 -0
  199. package/tests/types/nullable-queryable-record.spec.ts +145 -0
  200. package/tests/utils/result-parser-perf.spec.ts +210 -0
  201. package/tests/utils/result-parser.spec.ts +701 -0
  202. package/docs/expressions.md +0 -172
  203. package/docs/queries.md +0 -444
  204. package/docs/schema.md +0 -245
package/dist/expr/expr.js CHANGED
@@ -5,28 +5,28 @@ import {
5
5
  } from "../types/column.js";
6
6
  import { ExprUnit, WhereExprUnit } from "./expr-unit.js";
7
7
  const expr = {
8
- //#region ========== 생성 ==========
8
+ //#region ========== Value creation ==========
9
9
  /**
10
- * 리터럴 값을 ExprUnit으로 래핑
10
+ * Wrap literal value as ExprUnit
11
11
  *
12
- * dataType에 맞는 base 타입으로 widening하여 리터럴 타입 제거
12
+ * Widen to base type matching dataType, remove literal type
13
13
  *
14
- * @param dataType - 값의 데이터 타입 ("string", "number", "boolean", "DateTime", "DateOnly", "Time", "Uuid", "Buffer")
15
- * @param value - 래핑할 (undefined 허용)
16
- * @returns 래핑된 ExprUnit 인스턴스
14
+ * @param dataType - Value의 data type ("string", "number", "boolean", "DateTime", "DateOnly", "Time", "Uuid", "Buffer")
15
+ * @param value - 래핑할 value (undefined allow)
16
+ * @returns 래핑된 ExprUnit instance
17
17
  *
18
18
  * @example
19
19
  * ```typescript
20
- * // 문자열
20
+ * // String value
21
21
  * expr.val("string", "active")
22
22
  *
23
- * // 숫자
23
+ * // Number value
24
24
  * expr.val("number", 100)
25
25
  *
26
- * // 날짜
26
+ * // Date value
27
27
  * expr.val("DateOnly", DateOnly.today())
28
28
  *
29
- * // undefined
29
+ * // undefined value
30
30
  * expr.val("string", undefined)
31
31
  * ```
32
32
  */
@@ -34,17 +34,17 @@ const expr = {
34
34
  return new ExprUnit(dataType, { type: "value", value });
35
35
  },
36
36
  /**
37
- * 컬럼 참조를 생성
37
+ * Generate column reference
38
38
  *
39
- * 일반적으로 Queryable 콜백 프록시 객체를 사용하므로 직접 호출할 일이 적음
39
+ * Typically proxy objects are used inside Queryable callbacks
40
40
  *
41
- * @param dataType - 컬럼의 데이터 타입
42
- * @param path - 컬럼 경로 (테이블 alias, 컬럼명 )
43
- * @returns 컬럼 참조 ExprUnit 인스턴스
41
+ * @param dataType - Column data type
42
+ * @param path - Column path (table alias, column name, etc.)
43
+ * @returns Column reference ExprUnit instance
44
44
  *
45
45
  * @example
46
46
  * ```typescript
47
- * // 직접 컬럼 참조 (내부용)
47
+ * // Direct column reference (internal use)
48
48
  * expr.col("string", "T1", "name")
49
49
  * ```
50
50
  */
@@ -52,23 +52,23 @@ const expr = {
52
52
  return new ExprUnit(dataType, { type: "column", path });
53
53
  },
54
54
  /**
55
- * Raw SQL 표현식 생성 (escape hatch)
55
+ * Raw SQL expression Generate (escape hatch)
56
56
  *
57
- * ORM에서 지원하지 않는 DB 함수나 문법을 직접 사용할 사용.
58
- * 태그 템플릿 리터럴 형식으로 사용하며, 보간된 값은 자동으로 파라미터화됨
57
+ * Use when you need to directly use DB-specific functions or syntax not supported by the ORM.
58
+ * Used as tagged template literal, interpolated values are automatically parameterized
59
59
  *
60
- * @param dataType - 반환될 값의 데이터 타입
61
- * @returns 태그 템플릿 함수
60
+ * @param dataType - Data type of the returned value
61
+ * @returns Tagged template function
62
62
  *
63
63
  * @example
64
64
  * ```typescript
65
- * // MySQL JSON 함수 사용
65
+ * // Using MySQL JSON function
66
66
  * db.user().select((u) => ({
67
67
  * name: u.name,
68
68
  * data: expr.raw("string")`JSON_EXTRACT(${u.metadata}, '$.email')`,
69
69
  * }))
70
70
  *
71
- * // PostgreSQL 배열 함수
71
+ * // PostgreSQL array function
72
72
  * expr.raw("number")`ARRAY_LENGTH(${u.tags}, 1)`
73
73
  * ```
74
74
  */
@@ -85,15 +85,15 @@ const expr = {
85
85
  };
86
86
  },
87
87
  //#endregion
88
- //#region ========== WHERE - 비교 연산 ==========
88
+ //#region ========== WHERE - Comparison operators ==========
89
89
  /**
90
- * 동등 비교 (NULL-safe)
90
+ * Equality comparison (NULL-safe)
91
91
  *
92
- * NULL 값도 안전하게 비교 (MySQL: `<=>`, MSSQL/PostgreSQL: `IS NULL OR =`)
92
+ * Safely compare even NULL values (MySQL: `<=>`, MSSQL/PostgreSQL: `IS NULL OR =`)
93
93
  *
94
- * @param source - 비교할 컬럼 또는 표현식
95
- * @param target - 비교 대상 또는 표현식
96
- * @returns WHERE 조건 표현식
94
+ * @param source - Column or expression to compare
95
+ * @param target - Target value or expression for comparison
96
+ * @returns WHERE condition expression
97
97
  *
98
98
  * @example
99
99
  * ```typescript
@@ -109,11 +109,11 @@ const expr = {
109
109
  });
110
110
  },
111
111
  /**
112
- * 초과 비교 (>)
112
+ * Greater than comparison (>)
113
113
  *
114
- * @param source - 비교할 컬럼 또는 표현식
115
- * @param target - 비교 대상 또는 표현식
116
- * @returns WHERE 조건 표현식
114
+ * @param source - Column or expression to compare
115
+ * @param target - Target value or expression for comparison
116
+ * @returns WHERE condition expression
117
117
  *
118
118
  * @example
119
119
  * ```typescript
@@ -129,11 +129,11 @@ const expr = {
129
129
  });
130
130
  },
131
131
  /**
132
- * 미만 비교 (<)
132
+ * Less than comparison (<)
133
133
  *
134
- * @param source - 비교할 컬럼 또는 표현식
135
- * @param target - 비교 대상 또는 표현식
136
- * @returns WHERE 조건 표현식
134
+ * @param source - Column or expression to compare
135
+ * @param target - Target value or expression for comparison
136
+ * @returns WHERE condition expression
137
137
  *
138
138
  * @example
139
139
  * ```typescript
@@ -149,11 +149,11 @@ const expr = {
149
149
  });
150
150
  },
151
151
  /**
152
- * 이상 비교 (>=)
152
+ * Greater than or equal comparison (>=)
153
153
  *
154
- * @param source - 비교할 컬럼 또는 표현식
155
- * @param target - 비교 대상 또는 표현식
156
- * @returns WHERE 조건 표현식
154
+ * @param source - Column or expression to compare
155
+ * @param target - Target value or expression for comparison
156
+ * @returns WHERE condition expression
157
157
  *
158
158
  * @example
159
159
  * ```typescript
@@ -169,11 +169,11 @@ const expr = {
169
169
  });
170
170
  },
171
171
  /**
172
- * 이하 비교 (<=)
172
+ * Less than or equal comparison (<=)
173
173
  *
174
- * @param source - 비교할 컬럼 또는 표현식
175
- * @param target - 비교 대상 또는 표현식
176
- * @returns WHERE 조건 표현식
174
+ * @param source - Column or expression to compare
175
+ * @param target - Target value or expression for comparison
176
+ * @returns WHERE condition expression
177
177
  *
178
178
  * @example
179
179
  * ```typescript
@@ -189,22 +189,22 @@ const expr = {
189
189
  });
190
190
  },
191
191
  /**
192
- * 범위 비교 (BETWEEN)
192
+ * range comparison (BETWEEN)
193
193
  *
194
194
  * from/to가 undefined이면 해당 방향은 무제한
195
195
  *
196
- * @param source - 비교할 컬럼 또는 표현식
197
- * @param from - 시작 (undefined이면 하한 없음)
198
- * @param to - 끝 (undefined이면 상한 없음)
199
- * @returns WHERE 조건 표현식
196
+ * @param source - Column or expression to compare
197
+ * @param from - start value (undefined이면 하한 N/A)
198
+ * @param to - 끝 value (undefined이면 상한 N/A)
199
+ * @returns WHERE condition expression
200
200
  *
201
201
  * @example
202
202
  * ```typescript
203
- * // 범위 지정
203
+ * // range 지정
204
204
  * db.user().where((u) => [expr.between(u.age, 18, 65)])
205
205
  * // WHERE age BETWEEN 18 AND 65
206
206
  *
207
- * // 하한만 지정
207
+ * // Specify only lower bound
208
208
  * db.user().where((u) => [expr.between(u.age, 18, undefined)])
209
209
  * // WHERE age >= 18
210
210
  * ```
@@ -218,12 +218,12 @@ const expr = {
218
218
  });
219
219
  },
220
220
  //#endregion
221
- //#region ========== WHERE - NULL 체크 ==========
221
+ //#region ========== WHERE - NULL check ==========
222
222
  /**
223
223
  * NULL 체크 (IS NULL)
224
224
  *
225
- * @param source - 체크할 컬럼 또는 표현식
226
- * @returns WHERE 조건 표현식
225
+ * @param source - 체크할 column 또는 expression
226
+ * @returns WHERE condition expression
227
227
  *
228
228
  * @example
229
229
  * ```typescript
@@ -238,16 +238,16 @@ const expr = {
238
238
  });
239
239
  },
240
240
  //#endregion
241
- //#region ========== WHERE - 문자열 검색 ==========
241
+ //#region ========== WHERE - String search ==========
242
242
  /**
243
- * LIKE 패턴 매칭
243
+ * LIKE pattern 매칭
244
244
  *
245
245
  * `%`는 0개 이상의 문자, `_`는 단일 문자와 매칭.
246
- * 특수문자는 `\`로 이스케이프됨
246
+ * 특수문자는 `\`로 escape됨
247
247
  *
248
- * @param source - 검색할 컬럼 또는 표현식
249
- * @param pattern - 검색 패턴 (%, _ 와일드카드 사용 가능)
250
- * @returns WHERE 조건 표현식
248
+ * @param source - 검색할 column 또는 expression
249
+ * @param pattern - 검색 pattern (%, _ wildcard 사용 가능)
250
+ * @returns WHERE condition expression
251
251
  *
252
252
  * @example
253
253
  * ```typescript
@@ -255,7 +255,7 @@ const expr = {
255
255
  * db.user().where((u) => [expr.like(u.name, "John%")])
256
256
  * // WHERE name LIKE 'John%' ESCAPE '\'
257
257
  *
258
- * // 포함 검색
258
+ * // include 검색
259
259
  * db.user().where((u) => [expr.like(u.email, "%@gmail.com")])
260
260
  * ```
261
261
  */
@@ -267,13 +267,13 @@ const expr = {
267
267
  });
268
268
  },
269
269
  /**
270
- * 정규식 패턴 매칭
270
+ * regular expression pattern 매칭
271
271
  *
272
- * DBMS별 정규식 문법 차이 주의 필요
272
+ * DBMS별 regular expression 문법 차이 주의 필요
273
273
  *
274
- * @param source - 검색할 컬럼 또는 표현식
275
- * @param pattern - 정규식 패턴
276
- * @returns WHERE 조건 표현식
274
+ * @param source - 검색할 column 또는 expression
275
+ * @param pattern - regular expression pattern
276
+ * @returns WHERE condition expression
277
277
  *
278
278
  * @example
279
279
  * ```typescript
@@ -291,11 +291,11 @@ const expr = {
291
291
  //#endregion
292
292
  //#region ========== WHERE - IN ==========
293
293
  /**
294
- * IN 연산자 - 목록과 비교
294
+ * IN operator - Value 목록과 comparison
295
295
  *
296
- * @param source - 비교할 컬럼 또는 표현식
297
- * @param values - 비교할 목록
298
- * @returns WHERE 조건 표현식
296
+ * @param source - Column or expression to compare
297
+ * @param values - 비교할 value 목록
298
+ * @returns WHERE condition expression
299
299
  *
300
300
  * @example
301
301
  * ```typescript
@@ -311,14 +311,14 @@ const expr = {
311
311
  });
312
312
  },
313
313
  /**
314
- * IN (SELECT ...) - 서브쿼리 결과와 비교
314
+ * IN (SELECT ...) - Subquery 결과와 comparison
315
315
  *
316
- * 서브쿼리는 반드시 단일 컬럼만 SELECT해야 함
316
+ * Subquery는 반드시 단일 column만 SELECT해야 함
317
317
  *
318
- * @param source - 비교할 컬럼 또는 표현식
319
- * @param query - 단일 컬럼을 반환하는 Queryable
320
- * @returns WHERE 조건 표현식
321
- * @throws {Error} 서브쿼리가 단일 컬럼이 아닌 경우
318
+ * @param source - Column or expression to compare
319
+ * @param query - 단일 column을 반환하는 Queryable
320
+ * @returns WHERE condition expression
321
+ * @throws {Error} Subquery가 단일 column이 아닌 경우
322
322
  *
323
323
  * @example
324
324
  * ```typescript
@@ -336,7 +336,7 @@ const expr = {
336
336
  inQuery(source, query) {
337
337
  const queryDef = query.getSelectQueryDef();
338
338
  if (queryDef.select == null || Object.keys(queryDef.select).length !== 1) {
339
- throw new Error("inQuery\uC758 \uC11C\uBE0C\uCFFC\uB9AC\uB294 \uB2E8\uC77C \uCEEC\uB7FC\uB9CC SELECT\uD574\uC57C \uD569\uB2C8\uB2E4.");
339
+ throw new Error("inQuery subquery must SELECT only a single column.");
340
340
  }
341
341
  return new WhereExprUnit({
342
342
  type: "inQuery",
@@ -345,12 +345,12 @@ const expr = {
345
345
  });
346
346
  },
347
347
  /**
348
- * EXISTS (SELECT ...) - 서브쿼리 결과 존재 여부 확인
348
+ * EXISTS (SELECT ...) - Subquery result 존재 여부 확인
349
349
  *
350
- * 서브쿼리가 하나 이상의 행을 반환하면 true
350
+ * Subquery가 하나 이상의 행을 반환하면 true
351
351
  *
352
352
  * @param query - 존재 여부를 확인할 Queryable
353
- * @returns WHERE 조건 표현식
353
+ * @returns WHERE condition expression
354
354
  *
355
355
  * @example
356
356
  * ```typescript
@@ -371,12 +371,12 @@ const expr = {
371
371
  });
372
372
  },
373
373
  //#endregion
374
- //#region ========== WHERE - 논리 연산 ==========
374
+ //#region ========== WHERE - Logical operators ==========
375
375
  /**
376
- * NOT 연산자 - 조건 부정
376
+ * NOT operator - Condition 부정
377
377
  *
378
- * @param arg - 부정할 조건
379
- * @returns 부정된 WHERE 조건 표현식
378
+ * @param arg - 부정할 condition
379
+ * @returns 부정된 WHERE condition expression
380
380
  *
381
381
  * @example
382
382
  * ```typescript
@@ -391,12 +391,12 @@ const expr = {
391
391
  });
392
392
  },
393
393
  /**
394
- * AND 연산자 - 모든 조건 충족
394
+ * AND operator - 모든 condition 충족
395
395
  *
396
- * 여러 조건을 AND로 결합. where() 메서드에 배열로 전달하면 자동으로 AND 적용됨
396
+ * 여러 조건을 AND로 결합. where() 메서드에 배열로 전달하면 automatic으로 AND applied
397
397
  *
398
- * @param conditions - AND로 결합할 조건 목록
399
- * @returns 결합된 WHERE 조건 표현식
398
+ * @param conditions - AND로 결합할 condition 목록
399
+ * @returns 결합된 WHERE condition expression
400
400
  *
401
401
  * @example
402
402
  * ```typescript
@@ -411,7 +411,7 @@ const expr = {
411
411
  */
412
412
  and(conditions) {
413
413
  if (conditions.length === 0) {
414
- throw new ArgumentError({ conditions: "\uBE48 \uBC30\uC5F4\uC740 \uD5C8\uC6A9\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4" });
414
+ throw new ArgumentError({ conditions: "empty arrays are not allowed" });
415
415
  }
416
416
  return new WhereExprUnit({
417
417
  type: "and",
@@ -419,10 +419,10 @@ const expr = {
419
419
  });
420
420
  },
421
421
  /**
422
- * OR 연산자 - 하나 이상의 조건 충족
422
+ * OR operator - 하나 이상의 condition 충족
423
423
  *
424
- * @param conditions - OR로 결합할 조건 목록
425
- * @returns 결합된 WHERE 조건 표현식
424
+ * @param conditions - OR로 결합할 condition 목록
425
+ * @returns 결합된 WHERE condition expression
426
426
  *
427
427
  * @example
428
428
  * ```typescript
@@ -437,7 +437,7 @@ const expr = {
437
437
  */
438
438
  or(conditions) {
439
439
  if (conditions.length === 0) {
440
- throw new ArgumentError({ conditions: "\uBE48 \uBC30\uC5F4\uC740 \uD5C8\uC6A9\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4" });
440
+ throw new ArgumentError({ conditions: "empty arrays are not allowed" });
441
441
  }
442
442
  return new WhereExprUnit({
443
443
  type: "or",
@@ -449,10 +449,10 @@ const expr = {
449
449
  /**
450
450
  * 문자열 연결 (CONCAT)
451
451
  *
452
- * NULL 값은 빈 문자열로 처리됨 (DBMS별 자동 변환)
452
+ * NULL 값은 빈 문자열로 processing됨 (DBMS별 automatic Transform)
453
453
  *
454
454
  * @param args - 연결할 문자열들
455
- * @returns 연결된 문자열 표현식
455
+ * @returns 연결된 문자열 expression
456
456
  *
457
457
  * @example
458
458
  * ```typescript
@@ -471,9 +471,9 @@ const expr = {
471
471
  /**
472
472
  * 문자열 왼쪽에서 지정 길이만큼 추출 (LEFT)
473
473
  *
474
- * @param source - 원본 문자열
474
+ * @param source - original string
475
475
  * @param length - 추출할 문자 수
476
- * @returns 추출된 문자열 표현식
476
+ * @returns 추출된 문자열 expression
477
477
  *
478
478
  * @example
479
479
  * ```typescript
@@ -493,9 +493,9 @@ const expr = {
493
493
  /**
494
494
  * 문자열 오른쪽에서 지정 길이만큼 추출 (RIGHT)
495
495
  *
496
- * @param source - 원본 문자열
496
+ * @param source - original string
497
497
  * @param length - 추출할 문자 수
498
- * @returns 추출된 문자열 표현식
498
+ * @returns 추출된 문자열 expression
499
499
  *
500
500
  * @example
501
501
  * ```typescript
@@ -513,10 +513,10 @@ const expr = {
513
513
  });
514
514
  },
515
515
  /**
516
- * 문자열 양쪽 공백 제거 (TRIM)
516
+ * 문자열 양쪽 공백 Remove (TRIM)
517
517
  *
518
- * @param source - 원본 문자열
519
- * @returns 공백이 제거된 문자열 표현식
518
+ * @param source - original string
519
+ * @returns 공백이 제거된 문자열 expression
520
520
  *
521
521
  * @example
522
522
  * ```typescript
@@ -535,12 +535,12 @@ const expr = {
535
535
  /**
536
536
  * 문자열 왼쪽 패딩 (LPAD)
537
537
  *
538
- * 지정 길이가 될 때까지 왼쪽에 fillString 반복 추가
538
+ * 지정 길이가 될 때까지 왼쪽에 fillString loop Add
539
539
  *
540
- * @param source - 원본 문자열
540
+ * @param source - original string
541
541
  * @param length - 목표 길이
542
542
  * @param fillString - 패딩에 사용할 문자열
543
- * @returns 패딩된 문자열 표현식
543
+ * @returns 패딩된 문자열 expression
544
544
  *
545
545
  * @example
546
546
  * ```typescript
@@ -548,7 +548,7 @@ const expr = {
548
548
  * orderNo: expr.padStart(expr.cast(o.id, { type: "varchar", length: 10 }), 8, "0"),
549
549
  * }))
550
550
  * // SELECT LPAD(CAST(id AS VARCHAR(10)), 8, '0') AS orderNo
551
- * // 결과: "00000123"
551
+ * // Result: "00000123"
552
552
  * ```
553
553
  */
554
554
  padStart(source, length, fillString) {
@@ -562,10 +562,10 @@ const expr = {
562
562
  /**
563
563
  * 문자열 치환 (REPLACE)
564
564
  *
565
- * @param source - 원본 문자열
565
+ * @param source - original string
566
566
  * @param from - 찾을 문자열
567
567
  * @param to - 대체할 문자열
568
- * @returns 치환된 문자열 표현식
568
+ * @returns 치환된 문자열 expression
569
569
  *
570
570
  * @example
571
571
  * ```typescript
@@ -584,10 +584,10 @@ const expr = {
584
584
  });
585
585
  },
586
586
  /**
587
- * 문자열 대문자 변환 (UPPER)
587
+ * 문자열 대문자 Transform (UPPER)
588
588
  *
589
- * @param source - 원본 문자열
590
- * @returns 대문자로 변환된 문자열 표현식
589
+ * @param source - original string
590
+ * @returns 대문자로 Transform된 문자열 expression
591
591
  *
592
592
  * @example
593
593
  * ```typescript
@@ -604,10 +604,10 @@ const expr = {
604
604
  });
605
605
  },
606
606
  /**
607
- * 문자열 소문자 변환 (LOWER)
607
+ * 문자열 소문자 Transform (LOWER)
608
608
  *
609
- * @param source - 원본 문자열
610
- * @returns 소문자로 변환된 문자열 표현식
609
+ * @param source - original string
610
+ * @returns 소문자로 Transform된 문자열 expression
611
611
  *
612
612
  * @example
613
613
  * ```typescript
@@ -626,7 +626,7 @@ const expr = {
626
626
  /**
627
627
  * 문자열 길이 (문자 수)
628
628
  *
629
- * @param source - 원본 문자열
629
+ * @param source - original string
630
630
  * @returns 문자 수
631
631
  *
632
632
  * @example
@@ -648,7 +648,7 @@ const expr = {
648
648
  *
649
649
  * UTF-8 환경에서 한글은 3바이트
650
650
  *
651
- * @param source - 원본 문자열
651
+ * @param source - original string
652
652
  * @returns 바이트 수
653
653
  *
654
654
  * @example
@@ -670,15 +670,15 @@ const expr = {
670
670
  *
671
671
  * SQL 표준에 따라 1-based index 사용
672
672
  *
673
- * @param source - 원본 문자열
674
- * @param start - 시작 위치 (1부터 시작)
673
+ * @param source - original string
674
+ * @param start - start 위치 (1부터 start)
675
675
  * @param length - 추출할 길이 (생략 시 끝까지)
676
- * @returns 추출된 문자열 표현식
676
+ * @returns 추출된 문자열 expression
677
677
  *
678
678
  * @example
679
679
  * ```typescript
680
680
  * db.user().select((u) => ({
681
- * // "Hello World"에서 인덱스 1부터 5글자: "Hello"
681
+ * // "Hello World"에서 Index 1부터 5글자: "Hello"
682
682
  * prefix: expr.substring(u.name, 1, 5),
683
683
  * }))
684
684
  * // SELECT SUBSTRING(name, 1, 5) AS prefix
@@ -695,11 +695,11 @@ const expr = {
695
695
  /**
696
696
  * 문자열 내 위치 찾기 (LOCATE/CHARINDEX)
697
697
  *
698
- * 1-based index 반환, 없으면 0 반환
698
+ * 1-based index return, 없으면 0 return
699
699
  *
700
700
  * @param source - 검색할 문자열
701
701
  * @param search - 찾을 문자열
702
- * @returns 위치 (1부터 시작, 없으면 0)
702
+ * @returns 위치 (1부터 start, 없으면 0)
703
703
  *
704
704
  * @example
705
705
  * ```typescript
@@ -718,12 +718,12 @@ const expr = {
718
718
  });
719
719
  },
720
720
  //#endregion
721
- //#region ========== SELECT - 숫자 ==========
721
+ //#region ========== SELECT - Number ==========
722
722
  /**
723
723
  * 절대값 (ABS)
724
724
  *
725
- * @param source - 원본 숫자
726
- * @returns 절대값 표현식
725
+ * @param source - 원본 Number
726
+ * @returns 절대값 expression
727
727
  *
728
728
  * @example
729
729
  * ```typescript
@@ -742,9 +742,9 @@ const expr = {
742
742
  /**
743
743
  * 반올림 (ROUND)
744
744
  *
745
- * @param source - 원본 숫자
745
+ * @param source - 원본 Number
746
746
  * @param digits - 소수점 이하 자릿수
747
- * @returns 반올림된 숫자 표현식
747
+ * @returns 반올림된 Number expression
748
748
  *
749
749
  * @example
750
750
  * ```typescript
@@ -765,8 +765,8 @@ const expr = {
765
765
  /**
766
766
  * 올림 (CEILING)
767
767
  *
768
- * @param source - 원본 숫자
769
- * @returns 올림된 숫자 표현식
768
+ * @param source - 원본 Number
769
+ * @returns 올림된 Number expression
770
770
  *
771
771
  * @example
772
772
  * ```typescript
@@ -786,8 +786,8 @@ const expr = {
786
786
  /**
787
787
  * 버림 (FLOOR)
788
788
  *
789
- * @param source - 원본 숫자
790
- * @returns 버림된 숫자 표현식
789
+ * @param source - 원본 Number
790
+ * @returns 버림된 Number expression
791
791
  *
792
792
  * @example
793
793
  * ```typescript
@@ -805,12 +805,12 @@ const expr = {
805
805
  });
806
806
  },
807
807
  //#endregion
808
- //#region ========== SELECT - 날짜 ==========
808
+ //#region ========== SELECT - Date ==========
809
809
  /**
810
810
  * 연도 추출 (YEAR)
811
811
  *
812
- * @param source - DateTime 또는 DateOnly 표현식
813
- * @returns 연도 (4자리 숫자)
812
+ * @param source - DateTime 또는 DateOnly expression
813
+ * @returns 연도 (4자리 Number)
814
814
  *
815
815
  * @example
816
816
  * ```typescript
@@ -829,7 +829,7 @@ const expr = {
829
829
  /**
830
830
  * 월 추출 (MONTH)
831
831
  *
832
- * @param source - DateTime 또는 DateOnly 표현식
832
+ * @param source - DateTime 또는 DateOnly expression
833
833
  * @returns 월 (1~12)
834
834
  *
835
835
  * @example
@@ -849,7 +849,7 @@ const expr = {
849
849
  /**
850
850
  * 일 추출 (DAY)
851
851
  *
852
- * @param source - DateTime 또는 DateOnly 표현식
852
+ * @param source - DateTime 또는 DateOnly expression
853
853
  * @returns 일 (1~31)
854
854
  *
855
855
  * @example
@@ -869,7 +869,7 @@ const expr = {
869
869
  /**
870
870
  * 시 추출 (HOUR)
871
871
  *
872
- * @param source - DateTime 또는 Time 표현식
872
+ * @param source - DateTime 또는 Time expression
873
873
  * @returns 시 (0~23)
874
874
  *
875
875
  * @example
@@ -889,7 +889,7 @@ const expr = {
889
889
  /**
890
890
  * 분 추출 (MINUTE)
891
891
  *
892
- * @param source - DateTime 또는 Time 표현식
892
+ * @param source - DateTime 또는 Time expression
893
893
  * @returns 분 (0~59)
894
894
  *
895
895
  * @example
@@ -909,7 +909,7 @@ const expr = {
909
909
  /**
910
910
  * 초 추출 (SECOND)
911
911
  *
912
- * @param source - DateTime 또는 Time 표현식
912
+ * @param source - DateTime 또는 Time expression
913
913
  * @returns 초 (0~59)
914
914
  *
915
915
  * @example
@@ -929,9 +929,9 @@ const expr = {
929
929
  /**
930
930
  * ISO 주차 추출
931
931
  *
932
- * ISO 8601 기준 주차 (월요일 시작, 1~53)
932
+ * ISO 8601 기준 주차 (월요일 start, 1~53)
933
933
  *
934
- * @param source - DateOnly 표현식
934
+ * @param source - DateOnly expression
935
935
  * @returns ISO 주차 번호
936
936
  *
937
937
  * @example
@@ -951,10 +951,10 @@ const expr = {
951
951
  /**
952
952
  * ISO 주 시작일 (월요일)
953
953
  *
954
- * 해당 날짜가 속한 주의 월요일 반환
954
+ * 해당 Date가 속한 주의 월요일 return
955
955
  *
956
- * @param source - DateOnly 표현식
957
- * @returns 주의 시작 날짜 (월요일)
956
+ * @param source - DateOnly expression
957
+ * @returns 주의 start Date (월요일)
958
958
  *
959
959
  * @example
960
960
  * ```typescript
@@ -973,9 +973,9 @@ const expr = {
973
973
  /**
974
974
  * ISO 연월 (해당 월의 1일)
975
975
  *
976
- * 해당 날짜의 월 첫째 날 반환
976
+ * 해당 Date의 월 첫째 날 return
977
977
  *
978
- * @param source - DateOnly 표현식
978
+ * @param source - DateOnly expression
979
979
  * @returns 월의 첫째 날
980
980
  *
981
981
  * @example
@@ -993,12 +993,12 @@ const expr = {
993
993
  });
994
994
  },
995
995
  /**
996
- * 날짜 차이 계산 (DATEDIFF)
996
+ * Date 차이 계산 (DATEDIFF)
997
997
  *
998
998
  * @param separator - 단위 ("year", "month", "day", "hour", "minute", "second")
999
- * @param from - 시작 날짜
1000
- * @param to - 끝 날짜
1001
- * @returns 차이 (to - from)
999
+ * @param from - start Date
1000
+ * @param to - 끝 Date
1001
+ * @returns 차이 value (to - from)
1002
1002
  *
1003
1003
  * @example
1004
1004
  * ```typescript
@@ -1017,12 +1017,12 @@ const expr = {
1017
1017
  });
1018
1018
  },
1019
1019
  /**
1020
- * 날짜 더하기 (DATEADD)
1020
+ * Date 더하기 (DATEADD)
1021
1021
  *
1022
1022
  * @param separator - 단위 ("year", "month", "day", "hour", "minute", "second")
1023
- * @param source - 원본 날짜
1024
- * @param value - 더할 (음수 가능)
1025
- * @returns 계산된 날짜
1023
+ * @param source - 원본 Date
1024
+ * @param value - 더할 value (음수 가능)
1025
+ * @returns 계산된 Date
1026
1026
  *
1027
1027
  * @example
1028
1028
  * ```typescript
@@ -1041,13 +1041,13 @@ const expr = {
1041
1041
  });
1042
1042
  },
1043
1043
  /**
1044
- * 날짜 포맷 (DATE_FORMAT)
1044
+ * Date 포맷 (DATE_FORMAT)
1045
1045
  *
1046
1046
  * DBMS별로 포맷 문자열 규칙이 다를 수 있음
1047
1047
  *
1048
- * @param source - 날짜 표현식
1048
+ * @param source - Date expression
1049
1049
  * @param format - 포맷 문자열 (예: "%Y-%m-%d")
1050
- * @returns 포맷된 문자열 표현식
1050
+ * @returns 포맷된 문자열 expression
1051
1051
  *
1052
1052
  * @example
1053
1053
  * ```typescript
@@ -1066,14 +1066,14 @@ const expr = {
1066
1066
  });
1067
1067
  },
1068
1068
  //#endregion
1069
- //#region ========== SELECT - 조건 ==========
1069
+ //#region ========== SELECT - Condition ==========
1070
1070
  /**
1071
1071
  * NULL 대체 (COALESCE/IFNULL)
1072
1072
  *
1073
- * 첫 번째 non-null 값을 반환. 마지막 인자가 non-nullable이면 결과도 non-nullable
1073
+ * 첫 번째 non-null 값을 return. 마지막 인자가 non-nullable이면 결과도 non-nullable
1074
1074
  *
1075
- * @param args - 검사할 값들 (마지막은 기본값)
1076
- * @returns 첫 번째 non-null
1075
+ * @param args - Inspect할 값들 (마지막은 Default value)
1076
+ * @returns 첫 번째 non-null value
1077
1077
  *
1078
1078
  * @example
1079
1079
  * ```typescript
@@ -1085,18 +1085,18 @@ const expr = {
1085
1085
  */
1086
1086
  ifNull,
1087
1087
  /**
1088
- * 특정 값이면 NULL 반환 (NULLIF)
1088
+ * 특정 값이면 NULL return (NULLIF)
1089
1089
  *
1090
- * source === value 이면 NULL 반환, 아니면 source 반환
1090
+ * source === value 이면 NULL return, 아니면 source return
1091
1091
  *
1092
- * @param source - 원본
1093
- * @param value - 비교할
1094
- * @returns NULL 또는 원본
1092
+ * @param source - 원본 value
1093
+ * @param value - 비교할 value
1094
+ * @returns NULL 또는 원본 value
1095
1095
  *
1096
1096
  * @example
1097
1097
  * ```typescript
1098
1098
  * db.user().select((u) => ({
1099
- * // 빈 문자열을 NULL로 변환
1099
+ * // 빈 문자열을 NULL로 Transform
1100
1100
  * bio: expr.nullIf(u.bio, ""),
1101
1101
  * }))
1102
1102
  * // SELECT NULLIF(bio, '') AS bio
@@ -1110,12 +1110,12 @@ const expr = {
1110
1110
  });
1111
1111
  },
1112
1112
  /**
1113
- * WHERE 표현식을 boolean으로 변환
1113
+ * WHERE 표현식을 boolean으로 Transform
1114
1114
  *
1115
- * SELECT 절에서 조건 결과를 boolean 컬럼으로 사용할 때 사용
1115
+ * SELECT 절에서 condition 결과를 boolean column으로 사용할 때 사용
1116
1116
  *
1117
- * @param condition - 변환할 조건
1118
- * @returns boolean 표현식
1117
+ * @param condition - Transform할 condition
1118
+ * @returns boolean expression
1119
1119
  *
1120
1120
  * @example
1121
1121
  * ```typescript
@@ -1132,11 +1132,11 @@ const expr = {
1132
1132
  });
1133
1133
  },
1134
1134
  /**
1135
- * CASE WHEN 표현식 빌더
1135
+ * CASE WHEN expression builder
1136
1136
  *
1137
- * 체이닝 방식으로 조건 분기를 구성
1137
+ * 체이닝 방식으로 condition 분기를 구성
1138
1138
  *
1139
- * @returns SwitchExprBuilder 인스턴스
1139
+ * @returns SwitchExprBuilder instance
1140
1140
  *
1141
1141
  * @example
1142
1142
  * ```typescript
@@ -1154,12 +1154,12 @@ const expr = {
1154
1154
  return createSwitchBuilder();
1155
1155
  },
1156
1156
  /**
1157
- * 단순 IF 조건 (삼항 연산자)
1157
+ * 단순 IF condition (삼항 operator)
1158
1158
  *
1159
- * @param condition - 조건
1160
- * @param then - 조건이 참일 때
1161
- * @param else_ - 조건이 거짓일 때
1162
- * @returns 조건부 표현식
1159
+ * @param condition - Condition
1160
+ * @param then - Condition이 참일 때 value
1161
+ * @param else_ - Condition이 거짓일 때 value
1162
+ * @returns 조건부 value expression
1163
1163
  *
1164
1164
  * @example
1165
1165
  * ```typescript
@@ -1182,7 +1182,7 @@ const expr = {
1182
1182
  }
1183
1183
  const nonNullLiteral = allValues.find((v) => v != null);
1184
1184
  if (nonNullLiteral == null) {
1185
- throw new Error("if\uC758 then/else \uC911 \uC801\uC5B4\uB3C4 \uD558\uB098\uB294 non-null\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.");
1185
+ throw new Error("At least one of if's then/else must be non-null.");
1186
1186
  }
1187
1187
  return new ExprUnit(inferColumnPrimitiveStr(nonNullLiteral), {
1188
1188
  type: "if",
@@ -1192,21 +1192,21 @@ const expr = {
1192
1192
  });
1193
1193
  },
1194
1194
  //#endregion
1195
- //#region ========== SELECT - 집계 ==========
1196
- // SUM, AVG, MAX등의 집계는 모든 값이 NULL이거나 행이 없을 때만 NULL 반환 (값이 NULL인 행은 무시함)
1195
+ //#region ========== SELECT - Aggregate ==========
1196
+ // SUM, AVG, MAX등의 집계는 모든 값이 NULL이거나 행이 없을 때만 NULL return (값이 NULL인 행은 무시함)
1197
1197
  /**
1198
- * 수 카운트 (COUNT)
1198
+ * row 수 카운트 (COUNT)
1199
1199
  *
1200
- * @param arg - 카운트할 컬럼 (생략 시 전체 수)
1201
- * @param distinct - true면 중복 제거
1202
- * @returns
1200
+ * @param arg - 카운트할 column (생략 시 전체 row 수)
1201
+ * @param distinct - true면 중복 Remove
1202
+ * @returns row
1203
1203
  *
1204
1204
  * @example
1205
1205
  * ```typescript
1206
- * // 전체
1206
+ * // 전체 row
1207
1207
  * db.user().select(() => ({ total: expr.count() }))
1208
1208
  *
1209
- * // 중복 제거 카운트
1209
+ * // 중복 Remove 카운트
1210
1210
  * db.order().select((o) => ({
1211
1211
  * uniqueCustomers: expr.count(o.customerId, true),
1212
1212
  * }))
@@ -1222,9 +1222,9 @@ const expr = {
1222
1222
  /**
1223
1223
  * 합계 (SUM)
1224
1224
  *
1225
- * NULL 값은 무시됨. 모든 값이 NULL이면 NULL 반환
1225
+ * NULL 값은 무시됨. 모든 값이 NULL이면 NULL return
1226
1226
  *
1227
- * @param arg - 합계를 구할 숫자 컬럼
1227
+ * @param arg - 합계를 구할 Number column
1228
1228
  * @returns 합계 (또는 NULL)
1229
1229
  *
1230
1230
  * @example
@@ -1244,9 +1244,9 @@ const expr = {
1244
1244
  /**
1245
1245
  * 평균 (AVG)
1246
1246
  *
1247
- * NULL 값은 무시됨. 모든 값이 NULL이면 NULL 반환
1247
+ * NULL 값은 무시됨. 모든 값이 NULL이면 NULL return
1248
1248
  *
1249
- * @param arg - 평균을 구할 숫자 컬럼
1249
+ * @param arg - 평균을 구할 Number column
1250
1250
  * @returns 평균 (또는 NULL)
1251
1251
  *
1252
1252
  * @example
@@ -1266,9 +1266,9 @@ const expr = {
1266
1266
  /**
1267
1267
  * 최대값 (MAX)
1268
1268
  *
1269
- * NULL 값은 무시됨. 모든 값이 NULL이면 NULL 반환
1269
+ * NULL 값은 무시됨. 모든 값이 NULL이면 NULL return
1270
1270
  *
1271
- * @param arg - 최대값을 구할 컬럼
1271
+ * @param arg - 최대값을 구할 column
1272
1272
  * @returns 최대값 (또는 NULL)
1273
1273
  *
1274
1274
  * @example
@@ -1288,9 +1288,9 @@ const expr = {
1288
1288
  /**
1289
1289
  * 최소값 (MIN)
1290
1290
  *
1291
- * NULL 값은 무시됨. 모든 값이 NULL이면 NULL 반환
1291
+ * NULL 값은 무시됨. 모든 값이 NULL이면 NULL return
1292
1292
  *
1293
- * @param arg - 최소값을 구할 컬럼
1293
+ * @param arg - 최소값을 구할 column
1294
1294
  * @returns 최소값 (또는 NULL)
1295
1295
  *
1296
1296
  * @example
@@ -1308,9 +1308,9 @@ const expr = {
1308
1308
  });
1309
1309
  },
1310
1310
  //#endregion
1311
- //#region ========== SELECT - 기타 ==========
1311
+ //#region ========== SELECT - Other ==========
1312
1312
  /**
1313
- * 여러 중 최대값 (GREATEST)
1313
+ * 여러 value 중 최대값 (GREATEST)
1314
1314
  *
1315
1315
  * @param args - 비교할 값들
1316
1316
  * @returns 최대값
@@ -1330,7 +1330,7 @@ const expr = {
1330
1330
  });
1331
1331
  },
1332
1332
  /**
1333
- * 여러 중 최소값 (LEAST)
1333
+ * 여러 value 중 최소값 (LEAST)
1334
1334
  *
1335
1335
  * @param args - 비교할 값들
1336
1336
  * @returns 최소값
@@ -1350,9 +1350,9 @@ const expr = {
1350
1350
  });
1351
1351
  },
1352
1352
  /**
1353
- * 번호 (ROW_NUMBER 없이 전체 행에 대한 순번)
1353
+ * row 번호 (ROW_NUMBER 없이 전체 행에 대한 순번)
1354
1354
  *
1355
- * @returns 번호 (1부터 시작)
1355
+ * @returns row 번호 (1부터 start)
1356
1356
  *
1357
1357
  * @example
1358
1358
  * ```typescript
@@ -1368,15 +1368,15 @@ const expr = {
1368
1368
  });
1369
1369
  },
1370
1370
  /**
1371
- * 난수 생성 (RAND/RANDOM)
1371
+ * 난수 Generate (RAND/RANDOM)
1372
1372
  *
1373
- * 0~1 사이의 난수 반환. ORDER BY에서 랜덤 정렬용으로 주로 사용
1373
+ * 0~1 사이의 난수 return. ORDER BY에서 랜덤 정렬용으로 주로 사용
1374
1374
  *
1375
1375
  * @returns 0~1 사이의 난수
1376
1376
  *
1377
1377
  * @example
1378
1378
  * ```typescript
1379
- * // 랜덤 정렬
1379
+ * // 랜덤 sorting
1380
1380
  * db.user().orderBy(() => expr.random()).limit(10)
1381
1381
  * ```
1382
1382
  */
@@ -1386,11 +1386,11 @@ const expr = {
1386
1386
  });
1387
1387
  },
1388
1388
  /**
1389
- * 타입 변환 (CAST)
1389
+ * type transformation (CAST)
1390
1390
  *
1391
- * @param source - 변환할 표현식
1392
- * @param targetType - 대상 데이터 타입
1393
- * @returns 변환된 표현식
1391
+ * @param source - Transform할 expression
1392
+ * @param targetType - 대상 data type
1393
+ * @returns Transform된 expression
1394
1394
  *
1395
1395
  * @example
1396
1396
  * ```typescript
@@ -1408,13 +1408,13 @@ const expr = {
1408
1408
  });
1409
1409
  },
1410
1410
  /**
1411
- * 스칼라 서브쿼리 - SELECT 절에서 단일 반환 서브쿼리
1411
+ * 스칼라 Subquery - SELECT 절에서 단일 value return Subquery
1412
1412
  *
1413
- * 서브쿼리는 반드시 단일 행, 단일 컬럼을 반환해야 함
1413
+ * Subquery는 반드시 단일 row, 단일 column을 반환해야 함
1414
1414
  *
1415
- * @param dataType - 반환될 값의 데이터 타입
1415
+ * @param dataType - Data type of the returned value
1416
1416
  * @param queryable - 스칼라 값을 반환하는 Queryable
1417
- * @returns 서브쿼리 결과 표현식
1417
+ * @returns Subquery result expression
1418
1418
  *
1419
1419
  * @example
1420
1420
  * ```typescript
@@ -1439,12 +1439,12 @@ const expr = {
1439
1439
  //#endregion
1440
1440
  //#region ========== SELECT - Window Functions ==========
1441
1441
  /**
1442
- * ROW_NUMBER() - 파티션 내 번호
1442
+ * ROW_NUMBER() - 파티션 내 row 번호
1443
1443
  *
1444
- * 각 파티션 내에서 1부터 시작하는 순차 번호 부여
1444
+ * 각 파티션 내에서 1부터 시작하는 sequential 번호 부여
1445
1445
  *
1446
- * @param spec - 윈도우 스펙 (partitionBy, orderBy)
1447
- * @returns 번호 (1부터 시작)
1446
+ * @param spec - Window spec (partitionBy, orderBy)
1447
+ * @returns row 번호 (1부터 start)
1448
1448
  *
1449
1449
  * @example
1450
1450
  * ```typescript
@@ -1468,7 +1468,7 @@ const expr = {
1468
1468
  /**
1469
1469
  * RANK() - 파티션 내 순위 (동점 시 같은 순위, 다음 순위 건너뜀)
1470
1470
  *
1471
- * @param spec - 윈도우 스펙 (partitionBy, orderBy)
1471
+ * @param spec - Window spec (partitionBy, orderBy)
1472
1472
  * @returns 순위 (동점 후 건너뜀: 1, 1, 3)
1473
1473
  *
1474
1474
  * @example
@@ -1491,7 +1491,7 @@ const expr = {
1491
1491
  /**
1492
1492
  * DENSE_RANK() - 파티션 내 밀집 순위 (동점 시 같은 순위, 다음 순위 유지)
1493
1493
  *
1494
- * @param spec - 윈도우 스펙 (partitionBy, orderBy)
1494
+ * @param spec - Window spec (partitionBy, orderBy)
1495
1495
  * @returns 밀집 순위 (동점 후 연속: 1, 1, 2)
1496
1496
  *
1497
1497
  * @example
@@ -1512,15 +1512,15 @@ const expr = {
1512
1512
  });
1513
1513
  },
1514
1514
  /**
1515
- * NTILE(n) - 파티션을 n개 그룹으로 분할
1515
+ * NTILE(n) - 파티션을 n개 그룹으로 split
1516
1516
  *
1517
1517
  * @param n - 분할할 그룹 수
1518
- * @param spec - 윈도우 스펙 (partitionBy, orderBy)
1518
+ * @param spec - Window spec (partitionBy, orderBy)
1519
1519
  * @returns 그룹 번호 (1 ~ n)
1520
1520
  *
1521
1521
  * @example
1522
1522
  * ```typescript
1523
- * // 상위 25%를 찾기 위한 사분위 분할
1523
+ * // 상위 25%를 찾기 위한 사분위 split
1524
1524
  * db.user().select((u) => ({
1525
1525
  * name: u.name,
1526
1526
  * quartile: expr.ntile(4, {
@@ -1537,12 +1537,12 @@ const expr = {
1537
1537
  });
1538
1538
  },
1539
1539
  /**
1540
- * LAG() - 이전 행의 참조
1540
+ * LAG() - 이전 행의 value 참조
1541
1541
  *
1542
- * @param column - 참조할 컬럼
1543
- * @param spec - 윈도우 스펙 (partitionBy, orderBy)
1544
- * @param options - offset (기본 1), default (이전 행이 없을 때 기본값)
1545
- * @returns 이전 행의 (또는 기본값/NULL)
1542
+ * @param column - column to reference
1543
+ * @param spec - Window spec (partitionBy, orderBy)
1544
+ * @param options - offset (Basic 1), default (이전 행이 없을 때 Default value)
1545
+ * @returns 이전 행의 value (또는 Default value/NULL)
1546
1546
  *
1547
1547
  * @example
1548
1548
  * ```typescript
@@ -1569,12 +1569,12 @@ const expr = {
1569
1569
  });
1570
1570
  },
1571
1571
  /**
1572
- * LEAD() - 다음 행의 참조
1572
+ * LEAD() - 다음 행의 value 참조
1573
1573
  *
1574
- * @param column - 참조할 컬럼
1575
- * @param spec - 윈도우 스펙 (partitionBy, orderBy)
1576
- * @param options - offset (기본 1), default (다음 행이 없을 때 기본값)
1577
- * @returns 다음 행의 (또는 기본값/NULL)
1574
+ * @param column - column to reference
1575
+ * @param spec - Window spec (partitionBy, orderBy)
1576
+ * @param options - offset (Basic 1), default (다음 행이 없을 때 Default value)
1577
+ * @returns 다음 행의 value (또는 Default value/NULL)
1578
1578
  *
1579
1579
  * @example
1580
1580
  * ```typescript
@@ -1601,11 +1601,11 @@ const expr = {
1601
1601
  });
1602
1602
  },
1603
1603
  /**
1604
- * FIRST_VALUE() - 파티션/프레임의 첫 번째
1604
+ * FIRST_VALUE() - 파티션/프레임의 첫 번째 value
1605
1605
  *
1606
- * @param column - 참조할 컬럼
1607
- * @param spec - 윈도우 스펙 (partitionBy, orderBy)
1608
- * @returns 첫 번째
1606
+ * @param column - column to reference
1607
+ * @param spec - Window spec (partitionBy, orderBy)
1608
+ * @returns 첫 번째 value
1609
1609
  *
1610
1610
  * @example
1611
1611
  * ```typescript
@@ -1626,11 +1626,11 @@ const expr = {
1626
1626
  });
1627
1627
  },
1628
1628
  /**
1629
- * LAST_VALUE() - 파티션/프레임의 마지막
1629
+ * LAST_VALUE() - 파티션/프레임의 마지막 value
1630
1630
  *
1631
- * @param column - 참조할 컬럼
1632
- * @param spec - 윈도우 스펙 (partitionBy, orderBy)
1633
- * @returns 마지막
1631
+ * @param column - column to reference
1632
+ * @param spec - Window spec (partitionBy, orderBy)
1633
+ * @returns 마지막 value
1634
1634
  *
1635
1635
  * @example
1636
1636
  * ```typescript
@@ -1651,11 +1651,11 @@ const expr = {
1651
1651
  });
1652
1652
  },
1653
1653
  /**
1654
- * SUM() OVER - 윈도우 합계
1654
+ * SUM() OVER - Window 합계
1655
1655
  *
1656
- * @param column - 합계를 구할 컬럼
1657
- * @param spec - 윈도우 스펙 (partitionBy, orderBy)
1658
- * @returns 윈도우 내 합계
1656
+ * @param column - 합계를 구할 column
1657
+ * @param spec - Window spec (partitionBy, orderBy)
1658
+ * @returns Window 내 합계
1659
1659
  *
1660
1660
  * @example
1661
1661
  * ```typescript
@@ -1677,15 +1677,15 @@ const expr = {
1677
1677
  });
1678
1678
  },
1679
1679
  /**
1680
- * AVG() OVER - 윈도우 평균
1680
+ * AVG() OVER - Window 평균
1681
1681
  *
1682
- * @param column - 평균을 구할 컬럼
1683
- * @param spec - 윈도우 스펙 (partitionBy, orderBy)
1684
- * @returns 윈도우 내 평균
1682
+ * @param column - 평균을 구할 column
1683
+ * @param spec - Window spec (partitionBy, orderBy)
1684
+ * @returns Window 내 평균
1685
1685
  *
1686
1686
  * @example
1687
1687
  * ```typescript
1688
- * // 이동 평균
1688
+ * // move 평균
1689
1689
  * db.stock().select((s) => ({
1690
1690
  * ...s,
1691
1691
  * movingAvg: expr.avgOver(s.price, {
@@ -1703,11 +1703,11 @@ const expr = {
1703
1703
  });
1704
1704
  },
1705
1705
  /**
1706
- * COUNT() OVER - 윈도우 카운트
1706
+ * COUNT() OVER - Window 카운트
1707
1707
  *
1708
- * @param spec - 윈도우 스펙 (partitionBy, orderBy)
1709
- * @param column - 카운트할 컬럼 (생략 시 전체 수)
1710
- * @returns 윈도우
1708
+ * @param spec - Window spec (partitionBy, orderBy)
1709
+ * @param column - 카운트할 column (생략 시 전체 row 수)
1710
+ * @returns Windowrow
1711
1711
  *
1712
1712
  * @example
1713
1713
  * ```typescript
@@ -1727,11 +1727,11 @@ const expr = {
1727
1727
  });
1728
1728
  },
1729
1729
  /**
1730
- * MIN() OVER - 윈도우 최소값
1730
+ * MIN() OVER - Window 최소값
1731
1731
  *
1732
- * @param column - 최소값을 구할 컬럼
1733
- * @param spec - 윈도우 스펙 (partitionBy, orderBy)
1734
- * @returns 윈도우 내 최소값
1732
+ * @param column - 최소값을 구할 column
1733
+ * @param spec - Window spec (partitionBy, orderBy)
1734
+ * @returns Window 내 최소값
1735
1735
  *
1736
1736
  * @example
1737
1737
  * ```typescript
@@ -1751,11 +1751,11 @@ const expr = {
1751
1751
  });
1752
1752
  },
1753
1753
  /**
1754
- * MAX() OVER - 윈도우 최대값
1754
+ * MAX() OVER - Window 최대값
1755
1755
  *
1756
- * @param column - 최대값을 구할 컬럼
1757
- * @param spec - 윈도우 스펙 (partitionBy, orderBy)
1758
- * @returns 윈도우 내 최대값
1756
+ * @param column - 최대값을 구할 column
1757
+ * @param spec - Window spec (partitionBy, orderBy)
1758
+ * @returns Window 내 최대값
1759
1759
  *
1760
1760
  * @example
1761
1761
  * ```typescript
@@ -1777,9 +1777,9 @@ const expr = {
1777
1777
  //#endregion
1778
1778
  //#region ========== Helper ==========
1779
1779
  /**
1780
- * ExprInput을 Expr로 변환 (내부용)
1780
+ * ExprInput을 Expr로 Transform (내부용)
1781
1781
  *
1782
- * @param value - 변환할
1782
+ * @param value - Transform할 value
1783
1783
  * @returns Expr JSON AST
1784
1784
  */
1785
1785
  toExpr(value) {
@@ -1817,7 +1817,7 @@ function createSwitchBuilder() {
1817
1817
  }
1818
1818
  const nonNullLiteral = allValues.find((v) => v != null);
1819
1819
  if (nonNullLiteral == null) {
1820
- throw new Error("switch\uC758 case/default \uC911 \uC801\uC5B4\uB3C4 \uD558\uB098\uB294 non-null\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.");
1820
+ throw new Error("At least one of switch's case/default must be non-null.");
1821
1821
  }
1822
1822
  return new ExprUnit(inferColumnPrimitiveStr(nonNullLiteral), {
1823
1823
  type: "switch",
@@ -1836,7 +1836,7 @@ function toExpr(value) {
1836
1836
  function findDataType(args) {
1837
1837
  const exprUnit = args.find((a) => a instanceof ExprUnit);
1838
1838
  if (!exprUnit) {
1839
- throw new Error("args\uC911 \uC801\uC5B4\uB3C4 \uD558\uB098\uB294 ExprUnit\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4.");
1839
+ throw new Error("At least one of the arguments must be an ExprUnit.");
1840
1840
  }
1841
1841
  return exprUnit.dataType;
1842
1842
  }