@simplysm/orm-common 13.0.100 → 14.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/README.md +90 -147
  2. package/dist/create-db-context.d.ts +10 -10
  3. package/dist/create-db-context.js +312 -276
  4. package/dist/create-db-context.js.map +1 -6
  5. package/dist/ddl/column-ddl.d.ts +4 -4
  6. package/dist/ddl/column-ddl.js +41 -35
  7. package/dist/ddl/column-ddl.js.map +1 -6
  8. package/dist/ddl/initialize.d.ts +17 -17
  9. package/dist/ddl/initialize.js +200 -142
  10. package/dist/ddl/initialize.js.map +1 -6
  11. package/dist/ddl/relation-ddl.d.ts +6 -6
  12. package/dist/ddl/relation-ddl.js +55 -48
  13. package/dist/ddl/relation-ddl.js.map +1 -6
  14. package/dist/ddl/schema-ddl.d.ts +4 -4
  15. package/dist/ddl/schema-ddl.js +21 -15
  16. package/dist/ddl/schema-ddl.js.map +1 -6
  17. package/dist/ddl/table-ddl.d.ts +20 -20
  18. package/dist/ddl/table-ddl.js +139 -93
  19. package/dist/ddl/table-ddl.js.map +1 -6
  20. package/dist/define-db-context.js +10 -13
  21. package/dist/define-db-context.js.map +1 -6
  22. package/dist/errors/db-transaction-error.d.ts +15 -15
  23. package/dist/errors/db-transaction-error.d.ts.map +1 -1
  24. package/dist/errors/db-transaction-error.js +53 -19
  25. package/dist/errors/db-transaction-error.js.map +1 -6
  26. package/dist/exec/executable.d.ts +23 -23
  27. package/dist/exec/executable.js +94 -40
  28. package/dist/exec/executable.js.map +1 -6
  29. package/dist/exec/queryable.d.ts +97 -97
  30. package/dist/exec/queryable.js +1310 -1204
  31. package/dist/exec/queryable.js.map +1 -6
  32. package/dist/exec/search-parser.d.ts +31 -31
  33. package/dist/exec/search-parser.d.ts.map +1 -1
  34. package/dist/exec/search-parser.js +158 -59
  35. package/dist/exec/search-parser.js.map +1 -6
  36. package/dist/expr/expr-unit.d.ts +4 -4
  37. package/dist/expr/expr-unit.js +24 -18
  38. package/dist/expr/expr-unit.js.map +1 -6
  39. package/dist/expr/expr.d.ts +108 -108
  40. package/dist/expr/expr.js +1872 -1844
  41. package/dist/expr/expr.js.map +1 -6
  42. package/dist/index.js +23 -1
  43. package/dist/index.js.map +1 -6
  44. package/dist/models/system-migration.js +7 -7
  45. package/dist/models/system-migration.js.map +1 -6
  46. package/dist/query-builder/base/expr-renderer-base.d.ts +10 -10
  47. package/dist/query-builder/base/expr-renderer-base.js +27 -21
  48. package/dist/query-builder/base/expr-renderer-base.js.map +1 -6
  49. package/dist/query-builder/base/query-builder-base.d.ts +21 -21
  50. package/dist/query-builder/base/query-builder-base.d.ts.map +1 -1
  51. package/dist/query-builder/base/query-builder-base.js +90 -80
  52. package/dist/query-builder/base/query-builder-base.js.map +1 -6
  53. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts +5 -5
  54. package/dist/query-builder/mssql/mssql-expr-renderer.d.ts.map +1 -1
  55. package/dist/query-builder/mssql/mssql-expr-renderer.js +447 -420
  56. package/dist/query-builder/mssql/mssql-expr-renderer.js.map +1 -6
  57. package/dist/query-builder/mssql/mssql-query-builder.d.ts +2 -2
  58. package/dist/query-builder/mssql/mssql-query-builder.d.ts.map +1 -1
  59. package/dist/query-builder/mssql/mssql-query-builder.js +483 -443
  60. package/dist/query-builder/mssql/mssql-query-builder.js.map +1 -6
  61. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts +5 -5
  62. package/dist/query-builder/mysql/mysql-expr-renderer.d.ts.map +1 -1
  63. package/dist/query-builder/mysql/mysql-expr-renderer.js +451 -419
  64. package/dist/query-builder/mysql/mysql-expr-renderer.js.map +1 -6
  65. package/dist/query-builder/mysql/mysql-query-builder.d.ts +10 -10
  66. package/dist/query-builder/mysql/mysql-query-builder.d.ts.map +1 -1
  67. package/dist/query-builder/mysql/mysql-query-builder.js +570 -479
  68. package/dist/query-builder/mysql/mysql-query-builder.js.map +1 -6
  69. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts +5 -5
  70. package/dist/query-builder/postgresql/postgresql-expr-renderer.d.ts.map +1 -1
  71. package/dist/query-builder/postgresql/postgresql-expr-renderer.js +449 -422
  72. package/dist/query-builder/postgresql/postgresql-expr-renderer.js.map +1 -6
  73. package/dist/query-builder/postgresql/postgresql-query-builder.d.ts +8 -8
  74. package/dist/query-builder/postgresql/postgresql-query-builder.d.ts.map +1 -1
  75. package/dist/query-builder/postgresql/postgresql-query-builder.js +511 -460
  76. package/dist/query-builder/postgresql/postgresql-query-builder.js.map +1 -6
  77. package/dist/query-builder/query-builder.d.ts +1 -1
  78. package/dist/query-builder/query-builder.js +13 -13
  79. package/dist/query-builder/query-builder.js.map +1 -6
  80. package/dist/schema/factory/column-builder.d.ts +84 -84
  81. package/dist/schema/factory/column-builder.js +248 -185
  82. package/dist/schema/factory/column-builder.js.map +1 -6
  83. package/dist/schema/factory/index-builder.d.ts +38 -38
  84. package/dist/schema/factory/index-builder.js +144 -85
  85. package/dist/schema/factory/index-builder.js.map +1 -6
  86. package/dist/schema/factory/relation-builder.d.ts +99 -99
  87. package/dist/schema/factory/relation-builder.d.ts.map +1 -1
  88. package/dist/schema/factory/relation-builder.js +274 -136
  89. package/dist/schema/factory/relation-builder.js.map +1 -6
  90. package/dist/schema/procedure-builder.d.ts +51 -51
  91. package/dist/schema/procedure-builder.d.ts.map +1 -1
  92. package/dist/schema/procedure-builder.js +205 -131
  93. package/dist/schema/procedure-builder.js.map +1 -6
  94. package/dist/schema/table-builder.d.ts +55 -55
  95. package/dist/schema/table-builder.d.ts.map +1 -1
  96. package/dist/schema/table-builder.js +274 -205
  97. package/dist/schema/table-builder.js.map +1 -6
  98. package/dist/schema/view-builder.d.ts +44 -44
  99. package/dist/schema/view-builder.d.ts.map +1 -1
  100. package/dist/schema/view-builder.js +189 -116
  101. package/dist/schema/view-builder.js.map +1 -6
  102. package/dist/types/column.d.ts +21 -21
  103. package/dist/types/column.js +60 -30
  104. package/dist/types/column.js.map +1 -6
  105. package/dist/types/db-context-def.d.ts +9 -9
  106. package/dist/types/db-context-def.js +2 -1
  107. package/dist/types/db-context-def.js.map +1 -6
  108. package/dist/types/db.d.ts +47 -47
  109. package/dist/types/db.js +15 -5
  110. package/dist/types/db.js.map +1 -6
  111. package/dist/types/expr.d.ts +81 -81
  112. package/dist/types/expr.d.ts.map +1 -1
  113. package/dist/types/expr.js +3 -1
  114. package/dist/types/expr.js.map +1 -6
  115. package/dist/types/query-def.d.ts +46 -46
  116. package/dist/types/query-def.d.ts.map +1 -1
  117. package/dist/types/query-def.js +31 -24
  118. package/dist/types/query-def.js.map +1 -6
  119. package/dist/utils/result-parser.d.ts +11 -11
  120. package/dist/utils/result-parser.js +362 -221
  121. package/dist/utils/result-parser.js.map +1 -6
  122. package/docs/core.md +117 -145
  123. package/docs/expression.md +186 -203
  124. package/docs/query-builder.md +75 -42
  125. package/docs/queryable.md +189 -151
  126. package/docs/schema-builders.md +172 -283
  127. package/docs/types.md +229 -173
  128. package/package.json +7 -5
  129. package/src/create-db-context.ts +31 -31
  130. package/src/ddl/column-ddl.ts +4 -4
  131. package/src/ddl/initialize.ts +38 -38
  132. package/src/ddl/relation-ddl.ts +6 -6
  133. package/src/ddl/schema-ddl.ts +4 -4
  134. package/src/ddl/table-ddl.ts +24 -24
  135. package/src/errors/db-transaction-error.ts +13 -13
  136. package/src/exec/executable.ts +25 -25
  137. package/src/exec/queryable.ts +152 -152
  138. package/src/exec/search-parser.ts +50 -50
  139. package/src/expr/expr-unit.ts +4 -4
  140. package/src/expr/expr.ts +118 -118
  141. package/src/index.ts +8 -8
  142. package/src/models/system-migration.ts +1 -1
  143. package/src/query-builder/base/expr-renderer-base.ts +21 -21
  144. package/src/query-builder/base/query-builder-base.ts +33 -33
  145. package/src/query-builder/mssql/mssql-expr-renderer.ts +28 -28
  146. package/src/query-builder/mssql/mssql-query-builder.ts +37 -37
  147. package/src/query-builder/mysql/mysql-expr-renderer.ts +29 -29
  148. package/src/query-builder/mysql/mysql-query-builder.ts +70 -70
  149. package/src/query-builder/postgresql/postgresql-expr-renderer.ts +22 -22
  150. package/src/query-builder/postgresql/postgresql-query-builder.ts +54 -54
  151. package/src/query-builder/query-builder.ts +1 -1
  152. package/src/schema/factory/column-builder.ts +86 -86
  153. package/src/schema/factory/index-builder.ts +38 -38
  154. package/src/schema/factory/relation-builder.ts +102 -102
  155. package/src/schema/procedure-builder.ts +52 -52
  156. package/src/schema/table-builder.ts +56 -56
  157. package/src/schema/view-builder.ts +47 -47
  158. package/src/types/column.ts +24 -24
  159. package/src/types/db-context-def.ts +15 -15
  160. package/src/types/db.ts +50 -50
  161. package/src/types/expr.ts +103 -103
  162. package/src/types/query-def.ts +50 -50
  163. package/src/utils/result-parser.ts +88 -88
  164. package/docs/utilities.md +0 -27
  165. package/tests/db-context/create-db-context.spec.ts +0 -193
  166. package/tests/db-context/define-db-context.spec.ts +0 -17
  167. package/tests/ddl/basic.expected.ts +0 -341
  168. package/tests/ddl/basic.spec.ts +0 -557
  169. package/tests/ddl/column-builder.expected.ts +0 -310
  170. package/tests/ddl/column-builder.spec.ts +0 -525
  171. package/tests/ddl/index-builder.expected.ts +0 -38
  172. package/tests/ddl/index-builder.spec.ts +0 -148
  173. package/tests/ddl/procedure-builder.expected.ts +0 -52
  174. package/tests/ddl/procedure-builder.spec.ts +0 -128
  175. package/tests/ddl/relation-builder.expected.ts +0 -36
  176. package/tests/ddl/relation-builder.spec.ts +0 -171
  177. package/tests/ddl/table-builder.expected.ts +0 -113
  178. package/tests/ddl/table-builder.spec.ts +0 -399
  179. package/tests/ddl/view-builder.expected.ts +0 -38
  180. package/tests/ddl/view-builder.spec.ts +0 -116
  181. package/tests/dml/delete.expected.ts +0 -96
  182. package/tests/dml/delete.spec.ts +0 -127
  183. package/tests/dml/insert.expected.ts +0 -192
  184. package/tests/dml/insert.spec.ts +0 -210
  185. package/tests/dml/update.expected.ts +0 -176
  186. package/tests/dml/update.spec.ts +0 -222
  187. package/tests/dml/upsert.expected.ts +0 -215
  188. package/tests/dml/upsert.spec.ts +0 -190
  189. package/tests/errors/queryable-errors.spec.ts +0 -126
  190. package/tests/escape.spec.ts +0 -59
  191. package/tests/examples/pivot.expected.ts +0 -211
  192. package/tests/examples/pivot.spec.ts +0 -200
  193. package/tests/examples/sampling.expected.ts +0 -69
  194. package/tests/examples/sampling.spec.ts +0 -42
  195. package/tests/examples/unpivot.expected.ts +0 -120
  196. package/tests/examples/unpivot.spec.ts +0 -161
  197. package/tests/exec/search-parser.spec.ts +0 -267
  198. package/tests/executable/basic.expected.ts +0 -18
  199. package/tests/executable/basic.spec.ts +0 -54
  200. package/tests/expr/comparison.expected.ts +0 -282
  201. package/tests/expr/comparison.spec.ts +0 -334
  202. package/tests/expr/conditional.expected.ts +0 -134
  203. package/tests/expr/conditional.spec.ts +0 -249
  204. package/tests/expr/date.expected.ts +0 -332
  205. package/tests/expr/date.spec.ts +0 -459
  206. package/tests/expr/math.expected.ts +0 -62
  207. package/tests/expr/math.spec.ts +0 -59
  208. package/tests/expr/string.expected.ts +0 -218
  209. package/tests/expr/string.spec.ts +0 -300
  210. package/tests/expr/utility.expected.ts +0 -147
  211. package/tests/expr/utility.spec.ts +0 -155
  212. package/tests/select/basic.expected.ts +0 -322
  213. package/tests/select/basic.spec.ts +0 -433
  214. package/tests/select/filter.expected.ts +0 -357
  215. package/tests/select/filter.spec.ts +0 -954
  216. package/tests/select/group.expected.ts +0 -169
  217. package/tests/select/group.spec.ts +0 -159
  218. package/tests/select/join.expected.ts +0 -582
  219. package/tests/select/join.spec.ts +0 -692
  220. package/tests/select/order.expected.ts +0 -150
  221. package/tests/select/order.spec.ts +0 -140
  222. package/tests/select/recursive-cte.expected.ts +0 -244
  223. package/tests/select/recursive-cte.spec.ts +0 -514
  224. package/tests/select/result-meta.spec.ts +0 -270
  225. package/tests/select/subquery.expected.ts +0 -363
  226. package/tests/select/subquery.spec.ts +0 -441
  227. package/tests/select/view.expected.ts +0 -155
  228. package/tests/select/view.spec.ts +0 -235
  229. package/tests/select/window.expected.ts +0 -345
  230. package/tests/select/window.spec.ts +0 -433
  231. package/tests/setup/MockExecutor.ts +0 -18
  232. package/tests/setup/TestDbContext.ts +0 -59
  233. package/tests/setup/models/Company.ts +0 -13
  234. package/tests/setup/models/Employee.ts +0 -10
  235. package/tests/setup/models/MonthlySales.ts +0 -11
  236. package/tests/setup/models/Post.ts +0 -16
  237. package/tests/setup/models/Sales.ts +0 -10
  238. package/tests/setup/models/User.ts +0 -19
  239. package/tests/setup/procedure/GetAllUsers.ts +0 -9
  240. package/tests/setup/procedure/GetUserById.ts +0 -12
  241. package/tests/setup/test-utils.ts +0 -72
  242. package/tests/setup/views/ActiveUsers.ts +0 -8
  243. package/tests/setup/views/UserSummary.ts +0 -11
  244. package/tests/types/nullable-queryable-record.spec.ts +0 -97
  245. package/tests/utils/result-parser-perf.spec.ts +0 -143
  246. package/tests/utils/result-parser.spec.ts +0 -667
