rawsql-ts 0.11.18-beta → 0.11.20-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 +62 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +25 -25
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/src/index.d.ts +3 -0
- package/dist/esm/src/index.js +3 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/transformers/CTERenamer.d.ts +144 -0
- package/dist/esm/src/transformers/CTERenamer.js +342 -0
- package/dist/esm/src/transformers/CTERenamer.js.map +1 -0
- package/dist/esm/src/transformers/ColumnReferenceCollector.d.ts +162 -0
- package/dist/esm/src/transformers/ColumnReferenceCollector.js +464 -0
- package/dist/esm/src/transformers/ColumnReferenceCollector.js.map +1 -0
- package/dist/esm/src/transformers/SelectableColumnCollector.d.ts +94 -9
- package/dist/esm/src/transformers/SelectableColumnCollector.js +227 -40
- package/dist/esm/src/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/index.min.js +25 -25
- package/dist/index.min.js.map +4 -4
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +5 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/transformers/CTERenamer.d.ts +144 -0
- package/dist/src/transformers/CTERenamer.js +346 -0
- package/dist/src/transformers/CTERenamer.js.map +1 -0
- package/dist/src/transformers/ColumnReferenceCollector.d.ts +162 -0
- package/dist/src/transformers/ColumnReferenceCollector.js +468 -0
- package/dist/src/transformers/ColumnReferenceCollector.js.map +1 -0
- package/dist/src/transformers/SelectableColumnCollector.d.ts +94 -9
- package/dist/src/transformers/SelectableColumnCollector.js +225 -38
- package/dist/src/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -464,6 +464,68 @@ For more details, see the [SqlPaginationInjector Usage Guide](../../docs/usage-g
|
|
|
464
464
|
|
|
465
465
|
---
|
|
466
466
|
|
|
467
|
+
## SelectableColumnCollector Features
|
|
468
|
+
|
|
469
|
+
The `SelectableColumnCollector` class extracts all column references from SQL queries, providing essential metadata for dependency analysis, schema migration, and dynamic query building. It supports both standard column collection and upstream column collection for maximum search conditions in DynamicQuery scenarios.
|
|
470
|
+
|
|
471
|
+
Key benefits include:
|
|
472
|
+
- **Column Dependency Analysis**: Identify all column references used in SQL queries
|
|
473
|
+
- **Schema Migration Support**: Track column usage across complex queries for safe schema changes
|
|
474
|
+
- **DynamicQuery Integration**: Collect maximum available columns for flexible search conditions
|
|
475
|
+
- **Upstream Column Collection**: Gather all columns from CTEs, subqueries, and tables for comprehensive analysis
|
|
476
|
+
- **Duplicate Detection**: Configurable modes for handling duplicate column names (column-only vs table.column)
|
|
477
|
+
- **Security Analysis**: Enable column-level access control by understanding column dependencies
|
|
478
|
+
|
|
479
|
+
```typescript
|
|
480
|
+
import { SelectableColumnCollector, DuplicateDetectionMode } from 'rawsql-ts';
|
|
481
|
+
|
|
482
|
+
const sql = `
|
|
483
|
+
WITH user_stats AS (
|
|
484
|
+
SELECT u.id, u.name, u.email, COUNT(p.id) as post_count
|
|
485
|
+
FROM users u
|
|
486
|
+
LEFT JOIN posts p ON u.id = p.user_id
|
|
487
|
+
GROUP BY u.id, u.name, u.email
|
|
488
|
+
)
|
|
489
|
+
SELECT us.name, us.post_count
|
|
490
|
+
FROM user_stats us
|
|
491
|
+
WHERE us.post_count > 5
|
|
492
|
+
`;
|
|
493
|
+
|
|
494
|
+
const query = SelectQueryParser.parse(sql);
|
|
495
|
+
|
|
496
|
+
// Basic column collection - only referenced columns
|
|
497
|
+
const collector = new SelectableColumnCollector();
|
|
498
|
+
const columns = collector.collect(query);
|
|
499
|
+
console.log(columns.map(c => c.name));
|
|
500
|
+
// Output: ['name', 'post_count']
|
|
501
|
+
|
|
502
|
+
// Upstream collection for DynamicQuery - all available columns
|
|
503
|
+
const upstreamCollector = new SelectableColumnCollector(
|
|
504
|
+
null, false, DuplicateDetectionMode.ColumnNameOnly,
|
|
505
|
+
{ upstream: true }
|
|
506
|
+
);
|
|
507
|
+
const allColumns = upstreamCollector.collect(query);
|
|
508
|
+
console.log(allColumns.map(c => c.name));
|
|
509
|
+
// Output: ['name', 'post_count', 'id', 'email'] // All columns from CTE
|
|
510
|
+
|
|
511
|
+
// Duplicate detection modes
|
|
512
|
+
const fullNameCollector = new SelectableColumnCollector(
|
|
513
|
+
null, false, DuplicateDetectionMode.FullName
|
|
514
|
+
);
|
|
515
|
+
const uniqueColumns = fullNameCollector.collect(query);
|
|
516
|
+
// Distinguishes between u.id and p.id as separate columns
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
### Use Cases
|
|
520
|
+
|
|
521
|
+
- **DynamicQuery Maximum Search Conditions**: Collect all available columns from upstream sources (CTEs, subqueries, tables) to enable comprehensive filtering options
|
|
522
|
+
- **Schema Migration Planning**: Identify all column dependencies before making schema changes
|
|
523
|
+
- **Security Analysis**: Implement column-level access control by understanding which columns are accessed
|
|
524
|
+
- **Query Optimization**: Analyze column usage patterns to optimize query performance
|
|
525
|
+
- **API Generation**: Automatically generate filter and sort options based on available columns
|
|
526
|
+
|
|
527
|
+
---
|
|
528
|
+
|
|
467
529
|
## DynamicQueryBuilder Features
|
|
468
530
|
|
|
469
531
|
The `DynamicQueryBuilder` class is a powerful, all-in-one solution that combines SQL parsing with dynamic condition injection (filtering, sorting, pagination, and JSON serialization). It provides a unified interface for building complex queries without the need to manually chain multiple injectors, making it ideal for modern web applications that require flexible, dynamic query generation.
|
package/dist/esm/index.js
CHANGED
|
@@ -13,12 +13,15 @@ export * from './transformers/CTEDisabler';
|
|
|
13
13
|
export * from './transformers/CTEDependencyAnalyzer';
|
|
14
14
|
export * from './transformers/CTEQueryDecomposer';
|
|
15
15
|
export * from './transformers/CTEComposer';
|
|
16
|
+
export * from './transformers/CTERenamer';
|
|
17
|
+
export * from './transformers/ColumnReferenceCollector';
|
|
16
18
|
export * from './transformers/Formatter';
|
|
17
19
|
export * from './transformers/SqlFormatter';
|
|
18
20
|
export * from './transformers/PostgresJsonQueryBuilder';
|
|
19
21
|
export * from './transformers/QueryBuilder'; // old name:QueryConverter
|
|
20
22
|
export * from './transformers/SelectValueCollector';
|
|
21
23
|
export * from './transformers/SelectableColumnCollector';
|
|
24
|
+
export { DuplicateDetectionMode } from './transformers/SelectableColumnCollector';
|
|
22
25
|
export * from './transformers/TableColumnResolver';
|
|
23
26
|
export * from './transformers/TableSourceCollector';
|
|
24
27
|
export * from './transformers/JsonMappingConverter';
|
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;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,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,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,OAAO,EAEH,yBAAyB,EACzB,0BAA0B,EAK7B,MAAM,uCAAuC,CAAC;AAC/C,OAAO;AACH,6DAA6D;AAC7D,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACjB,MAAM,mCAAmC,CAAC;AAE3C,qEAAqE;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,cAAc,0CAA0C,CAAC;AACzD,cAAc,gDAAgD,CAAC;AAE/D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0CAA0C,CAAC;AACzD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AAEnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AAGrC,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;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAEhC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yCAAyC,CAAC;AACxD,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,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAClF,cAAc,oCAAoC,CAAC;AACnD,cAAc,qCAAqC,CAAC;AACpD,cAAc,qCAAqC,CAAC;AACpD,cAAc,oCAAoC,CAAC;AACnD,OAAO,EAEH,yBAAyB,EACzB,0BAA0B,EAK7B,MAAM,uCAAuC,CAAC;AAC/C,OAAO;AACH,6DAA6D;AAC7D,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACjB,MAAM,mCAAmC,CAAC;AAE3C,qEAAqE;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,cAAc,0CAA0C,CAAC;AACzD,cAAc,gDAAgD,CAAC;AAE/D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0CAA0C,CAAC;AACzD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sCAAsC,CAAC;AACrD,cAAc,oCAAoC,CAAC;AAEnD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AAGrC,oEAAoE"}
|