rawsql-ts 0.9.0-beta → 0.10.1-beta
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.
- package/README.md +90 -7
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/models/SqlPrintToken.js +2 -0
- package/dist/esm/models/SqlPrintToken.js.map +1 -1
- package/dist/esm/models/ValueComponent.js +13 -12
- package/dist/esm/models/ValueComponent.js.map +1 -1
- package/dist/esm/parsers/SqlPrintTokenParser.js +24 -6
- package/dist/esm/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/transformers/PostgresArrayEntityCteBuilder.js +231 -0
- package/dist/esm/transformers/PostgresArrayEntityCteBuilder.js.map +1 -0
- package/dist/esm/transformers/PostgresJsonQueryBuilder.js +226 -0
- package/dist/esm/transformers/PostgresJsonQueryBuilder.js.map +1 -0
- package/dist/esm/transformers/PostgresObjectEntityCteBuilder.js +283 -0
- package/dist/esm/transformers/PostgresObjectEntityCteBuilder.js.map +1 -0
- package/dist/esm/transformers/SqlPrinter.js +9 -3
- package/dist/esm/transformers/SqlPrinter.js.map +1 -1
- package/dist/esm/types/index.d.ts +2 -0
- package/dist/esm/types/models/SqlPrintToken.d.ts +2 -0
- package/dist/esm/types/models/ValueComponent.d.ts +2 -2
- package/dist/esm/types/transformers/PostgresArrayEntityCteBuilder.d.ts +97 -0
- package/dist/esm/types/transformers/PostgresJsonQueryBuilder.d.ts +86 -0
- package/dist/esm/types/transformers/PostgresObjectEntityCteBuilder.d.ts +140 -0
- package/dist/esm/types/utils/SchemaManager.d.ts +132 -0
- package/dist/esm/utils/SchemaManager.js +194 -0
- package/dist/esm/utils/SchemaManager.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/models/SqlPrintToken.d.ts +2 -0
- package/dist/models/SqlPrintToken.js +2 -0
- package/dist/models/SqlPrintToken.js.map +1 -1
- package/dist/models/ValueComponent.d.ts +2 -2
- package/dist/models/ValueComponent.js +13 -12
- package/dist/models/ValueComponent.js.map +1 -1
- package/dist/parsers/SelectQueryParser.js +3 -14
- package/dist/parsers/SelectQueryParser.js.map +1 -1
- package/dist/parsers/SqlPrintTokenParser.js +25 -7
- package/dist/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/transformers/PostgresArrayEntityCteBuilder.d.ts +97 -0
- package/dist/transformers/PostgresArrayEntityCteBuilder.js +235 -0
- package/dist/transformers/PostgresArrayEntityCteBuilder.js.map +1 -0
- package/dist/transformers/PostgresJsonQueryBuilder.d.ts +86 -0
- package/dist/transformers/PostgresJsonQueryBuilder.js +230 -0
- package/dist/transformers/PostgresJsonQueryBuilder.js.map +1 -0
- package/dist/transformers/PostgresObjectEntityCteBuilder.d.ts +140 -0
- package/dist/transformers/PostgresObjectEntityCteBuilder.js +287 -0
- package/dist/transformers/PostgresObjectEntityCteBuilder.js.map +1 -0
- package/dist/transformers/SqlFormatter.js +6 -1
- package/dist/transformers/SqlFormatter.js.map +1 -1
- package/dist/transformers/SqlPrinter.js +9 -3
- package/dist/transformers/SqlPrinter.js.map +1 -1
- package/dist/utils/SchemaManager.d.ts +132 -0
- package/dist/utils/SchemaManager.js +201 -0
- package/dist/utils/SchemaManager.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
@@ -24,6 +24,7 @@ It is designed for extensibility and advanced SQL analysis, with initial focus o
|
|
24
24
|
- Rich utilities for SQL structure transformation and analysis
|
25
25
|
- Advanced SQL formatting capabilities, including multi-line formatting and customizable styles
|
26
26
|
- Dynamic SQL parameter injection for building flexible search queries with `SqlParamInjector`
|
27
|
+
- Type-safe schema management and JSON mapping conversion with full TypeScript support
|
27
28
|
- Static query validation and regression testing against your database schema with `SqlSchemaValidator`, enabling early error detection and robust unit tests for schema changes.
|
28
29
|
|
29
30
|
',borderColor:'rgba(54,162,235,1)',borderWidth:1},{label:'node-sql-parser',data:[0.210,0.223,0.420,0.871],backgroundColor:'rgba(255,206,86,0.8)',borderColor:'rgba(255,206,86,1)',borderWidth:1},{label:'sql-formatter',data:[0.228,0.547,1.057,1.906],backgroundColor:'rgba(255,99,132,0.8)',borderColor:'rgba(255,99,132,1)',borderWidth:1}]},options:{plugins:{legend:{labels:{color:'black'}}},scales:{x:{ticks:{color:'black'}},y:{ticks:{color:'black'}}},backgroundColor:'white'}}&width=700&height=450)
|
@@ -104,7 +105,7 @@ console.log(params);
|
|
104
105
|
|
105
106
|
---
|
106
107
|
|
107
|
-
##
|
108
|
+
## SelectQueryParser Features
|
108
109
|
|
109
110
|
rawsql-ts provides robust parsers for `SELECT`, `INSERT`, and `UPDATE` statements, automatically handling SQL comments and providing detailed error messages. By converting SQL into a generic Abstract Syntax Tree (AST), it enables a wide variety of transformation processes.
|
110
111
|
|
@@ -116,11 +117,11 @@ const query = SelectQueryParser.parse(sql);
|
|
116
117
|
// query object now holds the AST of the SQL
|
117
118
|
```
|
118
119
|
|
119
|
-
For more details on `SelectQueryParser`, see the [SelectQueryParser Usage Guide](./docs/class-SelectQueryParser-usage-guide.md).
|
120
|
+
For more details on `SelectQueryParser`, see the [SelectQueryParser Usage Guide](./docs/usage-guides/class-SelectQueryParser-usage-guide.md).
|
120
121
|
|
121
122
|
---
|
122
123
|
|
123
|
-
##
|
124
|
+
## SqlFormatter Features
|
124
125
|
|
125
126
|
The `SqlFormatter` class is the recommended way to format SQL queries, offering advanced capabilities like indentation, keyword casing, and multi-line formatting.
|
126
127
|
It also allows for detailed style customization. For example, you can define your own formatting rules:
|
@@ -162,7 +163,7 @@ order by
|
|
162
163
|
*/
|
163
164
|
```
|
164
165
|
|
165
|
-
For more details, see the [SqlFormatter Usage Guide](./docs/class-SqlFormatter-usage-guide.md).
|
166
|
+
For more details, see the [SqlFormatter Usage Guide](./docs/usage-guides/class-SqlFormatter-usage-guide.md).
|
166
167
|
|
167
168
|
---
|
168
169
|
|
@@ -194,7 +195,54 @@ console.log(params);
|
|
194
195
|
// Output: { user_id: 42, user_name: 'Alice' }
|
195
196
|
```
|
196
197
|
|
197
|
-
For more details, see the [SqlParamInjector Usage Guide](./docs/class-SqlParamInjector-usage-guide.md).
|
198
|
+
For more details, see the [SqlParamInjector Usage Guide](./docs/usage-guides/class-SqlParamInjector-usage-guide.md).
|
199
|
+
|
200
|
+
---
|
201
|
+
|
202
|
+
## PostgresJsonQueryBuilder Features
|
203
|
+
|
204
|
+
The `PostgresJsonQueryBuilder` class transforms relational SQL queries into PostgreSQL JSON queries that return hierarchical JSON structures. It automatically handles complex relationships between entities and generates optimized Common Table Expressions (CTEs) for efficient JSON aggregation, making it perfect for building APIs, reports, and data exports.
|
205
|
+
|
206
|
+
Key benefits include:
|
207
|
+
- **Hierarchical JSON Generation**: Transforms flat relational data into nested JSON objects and arrays
|
208
|
+
- **Automatic CTE Management**: Generates optimized CTEs with proper dependency ordering
|
209
|
+
- **Flexible Relationship Types**: Supports both object (0..1) and array (1..N) relationships
|
210
|
+
- **NULL Handling**: Properly represents missing relationships as NULL instead of empty objects
|
211
|
+
- **Performance Optimized**: Uses depth-based processing and JSONB for optimal PostgreSQL performance
|
212
|
+
- **Zero Manual Serialization**: Eliminates the need for manual object mapping and JSON construction
|
213
|
+
|
214
|
+
```typescript
|
215
|
+
import { SelectQueryParser, PostgresJsonQueryBuilder } from 'rawsql-ts';
|
216
|
+
|
217
|
+
// Parse your base SQL query
|
218
|
+
const baseQuery = SelectQueryParser.parse(`
|
219
|
+
SELECT o.order_id, o.order_date, c.customer_name, i.product_name, i.quantity
|
220
|
+
FROM orders o
|
221
|
+
LEFT JOIN customers c ON o.customer_id = c.customer_id
|
222
|
+
LEFT JOIN order_items i ON o.order_id = i.order_id
|
223
|
+
`) as SimpleSelectQuery;
|
224
|
+
|
225
|
+
// Define JSON mapping configuration
|
226
|
+
const mapping = {
|
227
|
+
rootName: "order",
|
228
|
+
rootEntity: { id: "order", name: "Order", columns: { "id": "order_id", "date": "order_date" }},
|
229
|
+
nestedEntities: [
|
230
|
+
{ id: "customer", parentId: "order", propertyName: "customer", relationshipType: "object",
|
231
|
+
columns: { "name": "customer_name" }},
|
232
|
+
{ id: "items", parentId: "order", propertyName: "items", relationshipType: "array",
|
233
|
+
columns: { "product": "product_name", "qty": "quantity" }}
|
234
|
+
],
|
235
|
+
useJsonb: true
|
236
|
+
};
|
237
|
+
|
238
|
+
// Transform to JSON query
|
239
|
+
const builder = new PostgresJsonQueryBuilder();
|
240
|
+
const jsonQuery = builder.buildJson(baseQuery, mapping);
|
241
|
+
// Returns optimized PostgreSQL query with CTEs that produces:
|
242
|
+
// [{ "id": 1, "date": "2024-01-15", "customer": {"name": "John"}, "items": [{"product": "Widget", "qty": 2}] }]
|
243
|
+
```
|
244
|
+
|
245
|
+
For more details, see the [PostgresJsonQueryBuilder Usage Guide](./docs/usage-guides/class-PostgresJsonQueryBuilder-usage-guide.md).
|
198
246
|
|
199
247
|
---
|
200
248
|
|
@@ -246,7 +294,7 @@ try {
|
|
246
294
|
}
|
247
295
|
```
|
248
296
|
|
249
|
-
For more details on `SqlSchemaValidator`, see the [SqlSchemaValidator Usage Guide](./docs/class-SqlSchemaValidator-usage-guide.md).
|
297
|
+
For more details on `SqlSchemaValidator`, see the [SqlSchemaValidator Usage Guide](./docs/usage-guides/class-SqlSchemaValidator-usage-guide.md).
|
250
298
|
|
251
299
|
---
|
252
300
|
|
@@ -282,7 +330,42 @@ console.log(updateSql);
|
|
282
330
|
// update "users" set "email" = "d"."email", "last_login" = "d"."last_login" from (SELECT id, new_email AS email, last_login FROM user_updates_source WHERE needs_update = TRUE) as "d" where "users"."id" = "d"."id"
|
283
331
|
```
|
284
332
|
|
285
|
-
For more details on `QueryBuilder`, see the [QueryBuilder Usage Guide](./docs/class-QueryBuilder-usage-guide.md).
|
333
|
+
For more details on `QueryBuilder`, see the [QueryBuilder Usage Guide](./docs/usage-guides/class-QueryBuilder-usage-guide.md).
|
334
|
+
|
335
|
+
---
|
336
|
+
|
337
|
+
## SchemaManager Features
|
338
|
+
|
339
|
+
The `SchemaManager` class provides unified schema definition and type-safe conversion to various formats, eliminating code duplication for rawsql-ts. It serves as a central hub for managing database schema definitions and converting them to formats required by different components like `SqlParamInjector` and `PostgresJsonQueryBuilder`.
|
340
|
+
|
341
|
+
Key benefits include:
|
342
|
+
- **Unified Schema Definition**: Define your database schema once and generate JSON mappings, table column resolvers, and other formats for multiple rawsql-ts components
|
343
|
+
- **Type-Safe JSON Mapping**: Fully typed conversion without using `any` types
|
344
|
+
- **Schema Validation**: Built-in validation ensures schema consistency and integrity
|
345
|
+
- **Relationship Management**: Supports complex table relationships with object and array outputs
|
346
|
+
|
347
|
+
```typescript
|
348
|
+
import { SchemaManager, createSchemaManager } from 'rawsql-ts';
|
349
|
+
|
350
|
+
// Define your database schema once
|
351
|
+
const schemas = {
|
352
|
+
users: {
|
353
|
+
name: 'users',
|
354
|
+
columns: {
|
355
|
+
user_id: { name: 'user_id', isPrimaryKey: true },
|
356
|
+
user_name: { name: 'user_name' },
|
357
|
+
email: { name: 'email' }
|
358
|
+
}
|
359
|
+
}
|
360
|
+
};
|
361
|
+
|
362
|
+
// Create SchemaManager and use with other components
|
363
|
+
const schemaManager = createSchemaManager(schemas);
|
364
|
+
const tableColumnResolver = schemaManager.createTableColumnResolver();
|
365
|
+
const injector = new SqlParamInjector({ tableColumnResolver });
|
366
|
+
```
|
367
|
+
|
368
|
+
For more details on `SchemaManager`, see the [SchemaManager Usage Guide](./docs/usage-guides/class-SchemaManager-usage-guide.md).
|
286
369
|
|
287
370
|
---
|
288
371
|
|
package/dist/esm/index.js
CHANGED
@@ -9,6 +9,7 @@ export * from './transformers/CTECollector';
|
|
9
9
|
export * from './transformers/CTENormalizer';
|
10
10
|
export * from './transformers/Formatter';
|
11
11
|
export * from './transformers/SqlFormatter';
|
12
|
+
export * from './transformers/PostgresJsonQueryBuilder';
|
12
13
|
export * from './transformers/QueryBuilder'; // old name:QueryConverter
|
13
14
|
export * from './transformers/SelectValueCollector';
|
14
15
|
export * from './transformers/SelectableColumnCollector';
|
@@ -18,5 +19,6 @@ export * from './transformers/UpstreamSelectQueryFinder';
|
|
18
19
|
export * from './transformers/SchemaCollector';
|
19
20
|
export * from './transformers/SqlParamInjector';
|
20
21
|
export * from './utils/SqlSchemaValidator';
|
22
|
+
export * from './utils/SchemaManager';
|
21
23
|
// Add more exports here if you want to expose additional public API
|
22
24
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AAErC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC,CAAC,0BAA0B;AACvE,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAEhD,cAAc,4BAA4B,CAAC;AAC3C,oEAAoE"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAE5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AAErC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yCAAyC,CAAC;AACxD,cAAc,6BAA6B,CAAC,CAAC,0BAA0B;AACvE,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,0CAA0C,CAAC;AACzD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAEhD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,oEAAoE"}
|
@@ -30,6 +30,8 @@ export var SqlPrintTokenContainerType;
|
|
30
30
|
SqlPrintTokenContainerType["SwitchCaseArgument"] = "SwitchCaseArgument";
|
31
31
|
SqlPrintTokenContainerType["ElseClause"] = "ElseClause";
|
32
32
|
SqlPrintTokenContainerType["CaseKeyValuePair"] = "CaseKeyValuePair";
|
33
|
+
SqlPrintTokenContainerType["CaseThenValue"] = "CaseThenValue";
|
34
|
+
SqlPrintTokenContainerType["CaseElseValue"] = "CaseElseValue";
|
33
35
|
SqlPrintTokenContainerType["ParenExpression"] = "ParenExpression";
|
34
36
|
SqlPrintTokenContainerType["CastExpression"] = "CastExpression";
|
35
37
|
SqlPrintTokenContainerType["CaseExpression"] = "CaseExpression";
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SqlPrintToken.js","sourceRoot":"","sources":["../../../src/models/SqlPrintToken.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,iBAaX;AAbD,WAAY,iBAAiB;IACzB,mEAAa,CAAA;IACb,+DAAO,CAAA;IACP,2DAAK,CAAA;IACL,2DAAK,CAAA;IACL,uEAAW,CAAA;IACX,iEAAQ,CAAA;IACR,+DAAO,CAAA;IACP,mEAAS,CAAA;IACT,uDAAG,CAAA;IACH,yDAAI,CAAA;IACJ,4DAAK,CAAA;IACL,kFAAgB,CAAA;AACpB,CAAC,EAbW,iBAAiB,KAAjB,iBAAiB,QAa5B;AAED,2DAA2D;AAC3D,MAAM,CAAN,IAAY,
|
1
|
+
{"version":3,"file":"SqlPrintToken.js","sourceRoot":"","sources":["../../../src/models/SqlPrintToken.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,iBAaX;AAbD,WAAY,iBAAiB;IACzB,mEAAa,CAAA;IACb,+DAAO,CAAA;IACP,2DAAK,CAAA;IACL,2DAAK,CAAA;IACL,uEAAW,CAAA;IACX,iEAAQ,CAAA;IACR,+DAAO,CAAA;IACP,mEAAS,CAAA;IACT,uDAAG,CAAA;IACH,yDAAI,CAAA;IACJ,4DAAK,CAAA;IACL,kFAAgB,CAAA;AACpB,CAAC,EAbW,iBAAiB,KAAjB,iBAAiB,QAa5B;AAED,2DAA2D;AAC3D,MAAM,CAAN,IAAY,0BAkEX;AAlED,WAAY,0BAA0B;IAClC,iEAAmC,CAAA;IACnC,2DAA6B,CAAA;IAC7B,mEAAqC,CAAA;IACrC,yDAA2B,CAAA;IAC3B,qFAAuD,CAAA;IACvD,uCAAS,CAAA;IACT,qDAAuB,CAAA;IACvB,yDAA2B,CAAA;IAC3B,2DAA6B,CAAA;IAC7B,iEAAmC,CAAA;IACnC,mEAAqC,CAAA;IACrC,uEAAyC,CAAA;IACzC,uDAAyB,CAAA;IACzB,mEAAqC,CAAA;IACrC,6DAA+B,CAAA;IAC/B,6DAA+B,CAAA;IAC/B,iEAAmC,CAAA;IACnC,+DAAiC,CAAA;IACjC,+DAAiC,CAAA;IACjC,iEAAmC,CAAA;IACnC,qEAAuC,CAAA;IACvC,qDAAuB,CAAA;IACvB,iEAAmC,CAAA;IACnC,6EAA+C,CAAA;IAC/C,uDAAyB,CAAA;IACzB,2DAA6B,CAAA;IAC7B,uDAAyB,CAAA;IACzB,mEAAqC,CAAA;IACrC,uDAAyB,CAAA;IACzB,uDAAyB,CAAA;IACzB,2DAA6B,CAAA;IAC7B,iEAAmC,CAAA;IACnC,+DAAiC,CAAA;IACjC,6EAA+C,CAAA;IAC/C,qDAAuB,CAAA;IACvB,6DAA+B,CAAA;IAC/B,yDAA2B,CAAA;IAC3B,qEAAuC,CAAA;IACvC,6DAA+B,CAAA;IAC/B,6DAA+B,CAAA;IAC/B,2DAA6B,CAAA;IAC7B,+DAAiC,CAAA;IACjC,qEAAuC,CAAA;IACvC,qEAAuC,CAAA;IACvC,yDAA2B,CAAA;IAC3B,2DAA6B,CAAA;IAC7B,qDAAuB,CAAA;IACvB,2DAA6B,CAAA;IAC7B,qFAAuD,CAAA;IACvD,+CAAiB,CAAA;IACjB,yDAA2B,CAAA;IAC3B,uDAAyB,CAAA;IACzB,yDAA2B,CAAA;IAC3B,iEAAmC,CAAA;IACnC,+EAAiD,CAAA;IACjD,mFAAqD,CAAA;IACrD,yDAA2B,CAAA;IAC3B,iEAAmC,CAAA;IACnC,yDAA2B,CAAA;IAC3B,yDAA2B,CAAA;IAC3B,2DAA6B,CAAA;IAC7B,iEAAmC,CAAA;IACnC,6DAA+B,CAAA;IAC/B,mEAAqC,CAAA;IACrC,qBAAqB;AACzB,CAAC,EAlEW,0BAA0B,KAA1B,0BAA0B,QAkErC;AAED,MAAM,OAAO,aAAa;IAyBtB,YAAY,IAAuB,EAAE,OAAe,EAAE,EAAE,gBAA4C,0BAA0B,CAAC,IAAI;QALnI;;WAEG;QACH,gBAAW,GAAoB,EAAE,CAAC;QAG9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;CACJ"}
|
@@ -34,15 +34,8 @@ export class ColumnReference extends SqlComponent {
|
|
34
34
|
}
|
35
35
|
constructor(namespaces, column) {
|
36
36
|
super();
|
37
|
-
let nsArr;
|
38
|
-
if (typeof namespaces === "string") {
|
39
|
-
nsArr = [namespaces];
|
40
|
-
}
|
41
|
-
else {
|
42
|
-
nsArr = namespaces;
|
43
|
-
}
|
44
37
|
const col = typeof column === "string" ? new IdentifierString(column) : column;
|
45
|
-
this.qualifiedName = new QualifiedName(
|
38
|
+
this.qualifiedName = new QualifiedName(toIdentifierStringArray(namespaces), col);
|
46
39
|
}
|
47
40
|
toString() {
|
48
41
|
return this.qualifiedName.toString();
|
@@ -278,14 +271,22 @@ TupleExpression.kind = Symbol("TupleExpression");
|
|
278
271
|
function toIdentifierStringArray(input) {
|
279
272
|
if (input == null)
|
280
273
|
return null;
|
281
|
-
if (typeof input === "string")
|
282
|
-
|
274
|
+
if (typeof input === "string") {
|
275
|
+
// Empty string should be treated as null
|
276
|
+
return input.trim() === "" ? null : [new IdentifierString(input)];
|
277
|
+
}
|
283
278
|
if (Array.isArray(input)) {
|
279
|
+
if (input.length === 0)
|
280
|
+
return null;
|
284
281
|
if (typeof input[0] === "string") {
|
285
|
-
|
282
|
+
// Filter out empty strings from string array
|
283
|
+
const filteredStrings = input.filter(ns => ns.trim() !== "");
|
284
|
+
return filteredStrings.length === 0 ? null : filteredStrings.map(ns => new IdentifierString(ns));
|
286
285
|
}
|
287
286
|
else {
|
288
|
-
|
287
|
+
// Filter out empty IdentifierStrings from IdentifierString array
|
288
|
+
const filteredIdentifiers = input.filter(ns => ns.name.trim() !== "");
|
289
|
+
return filteredIdentifiers.length === 0 ? null : filteredIdentifiers;
|
289
290
|
}
|
290
291
|
}
|
291
292
|
return null;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ValueComponent.js","sourceRoot":"","sources":["../../../src/models/ValueComponent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAuB9C,MAAM,OAAO,WAAY,SAAQ,YAAY;IAGzC,YAAY,WAAwB;QAChC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;;AALM,gBAAI,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAQxC,MAAM,OAAO,SAAU,SAAQ,YAAY;IAGvC,YAAY,MAAwB;QAChC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;;AALM,cAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAQtC,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC7C;;OAEG;IACH,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;IACzC,CAAC;IACD;;OAEG;IACH,IAAI,MAAM;QACN,0EAA0E;QAC1E,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,YAAY,gBAAgB,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QACnC,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;
|
1
|
+
{"version":3,"file":"ValueComponent.js","sourceRoot":"","sources":["../../../src/models/ValueComponent.ts"],"names":[],"mappings":"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"}
|
@@ -283,6 +283,8 @@ export class SqlPrintTokenParser {
|
|
283
283
|
return token;
|
284
284
|
}
|
285
285
|
parse(arg) {
|
286
|
+
// reset parameter index before parsing
|
287
|
+
this.index = 1;
|
286
288
|
const token = this.visit(arg);
|
287
289
|
const paramsRaw = ParameterCollector.collect(arg).sort((a, b) => { var _a, _b; return ((_a = a.index) !== null && _a !== void 0 ? _a : 0) - ((_b = b.index) !== null && _b !== void 0 ? _b : 0); });
|
288
290
|
const style = this.parameterDecorator.style;
|
@@ -399,10 +401,13 @@ export class SqlPrintTokenParser {
|
|
399
401
|
}
|
400
402
|
visitSwitchCaseArgument(arg) {
|
401
403
|
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.SwitchCaseArgument);
|
404
|
+
// Add each WHEN/THEN clause
|
402
405
|
for (const kv of arg.cases) {
|
406
|
+
// Create a new line for each WHEN clause
|
403
407
|
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
404
408
|
token.innerTokens.push(kv.accept(this));
|
405
409
|
}
|
410
|
+
// Add ELSE clause if present
|
406
411
|
if (arg.elseValue) {
|
407
412
|
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
408
413
|
token.innerTokens.push(this.createElseToken(arg.elseValue));
|
@@ -411,21 +416,28 @@ export class SqlPrintTokenParser {
|
|
411
416
|
}
|
412
417
|
createElseToken(elseValue) {
|
413
418
|
// Creates a token for the ELSE clause in a CASE expression.
|
414
|
-
const elseToken = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ElseClause);
|
419
|
+
const elseToken = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.ElseClause); // Add the ELSE keyword
|
415
420
|
elseToken.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'else'));
|
421
|
+
// Create a container for the ELSE value to enable proper indentation
|
416
422
|
elseToken.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
417
|
-
|
423
|
+
const elseValueContainer = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.CaseElseValue);
|
424
|
+
elseValueContainer.innerTokens.push(this.visit(elseValue));
|
425
|
+
elseToken.innerTokens.push(elseValueContainer);
|
418
426
|
return elseToken;
|
419
427
|
}
|
420
428
|
visitCaseKeyValuePair(arg) {
|
421
429
|
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.CaseKeyValuePair);
|
430
|
+
// Create WHEN clause
|
422
431
|
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'when'));
|
423
432
|
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
424
|
-
token.innerTokens.push(this.visit(arg.key));
|
433
|
+
token.innerTokens.push(this.visit(arg.key)); // Create THEN clause
|
425
434
|
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
426
435
|
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'then'));
|
436
|
+
// Create a container for the THEN value to enable proper indentation
|
427
437
|
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
428
|
-
|
438
|
+
const thenValueContainer = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.CaseThenValue);
|
439
|
+
thenValueContainer.innerTokens.push(this.visit(arg.value));
|
440
|
+
token.innerTokens.push(thenValueContainer);
|
429
441
|
return token;
|
430
442
|
}
|
431
443
|
visitRawString(arg) {
|
@@ -454,12 +466,16 @@ export class SqlPrintTokenParser {
|
|
454
466
|
}
|
455
467
|
visitCaseExpression(arg) {
|
456
468
|
const token = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.CaseExpression);
|
469
|
+
// Add the CASE keyword
|
457
470
|
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'case'));
|
471
|
+
// Add the condition if exists
|
458
472
|
if (arg.condition) {
|
459
473
|
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
460
474
|
token.innerTokens.push(this.visit(arg.condition));
|
461
475
|
}
|
476
|
+
// Add the WHEN/THEN pairs and ELSE
|
462
477
|
token.innerTokens.push(this.visit(arg.switchCase));
|
478
|
+
// Add the END keyword
|
463
479
|
token.innerTokens.push(SqlPrintTokenParser.SPACE_TOKEN);
|
464
480
|
token.innerTokens.push(new SqlPrintToken(SqlPrintTokenType.keyword, 'end'));
|
465
481
|
return token;
|
@@ -941,9 +957,11 @@ export class SqlPrintTokenParser {
|
|
941
957
|
return token;
|
942
958
|
}
|
943
959
|
visitInlineQuery(arg) {
|
944
|
-
const token = new SqlPrintToken(SqlPrintTokenType.container, ''
|
960
|
+
const token = new SqlPrintToken(SqlPrintTokenType.container, '');
|
945
961
|
token.innerTokens.push(SqlPrintTokenParser.PAREN_OPEN_TOKEN);
|
946
|
-
|
962
|
+
const queryToken = new SqlPrintToken(SqlPrintTokenType.container, '', SqlPrintTokenContainerType.InlineQuery);
|
963
|
+
queryToken.innerTokens.push(arg.selectQuery.accept(this));
|
964
|
+
token.innerTokens.push(queryToken);
|
947
965
|
token.innerTokens.push(SqlPrintTokenParser.PAREN_CLOSE_TOKEN);
|
948
966
|
return token;
|
949
967
|
}
|