@@ -1,28 +1,27 @@
1
1
  # Schema Builders
2
2
 
3
- ## `Table`
3
+ Fluent API builders for defining tables, views, procedures, columns, indexes, and relations.
4
4
 
5
- Table builder factory function. Creates a `TableBuilder` for defining table schema via fluent API.
5
+ ## Table (function)
6
+
7
+ Factory function that creates a `TableBuilder`.
6
8
 
7
9
  ```typescript
8
10
  function Table(name: string): TableBuilder<{}, {}>;
9
11
  ```
10
12
 
11
- ## `TableBuilder`
13
+ ## TableBuilder
12
14
 
13
- Database table definition builder. Define columns, PK, indexes, and relations via fluent API.
15
+ Database table definition builder with fluent API for columns, primary keys, indexes, and relations.
14
16
 
15
17
  ```typescript
16
- class TableBuilder<
17
- TColumns extends ColumnBuilderRecord,
18
- TRelations extends RelationBuilderRecord,
19
- > {
20
- readonly $columns!: TColumns;
21
- readonly $relations!: TRelations;
22
- readonly $inferSelect!: InferColumns<TColumns> & InferDeepRelations<TRelations>;
23
- readonly $inferColumns!: InferColumns<TColumns>;
24
- readonly $inferInsert!: InferInsertColumns<TColumns>;
25
- readonly $inferUpdate!: InferUpdateColumns<TColumns>;
18
+ class TableBuilder<TColumns extends ColumnBuilderRecord, TRelations extends RelationBuilderRecord> {
19
+ readonly $columns: TColumns;
20
+ readonly $relations: TRelations;
21
+ readonly $inferSelect: InferColumns<TColumns> & InferDeepRelations<TRelations>;
22
+ readonly $inferColumns: InferColumns<TColumns>;
23
+ readonly $inferInsert: InferInsertColumns<TColumns>;
24
+ readonly $inferUpdate: InferUpdateColumns<TColumns>;
26
25
 
27
26
  constructor(readonly meta: {
28
27
  name: string;
@@ -34,49 +33,55 @@ class TableBuilder<
34
33
  relations?: TRelations;
35
34
  indexes?: IndexBuilder<(keyof TColumns & string)[]>[];
36
35
  });
37
-
38
- description(desc: string): TableBuilder<TColumns, TRelations>;
39
- database(db: string): TableBuilder<TColumns, TRelations>;
40
- schema(schema: string): TableBuilder<TColumns, TRelations>;
41
- columns<TNewColumnDefs extends ColumnBuilderRecord>(
42
- fn: (c: ReturnType<typeof createColumnFactory>) => TNewColumnDefs,
43
- ): TableBuilder<TNewColumnDefs, TRelations>;
44
- primaryKey(...columns: (keyof TColumns & string)[]): TableBuilder<TColumns, TRelations>;
45
- indexes(fn: (i: ...) => IndexBuilder<string[]>[]): TableBuilder<TColumns, TRelations>;
46
- relations<T extends RelationBuilderRecord>(fn: (r: ...) => T): TableBuilder<TColumns, T>;
47
36
  }
48
37
  ```
