@simplysm/orm-common 13.0.68 → 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
@@ -1,188 +1,188 @@
1
- import { DateOnly, DateTime, Time, Uuid, type Bytes } from "@simplysm/core-common";
2
-
3
- // ============================================
4
- // DataType (SQL 타입 정의)
5
- // ============================================
6
-
7
- /**
8
- * SQL 데이터 타입 정의
9
- *
10
- * DBMS 매핑:
11
- * - `int`: INT (4 bytes)
12
- * - `bigint`: BIGINT (8 bytes)
13
- * - `float`: FLOAT/REAL (4 bytes)
14
- * - `double`: DOUBLE/FLOAT (8 bytes)
15
- * - `decimal`: DECIMAL(precision, scale)
16
- * - `varchar`: VARCHAR(length)
17
- * - `char`: CHAR(length)
18
- * - `text`: TEXT/LONGTEXT
19
- * - `binary`: LONGBLOB/VARBINARY(MAX)/BYTEA
20
- * - `boolean`: TINYINT(1)/BIT/BOOLEAN
21
- * - `datetime`: DATETIME
22
- * - `date`: DATE
23
- * - `time`: TIME
24
- * - `uuid`: BINARY(16)/UNIQUEIDENTIFIER/UUID
25
- *
26
- * @example
27
- * ```typescript
28
- * const intType: DataType = { type: "int" };
29
- * const decimalType: DataType = { type: "decimal", precision: 10, scale: 2 };
30
- * const varcharType: DataType = { type: "varchar", length: 100 };
31
- * ```
32
- */
33
- export type DataType =
34
- | { type: "int" }
35
- | { type: "bigint" }
36
- | { type: "float" }
37
- | { type: "double" }
38
- | { type: "decimal"; precision: number; scale?: number }
39
- | { type: "varchar"; length: number }
40
- | { type: "char"; length: number }
41
- | { type: "text" }
42
- | { type: "binary" }
43
- | { type: "boolean" }
44
- | { type: "datetime" }
45
- | { type: "date" }
46
- | { type: "time" }
47
- | { type: "uuid" };
48
-
49
- // ============================================
50
- // ColumnPrimitive (TypeScript 타입)
51
- // ============================================
52
-
53
- /**
54
- * 컬럼 프리미티브 타입 매핑
55
- *
56
- * TypeScript 타입명(문자열) → 실제 TypeScript 타입 매핑
57
- *
58
- * @example
59
- * ```typescript
60
- * type StringType = ColumnPrimitiveMap["string"]; // string
61
- * type DateTimeType = ColumnPrimitiveMap["DateTime"]; // DateTime
62
- * ```
63
- */
64
- export type ColumnPrimitiveMap = {
65
- string: string;
66
- number: number;
67
- boolean: boolean;
68
- DateTime: DateTime;
69
- DateOnly: DateOnly;
70
- Time: Time;
71
- Uuid: Uuid;
72
- Bytes: Bytes;
73
- };
74
-
75
- /**
76
- * 컬럼 프리미티브 타입명 (문자열)
77
- *
78
- * @example
79
- * ```typescript
80
- * const typeStr: ColumnPrimitiveStr = "string"; // OK
81
- * const typeStr2: ColumnPrimitiveStr = "invalid"; // Error
82
- * ```
83
- */
84
- export type ColumnPrimitiveStr = keyof ColumnPrimitiveMap;
85
-
86
- /**
87
- * 컬럼에 저장 가능한 모든 프리미티브 타입
88
- *
89
- * undefined NULL을 나타냄
90
- */
91
- export type ColumnPrimitive = ColumnPrimitiveMap[ColumnPrimitiveStr] | undefined;
92
-
93
- // ============================================
94
- // DataType ↔ ColumnPrimitive 매핑
95
- // ============================================
96
-
97
- /**
98
- * SQL DataType → TypeScript 타입명 매핑
99
- *
100
- * @example
101
- * ```typescript
102
- * const tsType = dataTypeStrToColumnPrimitiveStr["int"]; // "number"
103
- * const tsType2 = dataTypeStrToColumnPrimitiveStr["datetime"]; // "DateTime"
104
- * ```
105
- */
106
- export const dataTypeStrToColumnPrimitiveStr = {
107
- int: "number" as const,
108
- bigint: "number" as const,
109
- float: "number" as const,
110
- double: "number" as const,
111
- decimal: "number" as const,
112
- varchar: "string" as const,
113
- char: "string" as const,
114
- text: "string" as const,
115
- binary: "Bytes" as const,
116
- boolean: "boolean" as const,
117
- datetime: "DateTime" as const,
118
- date: "DateOnly" as const,
119
- time: "Time" as const,
120
- uuid: "Uuid" as const,
121
- };
122
-
123
- /**
124
- * DataType에서 TypeScript 타입 추론
125
- *
126
- * @template T - DataType
127
- *
128
- * @example
129
- * ```typescript
130
- * type IntType = InferColumnPrimitiveFromDataType<{ type: "int" }>; // number
131
- * type VarcharType = InferColumnPrimitiveFromDataType<{ type: "varchar"; length: 100 }>; // string
132
- * ```
133
- */
134
- export type InferColumnPrimitiveFromDataType<TDataType extends DataType> =
135
- ColumnPrimitiveMap[(typeof dataTypeStrToColumnPrimitiveStr)[TDataType["type"]]];
136
-
137
- /**
138
- * 런타임 값에서 ColumnPrimitiveStr 추론
139
- *
140
- * @param value - 컬럼
141
- * @returns ColumnPrimitiveStr 타입명
142
- * @throws 없는 타입인 경우
143
- *
144
- * @example
145
- * ```typescript
146
- * inferColumnPrimitiveStr("hello"); // "string"
147
- * inferColumnPrimitiveStr(123); // "number"
148
- * inferColumnPrimitiveStr(new DateTime()); // "DateTime"
149
- * ```
150
- */
151
- export function inferColumnPrimitiveStr(value: ColumnPrimitive): ColumnPrimitiveStr {
152
- if (typeof value === "string") return "string";
153
- if (typeof value === "number") return "number";
154
- if (typeof value === "boolean") return "boolean";
155
- if (value instanceof DateTime) return "DateTime";
156
- if (value instanceof DateOnly) return "DateOnly";
157
- if (value instanceof Time) return "Time";
158
- if (value instanceof Uuid) return "Uuid";
159
- if (value instanceof Uint8Array) return "Bytes";
160
- throw new Error(`알 없는 값 타입: ${typeof value}`);
161
- }
162
-
163
- // ============================================
164
- // ColumnMeta
165
- // ============================================
166
-
167
- /**
168
- * 컬럼 메타데이터
169
- *
170
- * ColumnBuilder에서 생성되어 TableBuilder에 전달
171
- *
172
- * @property type - TypeScript 타입명 (ColumnPrimitiveStr)
173
- * @property dataType - SQL 데이터 타입
174
- * @property autoIncrement - 자동 증가 여부
175
- * @property nullable - NULL 허용 여부
176
- * @property default - 기본값
177
- * @property description - 컬럼 설명 (DDL 주석)
178
- *
179
- * @see {@link ColumnBuilder} 컬럼 빌더
180
- */
181
- export interface ColumnMeta {
182
- type: ColumnPrimitiveStr;
183
- dataType: DataType;
184
- autoIncrement?: boolean;
185
- nullable?: boolean;
186
- default?: ColumnPrimitive;
187
- description?: string;
188
- }
1
+ import { DateOnly, DateTime, Time, Uuid, type Bytes } from "@simplysm/core-common";
2
+
3
+ // ============================================
4
+ // DataType (SQL type definition)
5
+ // ============================================
6
+
7
+ /**
8
+ * SQL data type definition
9
+ *
10
+ * DBMS Mapping:
11
+ * - `int`: INT (4 bytes)
12
+ * - `bigint`: BIGINT (8 bytes)
13
+ * - `float`: FLOAT/REAL (4 bytes)
14
+ * - `double`: DOUBLE/FLOAT (8 bytes)
15
+ * - `decimal`: DECIMAL(precision, scale)
16
+ * - `varchar`: VARCHAR(length)
17
+ * - `char`: CHAR(length)
18
+ * - `text`: TEXT/LONGTEXT
19
+ * - `binary`: LONGBLOB/VARBINARY(MAX)/BYTEA
20
+ * - `boolean`: TINYINT(1)/BIT/BOOLEAN
21
+ * - `datetime`: DATETIME
22
+ * - `date`: DATE
23
+ * - `time`: TIME
24
+ * - `uuid`: BINARY(16)/UNIQUEIDENTIFIER/UUID
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * const intType: DataType = { type: "int" };
29
+ * const decimalType: DataType = { type: "decimal", precision: 10, scale: 2 };
30
+ * const varcharType: DataType = { type: "varchar", length: 100 };
31
+ * ```
32
+ */
33
+ export type DataType =
34
+ | { type: "int" }
35
+ | { type: "bigint" }
36
+ | { type: "float" }
37
+ | { type: "double" }
38
+ | { type: "decimal"; precision: number; scale?: number }
39
+ | { type: "varchar"; length: number }
40
+ | { type: "char"; length: number }
41
+ | { type: "text" }
42
+ | { type: "binary" }
43
+ | { type: "boolean" }
44
+ | { type: "datetime" }
45
+ | { type: "date" }
46
+ | { type: "time" }
47
+ | { type: "uuid" };
48
+
49
+ // ============================================
50
+ // ColumnPrimitive (TypeScript Type)
51
+ // ============================================
52
+
53
+ /**
54
+ * Column primitive type mapping
55
+ *
56
+ * TypeScript type name (string) → Actual TypeScript type mapping
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * type StringType = ColumnPrimitiveMap["string"]; // string
61
+ * type DateTimeType = ColumnPrimitiveMap["DateTime"]; // DateTime
62
+ * ```
63
+ */
64
+ export type ColumnPrimitiveMap = {
65
+ string: string;
66
+ number: number;
67
+ boolean: boolean;
68
+ DateTime: DateTime;
69
+ DateOnly: DateOnly;
70
+ Time: Time;
71
+ Uuid: Uuid;
72
+ Bytes: Bytes;
73
+ };
74
+
75
+ /**
76
+ * Column primitive type name (string)
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * const typeStr: ColumnPrimitiveStr = "string"; // OK
81
+ * const typeStr2: ColumnPrimitiveStr = "invalid"; // Error
82
+ * ```
83
+ */
84
+ export type ColumnPrimitiveStr = keyof ColumnPrimitiveMap;
85
+
86
+ /**
87
+ * All primitive types that can be stored in columns
88
+ *
89
+ * undefined represents NULL
90
+ */
91
+ export type ColumnPrimitive = ColumnPrimitiveMap[ColumnPrimitiveStr] | undefined;
92
+
93
+ // ============================================
94
+ // DataType ↔ ColumnPrimitive Mapping
95
+ // ============================================
96
+
97
+ /**
98
+ * SQL DataType → TypeScript type name mapping
99
+ *
100
+ * @example
101
+ * ```typescript
102
+ * const tsType = dataTypeStrToColumnPrimitiveStr["int"]; // "number"
103
+ * const tsType2 = dataTypeStrToColumnPrimitiveStr["datetime"]; // "DateTime"
104
+ * ```
105
+ */
106
+ export const dataTypeStrToColumnPrimitiveStr = {
107
+ int: "number" as const,
108
+ bigint: "number" as const,
109
+ float: "number" as const,
110
+ double: "number" as const,
111
+ decimal: "number" as const,
112
+ varchar: "string" as const,
113
+ char: "string" as const,
114
+ text: "string" as const,
115
+ binary: "Bytes" as const,
116
+ boolean: "boolean" as const,
117
+ datetime: "DateTime" as const,
118
+ date: "DateOnly" as const,
119
+ time: "Time" as const,
120
+ uuid: "Uuid" as const,
121
+ };
122
+
123
+ /**
124
+ * TypeScript Type inference from DataType
125
+ *
126
+ * @template T - DataType
127
+ *
128
+ * @example
129
+ * ```typescript
130
+ * type IntType = InferColumnPrimitiveFromDataType<{ type: "int" }>; // number
131
+ * type VarcharType = InferColumnPrimitiveFromDataType<{ type: "varchar"; length: 100 }>; // string
132
+ * ```
133
+ */
134
+ export type InferColumnPrimitiveFromDataType<TDataType extends DataType> =
135
+ ColumnPrimitiveMap[(typeof dataTypeStrToColumnPrimitiveStr)[TDataType["type"]]];
136
+
137
+ /**
138
+ * Infer ColumnPrimitiveStr from runtime value
139
+ *
140
+ * @param value - Column value
141
+ * @returns ColumnPrimitiveStr type name
142
+ * @throws Error if value type is unknown
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * inferColumnPrimitiveStr("hello"); // "string"
147
+ * inferColumnPrimitiveStr(123); // "number"
148
+ * inferColumnPrimitiveStr(new DateTime()); // "DateTime"
149
+ * ```
150
+ */
151
+ export function inferColumnPrimitiveStr(value: ColumnPrimitive): ColumnPrimitiveStr {
152
+ if (typeof value === "string") return "string";
153
+ if (typeof value === "number") return "number";
154
+ if (typeof value === "boolean") return "boolean";
155
+ if (value instanceof DateTime) return "DateTime";
156
+ if (value instanceof DateOnly) return "DateOnly";
157
+ if (value instanceof Time) return "Time";
158
+ if (value instanceof Uuid) return "Uuid";
159
+ if (value instanceof Uint8Array) return "Bytes";
160
+ throw new Error(`Unknown value type: ${typeof value}`);
161
+ }
162
+
163
+ // ============================================
164
+ // ColumnMeta
165
+ // ============================================
166
+
167
+ /**
168
+ * Column metadata
169
+ *
170
+ * Generated by ColumnBuilder and passed to TableBuilder
171
+ *
172
+ * @property type - TypeScript type name (ColumnPrimitiveStr)
173
+ * @property dataType - SQL data type
174
+ * @property autoIncrement - Whether to auto-increment
175
+ * @property nullable - Whether to allow NULL
176
+ * @property default - Default value
177
+ * @property description - Column description (DDL comment)
178
+ *
179
+ * @see {@link ColumnBuilder} Column builder
180
+ */
181
+ export interface ColumnMeta {
182
+ type: ColumnPrimitiveStr;
183
+ dataType: DataType;
184
+ autoIncrement?: boolean;
185
+ nullable?: boolean;
186
+ default?: ColumnPrimitive;
187
+ description?: string;
188
+ }