metal-orm 1.1.10 → 1.1.16

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 (192) hide show
  1. package/README.md +758 -769
  2. package/dist/index.cjs +106 -43
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +5 -5
  5. package/dist/index.d.ts +5 -5
  6. package/dist/index.js +106 -43
  7. package/dist/index.js.map +1 -1
  8. package/package.json +100 -96
  9. package/scripts/generate-entities/render.mjs +21 -12
  10. package/scripts/generate-entities/schema.mjs +209 -195
  11. package/scripts/generate-entities/tree-detection.mjs +159 -153
  12. package/scripts/inflection/pt-br.mjs +468 -468
  13. package/scripts/run-eslint.mjs +33 -34
  14. package/scripts/show-sql-seed.sql +102 -0
  15. package/scripts/show-sql.mjs +321 -325
  16. package/src/bulk/bulk-delete-executor.ts +3 -5
  17. package/src/bulk/bulk-insert-executor.ts +7 -7
  18. package/src/bulk/bulk-update-executor.ts +2 -2
  19. package/src/bulk/bulk-upsert-executor.ts +5 -7
  20. package/src/codegen/naming-strategy.ts +54 -54
  21. package/src/codegen/typescript.ts +482 -482
  22. package/src/core/ast/adapters.ts +1 -1
  23. package/src/core/ast/builders.ts +123 -123
  24. package/src/core/ast/expression-builders.ts +745 -745
  25. package/src/core/ast/expression-nodes.ts +304 -304
  26. package/src/core/ast/expression-visitor.ts +212 -212
  27. package/src/core/ast/expression.ts +20 -20
  28. package/src/core/ast/helpers.ts +14 -14
  29. package/src/core/ast/join.ts +18 -18
  30. package/src/core/ast/query.ts +200 -200
  31. package/src/core/ddl/dialects/base-schema-dialect.ts +1 -1
  32. package/src/core/ddl/dialects/mssql-schema-dialect.ts +1 -1
  33. package/src/core/ddl/dialects/mysql-schema-dialect.ts +1 -1
  34. package/src/core/ddl/dialects/postgres-schema-dialect.ts +1 -1
  35. package/src/core/ddl/dialects/render-reference.test.ts +70 -70
  36. package/src/core/ddl/dialects/sqlite-schema-dialect.ts +1 -1
  37. package/src/core/ddl/introspect/catalogs/index.ts +5 -5
  38. package/src/core/ddl/introspect/catalogs/postgres.ts +146 -146
  39. package/src/core/ddl/introspect/context.ts +15 -15
  40. package/src/core/ddl/introspect/functions/postgres.ts +35 -35
  41. package/src/core/ddl/introspect/mysql.ts +113 -36
  42. package/src/core/ddl/introspect/registry.ts +40 -40
  43. package/src/core/ddl/introspect/run-select.ts +35 -35
  44. package/src/core/ddl/introspect/utils.ts +56 -56
  45. package/src/core/ddl/naming-strategy.ts +16 -16
  46. package/src/core/ddl/schema-dialect.ts +56 -56
  47. package/src/core/ddl/schema-diff.ts +234 -234
  48. package/src/core/ddl/schema-generator.ts +1 -1
  49. package/src/core/ddl/schema-introspect.ts +25 -25
  50. package/src/core/ddl/sql-writing.ts +171 -171
  51. package/src/core/dialect/abstract.ts +541 -541
  52. package/src/core/dialect/base/cte-compiler.ts +33 -33
  53. package/src/core/dialect/base/function-table-formatter.ts +103 -103
  54. package/src/core/dialect/base/groupby-compiler.ts +21 -21
  55. package/src/core/dialect/base/join-compiler.ts +25 -25
  56. package/src/core/dialect/base/orderby-compiler.ts +35 -35
  57. package/src/core/dialect/base/pagination-strategy.ts +32 -32
  58. package/src/core/dialect/base/returning-strategy.ts +57 -57
  59. package/src/core/dialect/base/sql-dialect.ts +294 -294
  60. package/src/core/dialect/dialect-factory.ts +91 -91
  61. package/src/core/dialect/mssql/functions.ts +120 -120
  62. package/src/core/dialect/mssql/index.ts +317 -317
  63. package/src/core/dialect/mysql/functions.ts +103 -103
  64. package/src/core/dialect/mysql/index.ts +105 -105
  65. package/src/core/dialect/postgres/functions.ts +108 -108
  66. package/src/core/dialect/postgres/index.ts +91 -91
  67. package/src/core/dialect/sqlite/functions.ts +129 -129
  68. package/src/core/dialect/sqlite/index.ts +67 -67
  69. package/src/core/driver/database-driver.ts +19 -19
  70. package/src/core/driver/mssql-driver.ts +23 -23
  71. package/src/core/driver/mysql-driver.ts +23 -23
  72. package/src/core/driver/postgres-driver.ts +23 -23
  73. package/src/core/driver/sqlite-driver.ts +23 -23
  74. package/src/core/execution/db-executor.ts +92 -92
  75. package/src/core/execution/executors/better-sqlite3-executor.ts +94 -94
  76. package/src/core/execution/executors/mssql-executor.ts +184 -184
  77. package/src/core/execution/executors/mysql-executor.ts +88 -88
  78. package/src/core/execution/executors/postgres-executor.ts +26 -26
  79. package/src/core/execution/executors/sqlite-executor.ts +42 -42
  80. package/src/core/execution/pooling/pool-types.ts +30 -30
  81. package/src/core/execution/pooling/pool.ts +275 -275
  82. package/src/core/functions/array.ts +35 -35
  83. package/src/core/functions/control-flow.ts +79 -79
  84. package/src/core/functions/datetime.ts +237 -237
  85. package/src/core/functions/json.ts +70 -70
  86. package/src/core/functions/numeric.ts +297 -297
  87. package/src/core/functions/text.ts +334 -334
  88. package/src/core/functions/types.ts +33 -33
  89. package/src/core/hydration/types.ts +51 -51
  90. package/src/core/sql/sql-operator-config.ts +39 -39
  91. package/src/core/sql/sql.ts +152 -152
  92. package/src/decorators/column-decorator.ts +87 -87
  93. package/src/decorators/decorator-metadata.ts +143 -143
  94. package/src/decorators/entity.ts +93 -93
  95. package/src/decorators/index.ts +39 -39
  96. package/src/decorators/relations.ts +231 -231
  97. package/src/decorators/transformers/built-in/string-transformers.ts +231 -231
  98. package/src/decorators/transformers/transformer-decorators.ts +134 -134
  99. package/src/decorators/transformers/transformer-executor.ts +171 -171
  100. package/src/decorators/transformers/transformer-metadata.ts +73 -73
  101. package/src/decorators/validators/built-in/br-cep-validator.ts +55 -55
  102. package/src/decorators/validators/built-in/br-cnpj-validator.ts +105 -105
  103. package/src/decorators/validators/built-in/br-cpf-validator.ts +103 -103
  104. package/src/decorators/validators/country-validator-registry.ts +64 -64
  105. package/src/decorators/validators/country-validators-decorators.ts +203 -203
  106. package/src/decorators/validators/country-validators.ts +105 -105
  107. package/src/decorators/validators/validator-metadata.ts +59 -59
  108. package/src/dto/dto-types.ts +226 -226
  109. package/src/dto/filter-types.ts +141 -141
  110. package/src/dto/index.ts +95 -95
  111. package/src/dto/openapi/generators/base.ts +29 -29
  112. package/src/dto/openapi/generators/column.ts +37 -37
  113. package/src/dto/openapi/generators/dto.ts +91 -91
  114. package/src/dto/openapi/generators/filter.ts +75 -75
  115. package/src/dto/openapi/generators/nested-dto.ts +618 -618
  116. package/src/dto/openapi/generators/pagination.ts +111 -111
  117. package/src/dto/openapi/generators/relation-filter.ts +228 -228
  118. package/src/dto/openapi/index.ts +12 -12
  119. package/src/dto/openapi/types.ts +101 -101
  120. package/src/dto/openapi/utilities.ts +95 -95
  121. package/src/dto/pagination-utils.ts +150 -150
  122. package/src/dto/transform.ts +197 -197
  123. package/src/index.ts +86 -86
  124. package/src/orm/als.ts +58 -58
  125. package/src/orm/domain-event-bus.ts +119 -119
  126. package/src/orm/entity-context.ts +86 -86
  127. package/src/orm/entity-materializer.ts +159 -159
  128. package/src/orm/entity-meta.ts +97 -97
  129. package/src/orm/entity-registry.ts +39 -39
  130. package/src/orm/entity-relation-cache.ts +39 -39
  131. package/src/orm/execute.ts +194 -194
  132. package/src/orm/execution-context.ts +18 -18
  133. package/src/orm/hydration-context.ts +26 -26
  134. package/src/orm/hydration.ts +112 -112
  135. package/src/orm/identity-map.ts +61 -61
  136. package/src/orm/interceptor-pipeline.ts +16 -16
  137. package/src/orm/lazy-batch/belongs-to-many.ts +119 -119
  138. package/src/orm/lazy-batch/belongs-to.ts +108 -108
  139. package/src/orm/lazy-batch/has-many.ts +69 -69
  140. package/src/orm/lazy-batch/has-one.ts +68 -68
  141. package/src/orm/lazy-batch/shared.ts +125 -125
  142. package/src/orm/orm-session.ts +620 -620
  143. package/src/orm/orm.ts +34 -34
  144. package/src/orm/pooled-executor-factory.ts +121 -121
  145. package/src/orm/query-logger.ts +40 -40
  146. package/src/orm/relation-change-processor.ts +420 -420
  147. package/src/orm/relations/belongs-to.ts +143 -143
  148. package/src/orm/relations/has-many.ts +204 -204
  149. package/src/orm/relations/has-one.ts +174 -174
  150. package/src/orm/relations/many-to-many.ts +288 -288
  151. package/src/orm/relations/morph-many.ts +156 -156
  152. package/src/orm/relations/morph-one.ts +151 -151
  153. package/src/orm/relations/morph-to.ts +162 -162
  154. package/src/orm/runtime-types.ts +92 -92
  155. package/src/orm/save-graph.ts +561 -561
  156. package/src/orm/transaction-runner.ts +24 -24
  157. package/src/orm/unit-of-work.ts +426 -426
  158. package/src/query/index.ts +69 -69
  159. package/src/query/target.ts +46 -46
  160. package/src/query-builder/column-selector.ts +81 -81
  161. package/src/query-builder/delete.ts +141 -141
  162. package/src/query-builder/insert-query-state.ts +149 -149
  163. package/src/query-builder/insert.ts +117 -117
  164. package/src/query-builder/query-ast-service.ts +287 -287
  165. package/src/query-builder/query-resolution.ts +78 -78
  166. package/src/query-builder/raw-column-parser.ts +38 -38
  167. package/src/query-builder/relation-filter-utils.ts +153 -153
  168. package/src/query-builder/relation-join-planner.ts +10 -10
  169. package/src/query-builder/relation-manager.ts +87 -87
  170. package/src/query-builder/relation-projection-helper.ts +102 -102
  171. package/src/query-builder/relation-types.ts +9 -9
  172. package/src/query-builder/relation-utils.ts +15 -15
  173. package/src/query-builder/select/cte-facet.ts +40 -40
  174. package/src/query-builder/select/from-facet.ts +80 -80
  175. package/src/query-builder/select/join-facet.ts +62 -62
  176. package/src/query-builder/select/predicate-facet.ts +104 -104
  177. package/src/query-builder/select/projection-facet.ts +70 -70
  178. package/src/query-builder/select/relation-facet.ts +81 -81
  179. package/src/query-builder/select/setop-facet.ts +36 -36
  180. package/src/query-builder/select-helpers.ts +1 -1
  181. package/src/query-builder/select-query-builder-deps.ts +130 -130
  182. package/src/query-builder/select-query-state.ts +207 -207
  183. package/src/query-builder/update.ts +151 -151
  184. package/src/schema/column-types.ts +322 -322
  185. package/src/schema/table-guards.ts +37 -37
  186. package/src/schema/table.ts +281 -281
  187. package/src/tree/index.ts +13 -13
  188. package/src/tree/nested-set-strategy.ts +545 -545
  189. package/src/tree/tree-decorator.ts +397 -397
  190. package/src/tree/tree-manager.ts +754 -754
  191. package/src/tree/tree-query.ts +427 -427
  192. package/src/tree/tree-types.ts +299 -299