49
38
 
50
- | Method | Description |
51
- |--------|-------------|
52
- | `description()` | Set table description (DDL comment) |
53
- | `database()` | Set database name |
54
- | `schema()` | Set schema name (MSSQL/PostgreSQL) |
55
- | `columns()` | Define columns using the column factory |
56
- | `primaryKey()` | Set primary key columns (composite PK supported) |
57
- | `indexes()` | Define indexes using the index factory |
58
- | `relations()` | Define relations using the relation factory |
39
+ ### Methods
59
40
 
60
- ## `View`
41
+ | Method | Signature | Description |
42
+ |---|---|---|
43
+ | `description` | `(desc: string) => TableBuilder` | Set table description (DDL comment) |
44
+ | `database` | `(db: string) => TableBuilder` | Set database name |
45
+ | `schema` | `(schema: string) => TableBuilder` | Set schema name (MSSQL/PostgreSQL) |
46
+ | `columns` | `(fn: (c: ColumnFactory) => TNewCols) => TableBuilder<TNewCols, TRelations>` | Define columns using the column factory |
47
+ | `primaryKey` | `(...columns: string[]) => TableBuilder` | Set primary key (composite supported) |
48
+ | `indexes` | `(fn: (i: IndexFactory) => IndexBuilder[]) => TableBuilder` | Define indexes |
49
+ | `relations` | `(fn: (r: RelationFactory) => T) => TableBuilder<TColumns, T>` | Define relationships |
61
50
 
