metal-orm 1.1.11 → 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 (182) hide show
  1. package/README.md +758 -769
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/package.json +100 -96
  5. package/scripts/generate-entities/schema.mjs +122 -122
  6. package/scripts/generate-entities/tree-detection.mjs +92 -92
  7. package/scripts/inflection/pt-br.mjs +468 -468
  8. package/scripts/run-eslint.mjs +33 -34
  9. package/scripts/show-sql-seed.sql +102 -0
  10. package/scripts/show-sql.mjs +321 -325
  11. package/src/codegen/naming-strategy.ts +54 -54
  12. package/src/codegen/typescript.ts +482 -482
  13. package/src/core/ast/adapters.ts +1 -1
  14. package/src/core/ast/builders.ts +123 -123
  15. package/src/core/ast/expression-builders.ts +745 -745
  16. package/src/core/ast/expression-nodes.ts +304 -304
  17. package/src/core/ast/expression-visitor.ts +212 -212
  18. package/src/core/ast/expression.ts +20 -20
  19. package/src/core/ast/helpers.ts +14 -14
  20. package/src/core/ast/join.ts +18 -18
  21. package/src/core/ast/query.ts +200 -200
  22. package/src/core/ddl/dialects/base-schema-dialect.ts +1 -1
  23. package/src/core/ddl/dialects/mssql-schema-dialect.ts +1 -1
  24. package/src/core/ddl/dialects/mysql-schema-dialect.ts +1 -1
  25. package/src/core/ddl/dialects/postgres-schema-dialect.ts +1 -1
  26. package/src/core/ddl/dialects/render-reference.test.ts +70 -70
  27. package/src/core/ddl/dialects/sqlite-schema-dialect.ts +1 -1
  28. package/src/core/ddl/introspect/catalogs/index.ts +5 -5
  29. package/src/core/ddl/introspect/catalogs/postgres.ts +146 -146
  30. package/src/core/ddl/introspect/context.ts +15 -15
  31. package/src/core/ddl/introspect/functions/postgres.ts +35 -35
  32. package/src/core/ddl/introspect/registry.ts +40 -40
  33. package/src/core/ddl/introspect/run-select.ts +35 -35
  34. package/src/core/ddl/introspect/utils.ts +56 -56
  35. package/src/core/ddl/naming-strategy.ts +16 -16
  36. package/src/core/ddl/schema-dialect.ts +56 -56
  37. package/src/core/ddl/schema-diff.ts +234 -234
  38. package/src/core/ddl/schema-generator.ts +1 -1
  39. package/src/core/ddl/schema-introspect.ts +25 -25
  40. package/src/core/ddl/sql-writing.ts +171 -171
  41. package/src/core/dialect/abstract.ts +541 -541
  42. package/src/core/dialect/base/cte-compiler.ts +33 -33
  43. package/src/core/dialect/base/function-table-formatter.ts +103 -103
  44. package/src/core/dialect/base/groupby-compiler.ts +21 -21
  45. package/src/core/dialect/base/join-compiler.ts +25 -25
  46. package/src/core/dialect/base/orderby-compiler.ts +35 -35
  47. package/src/core/dialect/base/pagination-strategy.ts +32 -32
  48. package/src/core/dialect/base/returning-strategy.ts +57 -57
  49. package/src/core/dialect/base/sql-dialect.ts +294 -294
  50. package/src/core/dialect/dialect-factory.ts +91 -91
  51. package/src/core/dialect/mssql/functions.ts +120 -120
  52. package/src/core/dialect/mssql/index.ts +317 -317
  53. package/src/core/dialect/mysql/functions.ts +103 -103
  54. package/src/core/dialect/mysql/index.ts +105 -105
  55. package/src/core/dialect/postgres/functions.ts +108 -108
  56. package/src/core/dialect/postgres/index.ts +91 -91
  57. package/src/core/dialect/sqlite/functions.ts +129 -129
  58. package/src/core/dialect/sqlite/index.ts +67 -67
  59. package/src/core/driver/database-driver.ts +19 -19
  60. package/src/core/driver/mssql-driver.ts +23 -23
  61. package/src/core/driver/mysql-driver.ts +23 -23
  62. package/src/core/driver/postgres-driver.ts +23 -23
  63. package/src/core/driver/sqlite-driver.ts +23 -23
  64. package/src/core/execution/db-executor.ts +92 -92
  65. package/src/core/execution/executors/better-sqlite3-executor.ts +90 -90
  66. package/src/core/execution/executors/mssql-executor.ts +184 -184
  67. package/src/core/execution/executors/mysql-executor.ts +88 -88
  68. package/src/core/execution/executors/postgres-executor.ts +26 -26
  69. package/src/core/execution/executors/sqlite-executor.ts +42 -42
  70. package/src/core/execution/pooling/pool-types.ts +30 -30
  71. package/src/core/execution/pooling/pool.ts +275 -275
  72. package/src/core/functions/array.ts +35 -35
  73. package/src/core/functions/control-flow.ts +79 -79
  74. package/src/core/functions/datetime.ts +237 -237
  75. package/src/core/functions/json.ts +70 -70
  76. package/src/core/functions/numeric.ts +297 -297
  77. package/src/core/functions/text.ts +334 -334
  78. package/src/core/functions/types.ts +33 -33
  79. package/src/core/hydration/types.ts +51 -51
  80. package/src/core/sql/sql-operator-config.ts +39 -39
  81. package/src/core/sql/sql.ts +152 -152
  82. package/src/decorators/column-decorator.ts +87 -87
  83. package/src/decorators/decorator-metadata.ts +143 -143
  84. package/src/decorators/entity.ts +93 -93
  85. package/src/decorators/index.ts +39 -39
  86. package/src/decorators/relations.ts +231 -231
  87. package/src/decorators/transformers/built-in/string-transformers.ts +231 -231
  88. package/src/decorators/transformers/transformer-decorators.ts +134 -134
  89. package/src/decorators/transformers/transformer-executor.ts +171 -171
  90. package/src/decorators/transformers/transformer-metadata.ts +73 -73
  91. package/src/decorators/validators/built-in/br-cep-validator.ts +55 -55
  92. package/src/decorators/validators/built-in/br-cnpj-validator.ts +105 -105
  93. package/src/decorators/validators/built-in/br-cpf-validator.ts +103 -103
  94. package/src/decorators/validators/country-validator-registry.ts +64 -64
  95. package/src/decorators/validators/country-validators-decorators.ts +203 -203
  96. package/src/decorators/validators/country-validators.ts +105 -105
  97. package/src/decorators/validators/validator-metadata.ts +59 -59
  98. package/src/dto/dto-types.ts +226 -226
  99. package/src/dto/filter-types.ts +141 -141
  100. package/src/dto/index.ts +95 -95
  101. package/src/dto/openapi/generators/base.ts +29 -29
  102. package/src/dto/openapi/generators/column.ts +37 -37
  103. package/src/dto/openapi/generators/dto.ts +91 -91
  104. package/src/dto/openapi/generators/filter.ts +75 -75
  105. package/src/dto/openapi/generators/nested-dto.ts +618 -618
  106. package/src/dto/openapi/generators/pagination.ts +111 -111
  107. package/src/dto/openapi/generators/relation-filter.ts +228 -228
  108. package/src/dto/openapi/index.ts +12 -12
  109. package/src/dto/openapi/types.ts +101 -101
  110. package/src/dto/openapi/utilities.ts +95 -95
  111. package/src/dto/pagination-utils.ts +150 -150
  112. package/src/dto/transform.ts +197 -197
  113. package/src/index.ts +86 -86
  114. package/src/orm/als.ts +58 -58
  115. package/src/orm/domain-event-bus.ts +119 -119
  116. package/src/orm/entity-context.ts +86 -86
  117. package/src/orm/entity-materializer.ts +159 -159
  118. package/src/orm/entity-meta.ts +97 -97
  119. package/src/orm/entity-registry.ts +39 -39
  120. package/src/orm/entity-relation-cache.ts +39 -39
  121. package/src/orm/execute.ts +194 -194
  122. package/src/orm/execution-context.ts +18 -18
  123. package/src/orm/hydration-context.ts +26 -26
  124. package/src/orm/hydration.ts +112 -112
  125. package/src/orm/identity-map.ts +61 -61
  126. package/src/orm/interceptor-pipeline.ts +16 -16
  127. package/src/orm/lazy-batch/belongs-to-many.ts +119 -119
  128. package/src/orm/lazy-batch/belongs-to.ts +108 -108
  129. package/src/orm/lazy-batch/has-many.ts +69 -69
  130. package/src/orm/lazy-batch/has-one.ts +68 -68
  131. package/src/orm/lazy-batch/shared.ts +125 -125
  132. package/src/orm/orm-session.ts +620 -620
  133. package/src/orm/orm.ts +34 -34
  134. package/src/orm/pooled-executor-factory.ts +121 -121
  135. package/src/orm/query-logger.ts +40 -40
  136. package/src/orm/relation-change-processor.ts +420 -420
  137. package/src/orm/relations/belongs-to.ts +143 -143
  138. package/src/orm/relations/has-many.ts +204 -204
  139. package/src/orm/relations/has-one.ts +174 -174
  140. package/src/orm/relations/many-to-many.ts +288 -288
  141. package/src/orm/relations/morph-many.ts +156 -156
  142. package/src/orm/relations/morph-one.ts +151 -151
  143. package/src/orm/relations/morph-to.ts +162 -162
  144. package/src/orm/runtime-types.ts +92 -92
  145. package/src/orm/save-graph.ts +561 -561
  146. package/src/orm/transaction-runner.ts +24 -24
  147. package/src/orm/unit-of-work.ts +426 -426
  148. package/src/query/index.ts +69 -69
  149. package/src/query/target.ts +46 -46
  150. package/src/query-builder/column-selector.ts +81 -81
  151. package/src/query-builder/delete.ts +141 -141
  152. package/src/query-builder/insert-query-state.ts +149 -149
  153. package/src/query-builder/insert.ts +117 -117
  154. package/src/query-builder/query-ast-service.ts +287 -287
  155. package/src/query-builder/query-resolution.ts +78 -78
  156. package/src/query-builder/raw-column-parser.ts +38 -38
  157. package/src/query-builder/relation-filter-utils.ts +153 -153
  158. package/src/query-builder/relation-join-planner.ts +10 -10
  159. package/src/query-builder/relation-manager.ts +87 -87
  160. package/src/query-builder/relation-projection-helper.ts +102 -102
  161. package/src/query-builder/relation-types.ts +9 -9
  162. package/src/query-builder/relation-utils.ts +15 -15
  163. package/src/query-builder/select/cte-facet.ts +40 -40
  164. package/src/query-builder/select/from-facet.ts +80 -80
  165. package/src/query-builder/select/join-facet.ts +62 -62
  166. package/src/query-builder/select/predicate-facet.ts +104 -104
  167. package/src/query-builder/select/projection-facet.ts +70 -70
  168. package/src/query-builder/select/relation-facet.ts +81 -81
  169. package/src/query-builder/select/setop-facet.ts +36 -36
  170. package/src/query-builder/select-helpers.ts +1 -1
  171. package/src/query-builder/select-query-builder-deps.ts +130 -130
  172. package/src/query-builder/select-query-state.ts +207 -207
  173. package/src/query-builder/update.ts +151 -151
  174. package/src/schema/column-types.ts +322 -322
  175. package/src/schema/table-guards.ts +37 -37
  176. package/src/schema/table.ts +281 -281
  177. package/src/tree/index.ts +13 -13
  178. package/src/tree/nested-set-strategy.ts +545 -545
  179. package/src/tree/tree-decorator.ts +397 -397
  180. package/src/tree/tree-manager.ts +754 -754
  181. package/src/tree/tree-query.ts +427 -427
  182. 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';