@@ -1,166 +1,166 @@
1
- import {
2
- AliasRefNode,
3
- CaseExpressionNode,
4
- CastExpressionNode,
5
- ColumnNode,
6
- ExpressionNode,
7
- FunctionNode,
8
- OperandNode,
9
- ScalarSubqueryNode,
10
- WindowFunctionNode
11
- } from './expression.js';
12
- import { JoinNode } from './join.js';
13
- import { OrderDirection } from '../sql/sql.js';
14
-
15
- /**
16
- * AST node representing a table reference in a query
17
- */
18
- export interface TableNode {
19
- type: 'Table';
20
- /** Table name */
21
- name: string;
22
- /** Optional schema name */
23
- schema?: string;
24
- /** Optional table alias */
25
- alias?: string;
26
- }
27
-
28
- /**
29
- * AST node representing a function used as a table source (table-valued function)
30
- */
31
- export interface FunctionTableNode {
32
- type: 'FunctionTable';
33
- // Canonical "intent" for dialect-aware table functions (tvf).
34
- // If set, compiler resolves via TableFunctionStrategy and can fail fast.
35
- key?: string;
36
- /** Function name */
37
- name: string;
38
- /** Optional schema for the function (some dialects) */
39
- schema?: string;
40
- /** Function arguments as operand nodes */
41
- args?: OperandNode[];
42
- /** Optional alias for the function table */
43
- alias?: string;
44
- /** LATERAL flag */
45
- lateral?: boolean;
46
- /** WITH ORDINALITY flag */
47
- withOrdinality?: boolean;
48
- /** Optional column aliases */
49
- columnAliases?: string[];
50
- }
51
-
52
- /**
53
- * AST node representing a derived table (subquery with an alias)
54
- */
55
- export interface DerivedTableNode {
56
- type: 'DerivedTable';
57
- /** Subquery providing the rows */
58
- query: SelectQueryNode;
59
- /** Required alias for the derived table */
60
- alias: string;
61
- /** Optional column aliases */
62
- columnAliases?: string[];
63
- }
64
-
65
- export type TableSourceNode = TableNode | FunctionTableNode | DerivedTableNode;
66
-
67
- /**
68
- * Any expression that can appear in ORDER BY / GROUP BY terms.
69
- */
70
- export type OrderingTerm = OperandNode | ExpressionNode | AliasRefNode;
71
-
72
- /**
73
- * AST node representing an ORDER BY clause
74
- */
75
- export interface OrderByNode {
76
- type: 'OrderBy';
77
- /** Expression/operand/alias to order by */
78
- term: OrderingTerm;
79
- /** Order direction (ASC or DESC) */
80
- direction: OrderDirection;
81
- /** Optional nulls ordering (NULLS FIRST/LAST) */
82
- nulls?: 'FIRST' | 'LAST';
83
- /** Optional collation */
84
- collation?: string;
85
- }
86
-
87
- /**
88
- * AST node representing a Common Table Expression (CTE)
89
- */
90
- export interface CommonTableExpressionNode {
91
- type: 'CommonTableExpression';
92
- /** CTE name */
93
- name: string;
94
- /** Optional column names */
95
- columns?: string[];
96
- /** CTE query */
97
- query: SelectQueryNode;
98
- /** Whether the CTE is recursive */
99
- recursive: boolean;
100
- }
101
-
102
- /**
103
- * Supported set operation kinds for compound SELECT queries
104
- */
105
- export type SetOperationKind = 'UNION' | 'UNION ALL' | 'INTERSECT' | 'EXCEPT';
106
-
107
- /**
108
- * AST node representing a set operation (UNION, INTERSECT, etc.)
109
- */
110
- export interface SetOperationNode {
111
- type: 'SetOperation';
112
- /** Operator to combine queries */
113
- operator: SetOperationKind;
114
- /** Right-hand query in the compound expression */
115
- query: SelectQueryNode;
116
- }
117
-
118
- /**
119
- * AST node representing a complete SELECT query
120
- */
121
- export interface SelectQueryNode {
122
- type: 'SelectQuery';
123
- /** Optional CTEs (WITH clauses) */
124
- ctes?: CommonTableExpressionNode[];
125
- /** FROM clause table (either a Table or a FunctionTable) */
126
- from: TableSourceNode;
127
- /** SELECT clause columns */
128
- columns: (
129
- ColumnNode |
130
- FunctionNode |
131
- ScalarSubqueryNode |
132
- CaseExpressionNode |
133
- CastExpressionNode |
134
- WindowFunctionNode
135
- )[];
136
- /** JOIN clauses */
137
- joins: JoinNode[];
138
- /** Optional WHERE clause */
139
- where?: ExpressionNode;
140
- /** Optional GROUP BY clause */
141
- groupBy?: OrderingTerm[];
142
- /** Optional HAVING clause */
143
- having?: ExpressionNode;
144
- /** Optional ORDER BY clause */
145
- orderBy?: OrderByNode[];
146
- /** Optional LIMIT clause */
147
- limit?: number;
148
- /** Optional OFFSET clause */
149
- offset?: number;
150
- /** Optional query metadata */
151
- meta?: Record<string, unknown>;
152
- /** Optional DISTINCT clause */
153
- distinct?: ColumnNode[];
154
- /** Optional set operations chaining this query with others */
155
- setOps?: SetOperationNode[];
156
- }
157
-
158
- export interface InsertValuesSourceNode {
159
- type: 'InsertValues';
160
- /** Rows of values for INSERT rows */
161
- rows: OperandNode[][];
162
- }
163
-
1
+ import {
2
+ AliasRefNode,
3
+ CaseExpressionNode,
4
+ CastExpressionNode,
5
+ ColumnNode,
6
+ ExpressionNode,
7
+ FunctionNode,
8
+ OperandNode,
9
+ ScalarSubqueryNode,
10
+ WindowFunctionNode
11
+ } from './expression.js';
12
+ import { JoinNode } from './join.js';
13
+ import { OrderDirection } from '../sql/sql.js';
14
+
15
+ /**
16
+ * AST node representing a table reference in a query
17
+ */
18
+ export interface TableNode {
19
+ type: 'Table';
20
+ /** Table name */
21
+ name: string;
22
+ /** Optional schema name */
23
+ schema?: string;
24
+ /** Optional table alias */
25
+ alias?: string;
26
+ }
27
+
28
+ /**
29
+ * AST node representing a function used as a table source (table-valued function)
30
+ */
31
+ export interface FunctionTableNode {
32
+ type: 'FunctionTable';
33
+ // Canonical "intent" for dialect-aware table functions (tvf).
34
+ // If set, compiler resolves via TableFunctionStrategy and can fail fast.
35
+ key?: string;
36
+ /** Function name */
37
+ name: string;
38
+ /** Optional schema for the function (some dialects) */
39
+ schema?: string;
40
+ /** Function arguments as operand nodes */
41
+ args?: OperandNode[];
42
+ /** Optional alias for the function table */
43
+ alias?: string;
44
+ /** LATERAL flag */
45
+ lateral?: boolean;
46
+ /** WITH ORDINALITY flag */
47
+ withOrdinality?: boolean;
48
+ /** Optional column aliases */
49
+ columnAliases?: string[];
50
+ }
51
+
52
+ /**
53
+ * AST node representing a derived table (subquery with an alias)
54
+ */
55
+ export interface DerivedTableNode {
56
+ type: 'DerivedTable';
57
+ /** Subquery providing the rows */
58
+ query: SelectQueryNode;
59
+ /** Required alias for the derived table */
60
+ alias: string;
61
+ /** Optional column aliases */
62
+ columnAliases?: string[];
63
+ }
64
+
65
+ export type TableSourceNode = TableNode | FunctionTableNode | DerivedTableNode;
66
+
67
+ /**
68
+ * Any expression that can appear in ORDER BY / GROUP BY terms.
69
+ */
70
+ export type OrderingTerm = OperandNode | ExpressionNode | AliasRefNode;
71
+
72
+ /**
73
+ * AST node representing an ORDER BY clause
74
+ */
75
+ export interface OrderByNode {
76
+ type: 'OrderBy';
77
+ /** Expression/operand/alias to order by */
78
+ term: OrderingTerm;
79
+ /** Order direction (ASC or DESC) */
80
+ direction: OrderDirection;
81
+ /** Optional nulls ordering (NULLS FIRST/LAST) */
82
+ nulls?: 'FIRST' | 'LAST';
83
+ /** Optional collation */
84
+ collation?: string;
85
+ }
86
+
87
+ /**
88
+ * AST node representing a Common Table Expression (CTE)
89
+ */
90
+ export interface CommonTableExpressionNode {
91
+ type: 'CommonTableExpression';
92
+ /** CTE name */
93
+ name: string;
94
+ /** Optional column names */
95
+ columns?: string[];
96
+ /** CTE query */
97
+ query: SelectQueryNode;
98
+ /** Whether the CTE is recursive */
99
+ recursive: boolean;
100
+ }
101
+
102
+ /**
103
+ * Supported set operation kinds for compound SELECT queries
104
+ */
105
+ export type SetOperationKind = 'UNION' | 'UNION ALL' | 'INTERSECT' | 'EXCEPT';
106
+
107
+ /**
108
+ * AST node representing a set operation (UNION, INTERSECT, etc.)
109
+ */
110
+ export interface SetOperationNode {
111
+ type: 'SetOperation';
112
+ /** Operator to combine queries */
113
+ operator: SetOperationKind;
114
+ /** Right-hand query in the compound expression */
115
+ query: SelectQueryNode;
116
+ }
117
+
118
+ /**
119
+ * AST node representing a complete SELECT query
120
+ */
121
+ export interface SelectQueryNode {
122
+ type: 'SelectQuery';
123
+ /** Optional CTEs (WITH clauses) */
124
+ ctes?: CommonTableExpressionNode[];
125
+ /** FROM clause table (either a Table or a FunctionTable) */
126
+ from: TableSourceNode;
127
+ /** SELECT clause columns */
128
+ columns: (
129
+ ColumnNode |
130
+ FunctionNode |
131
+ ScalarSubqueryNode |
132
+ CaseExpressionNode |
133
+ CastExpressionNode |
134
+ WindowFunctionNode
135
+ )[];
136
+ /** JOIN clauses */
137
+ joins: JoinNode[];
138
+ /** Optional WHERE clause */
139
+ where?: ExpressionNode;
140
+ /** Optional GROUP BY clause */
141
+ groupBy?: OrderingTerm[];
142
+ /** Optional HAVING clause */
143
+ having?: ExpressionNode;
144
+ /** Optional ORDER BY clause */
145
+ orderBy?: OrderByNode[];
146
+ /** Optional LIMIT clause */
147
+ limit?: number;
148
+ /** Optional OFFSET clause */
149
+ offset?: number;
150
+ /** Optional query metadata */
151
+ meta?: Record<string, unknown>;
152
+ /** Optional DISTINCT clause */
153
+ distinct?: ColumnNode[];
154
+ /** Optional set operations chaining this query with others */
155
+ setOps?: SetOperationNode[];
156
+ }
157
+
158
+ export interface InsertValuesSourceNode {
159
+ type: 'InsertValues';
160
+ /** Rows of values for INSERT rows */
161
+ rows: OperandNode[][];
162
+ }
163
+
164
164
  export interface InsertSelectSourceNode {
165
165
  type: 'InsertSelect';
166
166
  /** SELECT query providing rows */
@@ -208,40 +208,40 @@ export interface InsertQueryNode {
208
208
  /** Optional RETURNING clause */
209
209
  returning?: ColumnNode[];
210
210
  }
211
-
212
- export interface UpdateAssignmentNode {
213
- /** Column to update */
214
- column: ColumnNode;
215
- /** Value to set */
216
- value: OperandNode;
217
- }
218
-
219
- export interface UpdateQueryNode {
220
- type: 'UpdateQuery';
221
- /** Table being updated */
222
- table: TableNode;
223
- /** Optional FROM clause for multi-table updates */
224
- from?: TableSourceNode;
225
- /** Optional joins applied to the FROM/USING tables */
226
- joins?: JoinNode[];
227
- /** Assignments for SET clause */
228
- set: UpdateAssignmentNode[];
229
- /** Optional WHERE clause */
230
- where?: ExpressionNode;
231
- /** Optional RETURNING clause */
232
- returning?: ColumnNode[];
233
- }
234
-
235
- export interface DeleteQueryNode {
236
- type: 'DeleteQuery';
237
- /** Table to delete from */
238
- from: TableNode;
239
- /** Optional USING clause for multi-table deletes */
240
- using?: TableSourceNode;
241
- /** Optional joins applied to the USING clause */
242
- joins?: JoinNode[];
243
- /** Optional WHERE clause */
244
- where?: ExpressionNode;
245
- /** Optional RETURNING clause */
246
- returning?: ColumnNode[];
247
- }
211
+
212
+ export interface UpdateAssignmentNode {
213
+ /** Column to update */
214
+ column: ColumnNode;
215
+ /** Value to set */
216
+ value: OperandNode;
217
+ }
218
+
219
+ export interface UpdateQueryNode {
220
+ type: 'UpdateQuery';
221
+ /** Table being updated */
222
+ table: TableNode;
223
+ /** Optional FROM clause for multi-table updates */
224
+ from?: TableSourceNode;
225
+ /** Optional joins applied to the FROM/USING tables */
226
+ joins?: JoinNode[];
227
+ /** Assignments for SET clause */
228
+ set: UpdateAssignmentNode[];
229
+ /** Optional WHERE clause */
230
+ where?: ExpressionNode;
231
+ /** Optional RETURNING clause */
232
+ returning?: ColumnNode[];
233
+ }
234
+
235
+ export interface DeleteQueryNode {
236
+ type: 'DeleteQuery';
237
+ /** Table to delete from */
238
+ from: TableNode;
239
+ /** Optional USING clause for multi-table deletes */
240
+ using?: TableSourceNode;
241
+ /** Optional joins applied to the USING clause */
242
+ joins?: JoinNode[];
243
+ /** Optional WHERE clause */
244
+ where?: ExpressionNode;
245
+ /** Optional RETURNING clause */
246
+ returning?: ColumnNode[];
247
+ }
@@ -93,4 +93,4 @@ export abstract class BaseSchemaDialect implements SchemaDialect {
93
93
  return false;
94
94
  }
95
95
  }