62
- View builder factory function. Creates a `ViewBuilder` for defining view schema via fluent API.
51
+ **Example:**
63
52
 
64
53
  ```typescript
65
- function View(name: string): ViewBuilder<any, any, {}>;
54
+ const User = Table("User")
55
+ .database("mydb")
56
+ .columns((c) => ({
57
+ id: c.bigint().autoIncrement(),
58
+ name: c.varchar(100),
59
+ email: c.varchar(200).nullable(),
60
+ status: c.varchar(20).default("active"),
61
+ }))
62
+ .primaryKey("id")
63
+ .indexes((i) => [i.index("email").unique()])
64
+ .relations((r) => ({
65
+ posts: r.foreignKeyTarget(() => Post, "author"),
66
+ }));
66
67
  ```
67
68
 
68
- ## `ViewBuilder`
69
+ ## View (function)
69
70
 
70
- Database view definition builder. Define view query and relations via fluent API.
71
+ Factory function that creates a `ViewBuilder`.
71
72
 
72
73
  ```typescript
73
- class ViewBuilder<
74
- TDbContext extends DbContextBase,
75
- TData extends DataRecord,
76
- TRelations extends RelationBuilderRecord,
77
- > {
78
- readonly $relations!: TRelations;
79
- readonly $inferSelect!: TData;
74
+ function View(name: string): ViewBuilder<any, {}, {}>;
75
+ ```
76
+
77
+ ## ViewBuilder
78
+
79
+ Database view definition builder.
80
+
81
+ ```typescript
82
+ class ViewBuilder<TDbContext, TData extends DataRecord, TRelations extends RelationBuilderRecord> {
83
+ readonly $relations: TRelations;
84
+ readonly $inferSelect: TData;
80
85
 
81
86
  constructor(readonly meta: {
82
87
  name: string;
@@ -86,44 +91,47 @@ class ViewBuilder<
86
91
  viewFn?: (db: TDbContext) => Queryable<TData, any>;
87
92
  relations?: TRelations;
88
93
  });
89
-
90
- description(desc: string): ViewBuilder<TDbContext, TData, TRelations>;
91
- database(db: string): ViewBuilder<TDbContext, TData, TRelations>;
92
- schema(schema: string): ViewBuilder<TDbContext, TData, TRelations>;
93
- query<TViewData extends DataRecord, TDb extends DbContextBase>(
94
- viewFn: (db: TDb) => Queryable<TViewData, any>,
95
- ): ViewBuilder<TDb, TViewData, TRelations>;
96
- relations<T extends RelationBuilderRecord>(fn: (r: ...) => T): ViewBuilder<TDbContext, TData & InferDeepRelations<T>, TRelations>;
97
94
  }
98
95
  ```
99
96
 
100
- | Method | Description |
101
- |--------|-------------|
102
- | `description()` | Set view description (DDL comment) |
103
- | `database()` | Set database name |
104
- | `schema()` | Set schema name |
105
- | `query()` | Define the view's SELECT query |
106
- | `relations()` | Define relations with other tables/views |
97
+ ### Methods
107
98
 
108
- ## `Procedure`
99
+ | Method | Signature | Description |
100
+ |---|---|---|
101
+ | `description` | `(desc: string) => ViewBuilder` | Set view description |
102
+ | `database` | `(db: string) => ViewBuilder` | Set database name |
103
+ | `schema` | `(schema: string) => ViewBuilder` | Set schema name |
104
+ | `query` | `(viewFn: (db: TDb) => Queryable) => ViewBuilder` | Define view query |
105
+ | `relations` | `(fn: (r: RelationFactory) => T) => ViewBuilder` | Define relationships |
109
106
 
110
- Procedure builder factory function. Creates a `ProcedureBuilder` for defining stored procedure schema via fluent API.
107
+ **Example:**
108
+
109
+ ```typescript
110
+ const ActiveUsers = View("ActiveUsers")
111
+ .database("mydb")
112
+ .query((db: MyDb) =>
113
+ db.user()
114
+ .where((u) => [expr.eq(u.status, "active")])
115
+ .select((u) => ({ id: u.id, name: u.name }))
116
+ );
117
+ ```
118
+
119
+ ## Procedure (function)
120
+
121
+ Factory function that creates a `ProcedureBuilder`.
111
122
 
112
123
  ```typescript
113
124
  function Procedure(name: string): ProcedureBuilder<never, never>;
114
125
  ```
115
126
 
116
- ## `ProcedureBuilder`
127
+ ## ProcedureBuilder
117
128
 
118
- Stored procedure definition builder. Define parameters, return type, and body via fluent API.
129
+ Stored procedure definition builder.
119
130
 
120
131
  ```typescript
121
- class ProcedureBuilder<
122
- TParams extends ColumnBuilderRecord,
123
- TReturns extends ColumnBuilderRecord,
124
- > {
125
- readonly $params!: TParams;
126
- readonly $returns!: TReturns;
132
+ class ProcedureBuilder<TParams extends ColumnBuilderRecord, TReturns extends ColumnBuilderRecord> {
133
+ readonly $params: TParams;
134
+ readonly $returns: TReturns;
127
135
 
128
136
  constructor(readonly meta: {
129
137
  name: string;
@@ -134,50 +142,52 @@ class ProcedureBuilder<
134
142
  returns?: TReturns;
135
143
  query?: string;
136
144
  });
137
-
138
- description(desc: string): ProcedureBuilder<TParams, TReturns>;
139
- database(db: string): ProcedureBuilder<TParams, TReturns>;
140
- schema(schema: string): ProcedureBuilder<TParams, TReturns>;
141
- params<T extends ColumnBuilderRecord>(fn: (c: ...) => T): ProcedureBuilder<T, TReturns>;
142
- returns<T extends ColumnBuilderRecord>(fn: (c: ...) => T): ProcedureBuilder<TParams, T>;
143
- body(sql: string): ProcedureBuilder<TParams, TReturns>;
144
145
  }
145
146
  ```
146
147
 
147
- | Method | Description |
148
- |--------|-------------|
149
- | `description()` | Set procedure description |
150
- | `database()` | Set database name |
151
- | `schema()` | Set schema name |
152
- | `params()` | Define input parameters |
153
- | `returns()` | Define return type columns |
154
- | `body()` | Set procedure body SQL |
148
+ ### Methods
155
149
 
156
- ## `ColumnBuilder`
150
+ | Method | Signature | Description |
151
+ |---|---|---|
152
+ | `description` | `(desc: string) => ProcedureBuilder` | Set procedure description |
153
+ | `database` | `(db: string) => ProcedureBuilder` | Set database name |
154
+ | `schema` | `(schema: string) => ProcedureBuilder` | Set schema name |
155
+ | `params` | `(fn: (c: ColumnFactory) => T) => ProcedureBuilder<T, TReturns>` | Define input parameters |
156
+ | `returns` | `(fn: (c: ColumnFactory) => T) => ProcedureBuilder<TParams, T>` | Define return columns |
157
+ | `body` | `(sql: string) => ProcedureBuilder` | Set procedure body SQL |
157
158
 
158
- Column definition builder. Define column type, nullable, autoIncrement, default, and description via fluent API.
159
+ **Example:**
160
+
161
+ ```typescript
162
+ const GetUserById = Procedure("GetUserById")
163
+ .database("mydb")
164
+ .params((c) => ({ userId: c.bigint() }))
165
+ .returns((c) => ({ id: c.bigint(), name: c.varchar(100) }))
166
+ .body("SELECT id, name FROM User WHERE id = userId");
167
+ ```
168
+
169
+ ## ColumnBuilder
170
+
171
+ Column definition builder used inside `TableBuilder.columns()`.
159
172
 
160
173
  ```typescript
161
174
  class ColumnBuilder<TValue extends ColumnPrimitive, TMeta extends ColumnMeta> {
162
175
  constructor(readonly meta: TMeta);
163
-
164
- autoIncrement(): ColumnBuilder<TValue, Omit<TMeta, "autoIncrement"> & { autoIncrement: true }>;
165
- nullable(): ColumnBuilder<TValue | undefined, Omit<TMeta, "nullable"> & { nullable: true }>;
166
- default(value: TValue): ColumnBuilder<TValue, Omit<TMeta, "default"> & { default: typeof value }>;
167
- description(desc: string): ColumnBuilder<TValue, TMeta & { description: string }>;
168
176
  }
169
177
  ```