96
-
96
+
@@ -128,4 +128,4 @@ export class MSSqlSchemaDialect extends BaseSchemaDialect {
128
128
  return undefined;
129
129
  }
130
130
  }
131
-
131
+
@@ -117,4 +117,4 @@ export class MySqlSchemaDialect extends BaseSchemaDialect {
117
117
  return [`ALTER TABLE ${this.formatTableName(table)} MODIFY COLUMN ${rendered.sql};`];
118
118
  }
119
119
  }
120
-
120
+
@@ -150,4 +150,4 @@ export class PostgresSchemaDialect extends BaseSchemaDialect {
150
150
  return undefined;
151
151
  }
152
152
  }
153
-
153
+
@@ -1,70 +1,70 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { BaseSchemaDialect } from './base-schema-dialect.js';
3
- import { PostgresSchemaDialect } from './postgres-schema-dialect.js';
4
- import { TableDef } from '../../../schema/table.js';
5
- import { ForeignKeyReference } from '../../../schema/column-types.js';
6
- import { createLiteralFormatter } from '../sql-writing.js';
7
-
8
- class DummySchemaDialect extends BaseSchemaDialect {
9
- readonly name = 'sqlite';
10
- private readonly formatter = createLiteralFormatter({
11
- booleanTrue: '1',
12
- booleanFalse: '0',
13
- });
14
-
15
- get literalFormatter() {
16
- return this.formatter;
17
- }
18
-
19
- quoteIdentifier(id: string): string {
20
- return `"${id}"`;
21
- }
22
-
23
- renderColumnType(): string {
24
- return 'INTEGER';
25
- }
26
-
27
- renderAutoIncrement(): string | undefined {
28
- return undefined;
29
- }
30
-
31
- renderIndex(): string {
32
- return 'CREATE INDEX dummy;';
33
- }
34
- }
35
-
36
- const table: TableDef = {
37
- name: 'child',
38
- columns: {},
39
- relations: {},
40
- };
41
-
42
- const deferrableReference: ForeignKeyReference = {
43
- table: 'parent',
44
- column: 'id',
45
- deferrable: true,
46
- onDelete: 'CASCADE',
47
- onUpdate: 'NO ACTION',
48
- };
49
-
50
- describe('renderReference deferrable handling', () => {
51
- it('base dialect remains agnostic to deferrable flags', () => {
52
- const dialect = new DummySchemaDialect();
53
- const sql = dialect.renderReference(deferrableReference, table);
54
- expect(sql).toContain('REFERENCES "parent"');
55
- expect(sql).not.toContain('DEFERRABLE INITIALLY DEFERRED');
56
- });
57
-
58
- it('Postgres dialect renders the deferrable clause', () => {
59
- const dialect = new PostgresSchemaDialect();
60
- const sql = dialect.renderReference(deferrableReference, table);
61
- expect(sql).toContain('DEFERRABLE INITIALLY DEFERRED');
62
- });
63
-
64
- it('Postgres dialect skips the clause when the flag is missing', () => {
65
- const dialect = new PostgresSchemaDialect();
66
- const sql = dialect.renderReference({ table: 'parent', column: 'id' }, table);
67
- expect(sql).not.toContain('DEFERRABLE INITIALLY DEFERRED');
68
- });
69
- });
70
-
1
+ import { describe, expect, it } from 'vitest';
2
+ import { BaseSchemaDialect } from './base-schema-dialect.js';
3
+ import { PostgresSchemaDialect } from './postgres-schema-dialect.js';
4
+ import { TableDef } from '../../../schema/table.js';
5
+ import { ForeignKeyReference } from '../../../schema/column-types.js';
6
+ import { createLiteralFormatter } from '../sql-writing.js';
7
+
8
+ class DummySchemaDialect extends BaseSchemaDialect {
9
+ readonly name = 'sqlite';
10
+ private readonly formatter = createLiteralFormatter({
11
+ booleanTrue: '1',
12
+ booleanFalse: '0',
13
+ });
14
+
15
+ get literalFormatter() {
16
+ return this.formatter;
17
+ }
18
+
19
+ quoteIdentifier(id: string): string {
20
+ return `"${id}"`;
21
+ }
22
+
23
+ renderColumnType(): string {
24
+ return 'INTEGER';
25
+ }
26
+
27
+ renderAutoIncrement(): string | undefined {
28
+ return undefined;
29
+ }
30
+
31
+ renderIndex(): string {
32
+ return 'CREATE INDEX dummy;';
33
+ }
34
+ }
35
+
36
+ const table: TableDef = {
37
+ name: 'child',
38
+ columns: {},
39
+ relations: {},
40
+ };
41
+
42
+ const deferrableReference: ForeignKeyReference = {
43
+ table: 'parent',
44
+ column: 'id',
45
+ deferrable: true,
46
+ onDelete: 'CASCADE',
47
+ onUpdate: 'NO ACTION',
48
+ };
49
+
50
+ describe('renderReference deferrable handling', () => {
51
+ it('base dialect remains agnostic to deferrable flags', () => {
52
+ const dialect = new DummySchemaDialect();
53
+ const sql = dialect.renderReference(deferrableReference, table);
54
+ expect(sql).toContain('REFERENCES "parent"');
55
+ expect(sql).not.toContain('DEFERRABLE INITIALLY DEFERRED');
56
+ });
57
+
58
+ it('Postgres dialect renders the deferrable clause', () => {
59
+ const dialect = new PostgresSchemaDialect();
60
+ const sql = dialect.renderReference(deferrableReference, table);
61
+ expect(sql).toContain('DEFERRABLE INITIALLY DEFERRED');
62
+ });
63
+
64
+ it('Postgres dialect skips the clause when the flag is missing', () => {
65
+ const dialect = new PostgresSchemaDialect();
66
+ const sql = dialect.renderReference({ table: 'parent', column: 'id' }, table);
67
+ expect(sql).not.toContain('DEFERRABLE INITIALLY DEFERRED');
68
+ });
69
+ });
70
+
@@ -119,4 +119,4 @@ export class SQLiteSchemaDialect extends BaseSchemaDialect {
119
119
  return `SQLite ALTER COLUMN is not supported; rebuild table ${key} to change column ${column.name}.`;
120
120
  }
121
121
  }
122
-
122
+
@@ -1,5 +1,5 @@
1
- /** Re-exports for supported catalog definitions. */
2
- export * from './postgres.js';
3
- export * from './mssql.js';
4
- export * from './mysql.js';
5
- export * from './sqlite.js';
1
+ /** Re-exports for supported catalog definitions. */
2
+ export * from './postgres.js';
3
+ export * from './mssql.js';
4
+ export * from './mysql.js';
5
+ export * from './sqlite.js';