170
178
 
171
- | Method | Description |
172
- |--------|-------------|
173
- | `autoIncrement()` | Set auto increment (optional in INSERT) |
174
- | `nullable()` | Allow NULL (adds `undefined` to type) |
175
- | `default()` | Set default value (optional in INSERT) |
176
- | `description()` | Set column description (DDL comment) |
179
+ ### Methods
180
+
181
+ | Method | Signature | Description |
182
+ |---|---|---|
183
+ | `autoIncrement` | `() => ColumnBuilder` | Set auto-increment. Makes column optional in INSERT. |
184
+ | `nullable` | `() => ColumnBuilder<TValue \| undefined, ...>` | Allow NULL. Adds `undefined` to value type. |
185
+ | `default` | `(value: TValue) => ColumnBuilder` | Set default value. Makes column optional in INSERT. |
186
+ | `description` | `(desc: string) => ColumnBuilder` | Set column description (DDL comment) |
177
187
 
178
- ## `createColumnFactory`
188
+ ## createColumnFactory
179
189
 
180
- Column builder factory. Provides builder creation methods for all basic data types.
190
+ Returns a column factory object with methods for all supported data types.
181
191
 
182
192
  ```typescript
183
193
  function createColumnFactory(): {
@@ -198,26 +208,9 @@ function createColumnFactory(): {
198
208
  };
199
209
  ```
200
210
 
201
- | Method | SQL Type | TypeScript Type |
202
- |--------|----------|-----------------|
203
- | `int()` | INT (4 bytes) | `number` |
204
- | `bigint()` | BIGINT (8 bytes) | `number` |
205
- | `float()` | FLOAT (4 bytes) | `number` |
206
- | `double()` | DOUBLE (8 bytes) | `number` |
207
- | `decimal()` | DECIMAL(p, s) | `number` |
208
- | `varchar()` | VARCHAR(n) | `string` |
209
- | `char()` | CHAR(n) | `string` |
210
- | `text()` | TEXT | `string` |
211
- | `binary()` | LONGBLOB/VARBINARY(MAX)/BYTEA | `Bytes` |
212
- | `boolean()` | TINYINT(1)/BIT/BOOLEAN | `boolean` |
213
- | `datetime()` | DATETIME | `DateTime` |
214
- | `date()` | DATE | `DateOnly` |
215
- | `time()` | TIME | `Time` |
216
- | `uuid()` | BINARY(16)/UNIQUEIDENTIFIER/UUID | `Uuid` |
217
-
218
- ## `IndexBuilder`
219
-
220
- Index definition builder. Define index columns, uniqueness, and sort order via fluent API.
211
+ ## IndexBuilder
212
+
213
+ Index definition builder used inside `TableBuilder.indexes()`.
221
214
 
222
215
  ```typescript
223
216
  class IndexBuilder<TKeys extends string[]> {
@@ -228,33 +221,34 @@ class IndexBuilder<TKeys extends string[]> {
228
221
  orderBy?: { [K in keyof TKeys]: "ASC" | "DESC" };
229
222
  description?: string;
230
223
  });
231
-
232
- name(name: string): IndexBuilder<TKeys>;
233
- unique(): IndexBuilder<TKeys>;
234
- orderBy(...orderBy: { [K in keyof TKeys]: "ASC" | "DESC" }): IndexBuilder<TKeys>;
235
- description(description: string): IndexBuilder<TKeys>;
236
224
  }
237
225
  ```
238
226
 
239
- ## `createIndexFactory`
227
+ ### Methods
240
228
 
241
- Index builder factory. Used in `TableBuilder.indexes()`.
229
+ | Method | Signature | Description |
230
+ |---|---|---|
231
+ | `name` | `(name: string) => IndexBuilder` | Set custom index name |
232
+ | `unique` | `() => IndexBuilder` | Mark as unique index |
233
+ | `orderBy` | `(...orderBy: ("ASC" \| "DESC")[]) => IndexBuilder` | Set column sort order |
234
+ | `description` | `(description: string) => IndexBuilder` | Set index description |
235
+
236
+ ## createIndexFactory
237
+
238
+ Returns an index factory with the `index(...columns)` method.
242
239
 
243
240
  ```typescript
244
241
  function createIndexFactory<TColumnKey extends string>(): {
245
- index<TKeys extends TColumnKey[]>(...columns: [...TKeys]): IndexBuilder<TKeys>;
242
+ index<TKeys extends TColumnKey[]>(...columns: TKeys): IndexBuilder<TKeys>;
246
243
  };
247
244
  ```
248
245
 
249
- ## `ForeignKeyBuilder`
246
+ ## ForeignKeyBuilder
250
247
 
251
- Foreign key relation builder (N:1). Creates actual FK constraints in the DB.
248
+ Foreign key relation builder (N:1). Creates a real FK constraint in the database.
252
249
 
253
250
  ```typescript
254
- class ForeignKeyBuilder<
255
- TOwner extends TableBuilder<any, any>,
256
- TTargetFn extends () => TableBuilder<any, any>,
257
- > {
251
+ class ForeignKeyBuilder<TOwner extends TableBuilder, TTargetFn extends () => TableBuilder> {
258
252
  constructor(readonly meta: {
259
253
  ownerFn: () => TOwner;
260
254
  columns: string[];
@@ -262,19 +256,16 @@ class ForeignKeyBuilder<
262
256
  description?: string;
263
257
  });
264
258
 
265
- description(desc: string): ForeignKeyBuilder<TOwner, TTargetFn>;
259
+ description(desc: string): ForeignKeyBuilder;
266
260
  }
267
261
  ```
268
262
 
269
- ## `ForeignKeyTargetBuilder`
263
+ ## ForeignKeyTargetBuilder
270
264
 
271
- Foreign key reverse-reference builder (1:N). Loaded as array on `include()` (single object when `.single()` is called).
265
+ Foreign key reverse-reference builder (1:N). Loaded as array by default, call `.single()` for 1:1.
272
266
 
273
267
  ```typescript
274
- class ForeignKeyTargetBuilder<
275
- TTargetTableFn extends () => TableBuilder<any, any>,
276
- TIsSingle extends boolean,
277
- > {
268
+ class ForeignKeyTargetBuilder<TTargetTableFn extends () => TableBuilder, TIsSingle extends boolean> {
278
269
  constructor(readonly meta: {
279
270
  targetTableFn: TTargetTableFn;
280
271
  relationName: string;
@@ -282,20 +273,17 @@ class ForeignKeyTargetBuilder<
282
273
  isSingle?: TIsSingle;
283
274
  });
284
275
 
285
- description(desc: string): ForeignKeyTargetBuilder<TTargetTableFn, TIsSingle>;
276
+ description(desc: string): ForeignKeyTargetBuilder;
286
277
  single(): ForeignKeyTargetBuilder<TTargetTableFn, true>;
287
278
  }
288
279
  ```
289
280
 
290
- ## `RelationKeyBuilder`
281
+ ## RelationKeyBuilder
291
282
 
292
- Logical relation builder (N:1). Same as `ForeignKeyBuilder` but does not create FK constraints in the DB. Can be used in views.
283
+ Logical relation builder (N:1). Same as `ForeignKeyBuilder` but does NOT create a FK constraint in the database. Usable from both Tables and Views.
293
284
 
294
285
  ```typescript
295
- class RelationKeyBuilder<
296
- TOwner extends TableBuilder<any, any> | ViewBuilder<any, any, any>,
297
- TTargetFn extends () => TableBuilder<any, any> | ViewBuilder<any, any, any>,
298
- > {
286
+ class RelationKeyBuilder<TOwner, TTargetFn extends () => TableBuilder | ViewBuilder> {
299
287
  constructor(readonly meta: {
300
288
  ownerFn: () => TOwner;
301
289
  columns: string[];
@@ -303,19 +291,16 @@ class RelationKeyBuilder<
303
291
  description?: string;
304
292
  });
305
293
 
306
- description(desc: string): RelationKeyBuilder<TOwner, TTargetFn>;
294
+ description(desc: string): RelationKeyBuilder;
307
295
  }
308
296
  ```
309
297
 
310
- ## `RelationKeyTargetBuilder`
298
+ ## RelationKeyTargetBuilder
311
299
 
312
- Logical relation reverse-reference builder (1:N). Same as `ForeignKeyTargetBuilder` but without DB FK constraints. Can be used in views.
300
+ Logical reverse-reference builder (1:N). Same as `ForeignKeyTargetBuilder` but without FK constraint. Usable from both Tables and Views.
313
301
 
314
302
  ```typescript
315
- class RelationKeyTargetBuilder<
316
- TTargetTableFn extends () => TableBuilder<any, any> | ViewBuilder<any, any, any>,
317
- TIsSingle extends boolean,
318
- > {
303
+ class RelationKeyTargetBuilder<TTargetTableFn, TIsSingle extends boolean> {
319
304
  constructor(readonly meta: {
320
305
  targetTableFn: TTargetTableFn;
321
306
  relationName: string;
@@ -323,141 +308,45 @@ class RelationKeyTargetBuilder<
323
308
  isSingle?: TIsSingle;
324
309
  });
325
310
 
326
- description(desc: string): RelationKeyTargetBuilder<TTargetTableFn, TIsSingle>;
311
+ description(desc: string): RelationKeyTargetBuilder;
327
312
  single(): RelationKeyTargetBuilder<TTargetTableFn, true>;
328
313
  }
329
314
  ```
330
315
 
331
- ## `createRelationFactory`
332
-
333
- Relation builder factory. Used in `TableBuilder.relations()` and `ViewBuilder.relations()`. Tables can use both FK + RelationKey; views can only use RelationKey.
334
-
335
- ```typescript
336
- function createRelationFactory<
337
- TOwner extends TableBuilder<any, any> | ViewBuilder<any, any, any>,
338
- TColumnKey extends string,
339
- >(ownerFn: () => TOwner): TOwner extends TableBuilder<any, any>
340
- ? RelationFkFactory<TOwner, TColumnKey> & RelationRkFactory<TOwner, TColumnKey>
341
- : RelationRkFactory<TOwner, TColumnKey>;
342
- ```
343
-
344
- ## `ColumnBuilderRecord`
345
-
346
- Column builder record type. Used as the return type of `TableBuilder.columns()`.
347
-
348
- ```typescript
349
- type ColumnBuilderRecord = Record<string, ColumnBuilder<ColumnPrimitive, ColumnMeta>>;
350
- ```
351
-
352
- ## `RelationBuilderRecord`
353
-
354
- Relation builder record type. Return type of `TableBuilder.relations()` and `ViewBuilder.relations()`.
355
-
356
- ```typescript
357
- type RelationBuilderRecord = Record<
358
- string,
359
- ForeignKeyBuilder<any, any> | ForeignKeyTargetBuilder<any, any> | RelationKeyBuilder<any, any> | RelationKeyTargetBuilder<any, any>
360
- >;
361
- ```
362
-
363
- ## `InferColumns`
364
-
365
- Infer actual value types from a column builder record.
366
-
367
- ```typescript
368
- type InferColumns<TBuilders extends ColumnBuilderRecord> = {
369
- [K in keyof TBuilders]: TBuilders[K] extends ColumnBuilder<infer V, any> ? V : never;
370
- };
371
- ```
372
-
373
- ## `InferColumnExprs`
374
-
375
- Infer expression input types from a column builder record.
376
-
377
- ```typescript
378
- type InferColumnExprs<TBuilders extends ColumnBuilderRecord> = {
379
- [K in keyof TBuilders]: TBuilders[K] extends ColumnBuilder<infer V, any> ? ExprInput<V> : never;
380
- };
381
- ```
382
-
383
- ## `InferInsertColumns`
384
-
385
- INSERT type inference. Required columns are required, optional columns (autoIncrement, nullable, default) are `Partial`.
386
-
387
- ```typescript
388
- type InferInsertColumns<TBuilders extends ColumnBuilderRecord> = Pick<
389
- InferColumns<TBuilders>,
390
- RequiredInsertKeys<TBuilders>
391
- > & Partial<Pick<InferColumns<TBuilders>, OptionalInsertKeys<TBuilders>>>;
392
- ```
393
-
394
- ## `InferUpdateColumns`
395
-
396
- UPDATE type inference. All columns are optional.
397
-
398
- ```typescript
399
- type InferUpdateColumns<TBuilders extends ColumnBuilderRecord> = Partial<InferColumns<TBuilders>>;
400
- ```
401
-
402
- ## `RequiredInsertKeys`
403
-
404
- Extract required column keys for INSERT (columns without autoIncrement, nullable, or default).
405
-
406
- ```typescript
407
- type RequiredInsertKeys<TBuilders extends ColumnBuilderRecord> = { ... }[keyof TBuilders];
408
- ```
409
-
410
- ## `OptionalInsertKeys`
411
-
412
- Extract optional column keys for INSERT.
413
-
414
- ```typescript
415
- type OptionalInsertKeys<TBuilders extends ColumnBuilderRecord> = Exclude<keyof TBuilders, RequiredInsertKeys<TBuilders>>;
416
- ```
417
-
418
- ## `DataToColumnBuilderRecord`
316
+ ## createRelationFactory
419
317
 
420
- Transform from data record to column builder record.
318
+ Returns a relation factory. Tables get both FK and RelationKey methods; Views get only RelationKey methods.
421
319
 
422
320
  ```typescript
423
- type DataToColumnBuilderRecord<TData extends DataRecord> = { ... };
321
+ function createRelationFactory<TOwner, TColumnKey extends string>(
322
+ ownerFn: () => TOwner,
323
+ ): TOwner extends TableBuilder
324
+ ? RelationFkFactory & RelationRkFactory
325
+ : RelationRkFactory;
424
326
  ```
425
327
 
426
- ## `InferDeepRelations`
427
-
428
- Deep relation type inference from relation definitions. Makes all relations optional.
429
-
430
- ```typescript
431
- type InferDeepRelations<TRelations extends RelationBuilderRecord> = {
432
- [K in keyof TRelations]?: ExtractRelationTarget<TRelations[K]> | ExtractRelationTargetResult<TRelations[K]>;
433
- };
434
- ```
435
-
436
- ## `ExtractRelationTarget`
437
-
438
- Extract target type from FK/RelationKey (single object, N:1 relation).
439
-
440
- ```typescript
441
- type ExtractRelationTarget<TRelation> = ...;
442
- ```
328
+ **Factory methods (Table):**
443
329
 
444
- ## `ExtractRelationTargetResult`
445
-
446
- Extract target type from FKTarget/RelationKeyTarget (array or single object, 1:N relation).
447
-
448
- ```typescript
449
- type ExtractRelationTargetResult<TRelation> = ...;
450
- ```
451
-
452
- ## `_Migration`
453
-
454
- Built-in system migration table. Automatically included in every `DbContextDef`.
455
-
456
- ```typescript
457
- const _Migration = Table("_migration")
458
- .columns((c) => ({
459
- code: c.varchar(255),
460
- }))
461
- .description("System Migration Table")
462
- .primaryKey("code");
463
- ```
330
+ | Method | Description |
331
+ |---|---|
332
+ | `foreignKey(columns, targetFn)` | N:1 FK relation (creates DB constraint) |
333
+ | `foreignKeyTarget(targetTableFn, relationName)` | 1:N FK reverse-reference |
334
+ | `relationKey(columns, targetFn)` | N:1 logical relation (no DB constraint) |
335
+ | `relationKeyTarget(targetTableFn, relationName)` | 1:N logical reverse-reference |
336
+
337
+ ## Type Utilities
338
+
339
+ | Type | Description |
340
+ |---|---|
341
+ | `ColumnBuilderRecord` | `Record<string, ColumnBuilder<ColumnPrimitive, ColumnMeta>>` |
342
+ | `RelationBuilderRecord` | `Record<string, ForeignKeyBuilder \| ForeignKeyTargetBuilder \| RelationKeyBuilder \| RelationKeyTargetBuilder>` |
343
+ | `InferColumns<T>` | Infer runtime value types from column builders |
344
+ | `InferColumnExprs<T>` | Infer `ExprInput` types from column builders |
345
+ | `InferInsertColumns<T>` | INSERT type: required fields + optional for autoIncrement/nullable/default |
346
+ | `InferUpdateColumns<T>` | UPDATE type: all fields optional |
347
+ | `RequiredInsertKeys<T>` | Extract required INSERT column keys |
348
+ | `OptionalInsertKeys<T>` | Extract optional INSERT column keys |
349
+ | `DataToColumnBuilderRecord<T>` | Convert data record to column builder record |
350
+ | `ExtractRelationTarget<T>` | Extract target type from FK/RelationKey (single object) |
351
+ | `ExtractRelationTargetResult<T>` | Extract target type from FKTarget/RelationKeyTarget (array or single) |
352
+ | `InferDeepRelations<T>` | Deep relation type inference (all optional) |