rawsql-ts 0.10.0-beta → 0.10.2-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 +41 -5
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +16 -0
- package/dist/esm/index.min.js.map +7 -0
- package/dist/esm/models/ValueComponent.js +7 -0
- package/dist/esm/models/ValueComponent.js.map +1 -1
- package/dist/esm/parsers/CommandExpressionParser.js +1 -16
- package/dist/esm/parsers/CommandExpressionParser.js.map +1 -1
- package/dist/esm/parsers/FunctionExpressionParser.js +33 -2
- package/dist/esm/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/esm/parsers/SqlPrintTokenParser.js +13 -1
- package/dist/esm/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/tokenReaders/CommandTokenReader.js +0 -1
- package/dist/esm/tokenReaders/CommandTokenReader.js.map +1 -1
- package/dist/esm/tokenReaders/FunctionTokenReader.js +2 -0
- package/dist/esm/tokenReaders/FunctionTokenReader.js.map +1 -1
- package/dist/esm/transformers/CTECollector.js +13 -2
- package/dist/esm/transformers/CTECollector.js.map +1 -1
- package/dist/esm/transformers/CTEDisabler.js +6 -1
- package/dist/esm/transformers/CTEDisabler.js.map +1 -1
- package/dist/esm/transformers/{PostgreJsonQueryBuilder.js → PostgresJsonQueryBuilder.js} +14 -3
- package/dist/esm/transformers/PostgresJsonQueryBuilder.js.map +1 -0
- package/dist/esm/transformers/SelectableColumnCollector.js +5 -1
- package/dist/esm/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/esm/transformers/TableSourceCollector.js +30 -2
- package/dist/esm/transformers/TableSourceCollector.js.map +1 -1
- package/dist/esm/types/index.d.ts +2 -1
- package/dist/esm/types/models/ValueComponent.d.ts +6 -1
- package/dist/esm/types/parsers/CommandExpressionParser.d.ts +0 -1
- package/dist/esm/types/parsers/FunctionExpressionParser.d.ts +7 -0
- package/dist/esm/types/parsers/SqlPrintTokenParser.d.ts +1 -0
- package/dist/esm/types/transformers/CTECollector.d.ts +2 -0
- package/dist/esm/types/transformers/CTEDisabler.d.ts +2 -1
- package/dist/esm/types/transformers/PostgresArrayEntityCteBuilder.d.ts +1 -1
- package/dist/esm/types/transformers/{PostgreJsonQueryBuilder.d.ts → PostgresJsonQueryBuilder.d.ts} +9 -1
- package/dist/esm/types/transformers/PostgresObjectEntityCteBuilder.d.ts +1 -1
- package/dist/esm/types/transformers/SelectableColumnCollector.d.ts +1 -0
- package/dist/esm/types/transformers/TableSourceCollector.d.ts +8 -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 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +16 -0
- package/dist/index.min.js.map +7 -0
- package/dist/models/ValueComponent.d.ts +6 -1
- package/dist/models/ValueComponent.js +9 -1
- package/dist/models/ValueComponent.js.map +1 -1
- package/dist/parsers/CommandExpressionParser.d.ts +0 -1
- package/dist/parsers/CommandExpressionParser.js +0 -15
- package/dist/parsers/CommandExpressionParser.js.map +1 -1
- package/dist/parsers/FunctionExpressionParser.d.ts +7 -0
- package/dist/parsers/FunctionExpressionParser.js +32 -1
- package/dist/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/parsers/SqlPrintTokenParser.d.ts +1 -0
- package/dist/parsers/SqlPrintTokenParser.js +12 -0
- package/dist/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/tokenReaders/CommandTokenReader.js +0 -1
- package/dist/tokenReaders/CommandTokenReader.js.map +1 -1
- package/dist/tokenReaders/FunctionTokenReader.js +2 -0
- package/dist/tokenReaders/FunctionTokenReader.js.map +1 -1
- package/dist/transformers/CTECollector.d.ts +2 -0
- package/dist/transformers/CTECollector.js +11 -0
- package/dist/transformers/CTECollector.js.map +1 -1
- package/dist/transformers/CTEDisabler.d.ts +2 -1
- package/dist/transformers/CTEDisabler.js +5 -0
- package/dist/transformers/CTEDisabler.js.map +1 -1
- package/dist/transformers/PostgresArrayEntityCteBuilder.d.ts +1 -1
- package/dist/transformers/{PostgreJsonQueryBuilder.d.ts → PostgresJsonQueryBuilder.d.ts} +9 -1
- package/dist/transformers/{PostgreJsonQueryBuilder.js → PostgresJsonQueryBuilder.js} +16 -5
- package/dist/transformers/PostgresJsonQueryBuilder.js.map +1 -0
- package/dist/transformers/PostgresObjectEntityCteBuilder.d.ts +1 -1
- package/dist/transformers/SelectableColumnCollector.d.ts +1 -0
- package/dist/transformers/SelectableColumnCollector.js +4 -0
- package/dist/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/transformers/TableSourceCollector.d.ts +8 -0
- package/dist/transformers/TableSourceCollector.js +28 -0
- package/dist/transformers/TableSourceCollector.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 +3 -1
- package/dist/esm/transformers/PostgreJsonQueryBuilder.js.map +0 -1
- package/dist/transformers/PostgreJsonQueryBuilder.js.map +0 -1
@@ -1,7 +1,7 @@
|
|
1
1
|
import { ForClause, FromClause, GroupByClause, HavingClause, JoinClause, JoinOnClause, JoinUsingClause, LimitClause, OrderByClause, OrderByItem, ParenSource, SelectClause, SelectItem, SourceExpression, SubQuerySource, TableSource, WhereClause, WindowFrameClause } from "../models/Clause";
|
2
2
|
import { BinarySelectQuery, SimpleSelectQuery, SelectQuery, ValuesQuery } from "../models/SelectQuery";
|
3
3
|
import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent";
|
4
|
-
import { ArrayExpression, BetweenExpression, BinaryExpression, CaseExpression, CaseKeyValuePair, CastExpression, ColumnReference, FunctionCall, InlineQuery, ParenExpression, ParameterExpression, SwitchCaseArgument, TupleExpression, UnaryExpression, ValueComponent, WindowFrameExpression, IdentifierString, RawString, WindowFrameSpec, TypeValue } from "../models/ValueComponent";
|
4
|
+
import { ArrayExpression, ArrayQueryExpression, BetweenExpression, BinaryExpression, CaseExpression, CaseKeyValuePair, CastExpression, ColumnReference, FunctionCall, InlineQuery, ParenExpression, ParameterExpression, SwitchCaseArgument, TupleExpression, UnaryExpression, ValueComponent, WindowFrameExpression, IdentifierString, RawString, WindowFrameSpec, TypeValue } from "../models/ValueComponent";
|
5
5
|
/**
|
6
6
|
* A visitor that disables all WITH clauses in a SQL query structure.
|
7
7
|
* This processes and removes WITH clauses from:
|
@@ -59,6 +59,7 @@ export declare class CTEDisabler implements SqlComponentVisitor<SqlComponent> {
|
|
59
59
|
visitBetweenExpression(expr: BetweenExpression): SqlComponent;
|
60
60
|
visitFunctionCall(func: FunctionCall): SqlComponent;
|
61
61
|
visitArrayExpression(expr: ArrayExpression): SqlComponent;
|
62
|
+
visitArrayQueryExpression(expr: ArrayQueryExpression): SqlComponent;
|
62
63
|
visitTupleExpression(expr: TupleExpression): SqlComponent;
|
63
64
|
visitCastExpression(expr: CastExpression): SqlComponent;
|
64
65
|
visitTypeValue(typeValue: TypeValue): SqlComponent;
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { CommonTable } from '../models/Clause';
|
2
|
-
import { JsonMapping } from './
|
2
|
+
import { JsonMapping } from './PostgresJsonQueryBuilder';
|
3
3
|
import { ProcessableEntity } from './PostgresObjectEntityCteBuilder';
|
4
4
|
/**
|
5
5
|
* PostgreSQL-specific builder for creating CTEs for array entities (array relationships).
|
package/dist/esm/types/transformers/{PostgreJsonQueryBuilder.d.ts → PostgresJsonQueryBuilder.d.ts}
RENAMED
@@ -30,7 +30,7 @@ export interface JsonMapping {
|
|
30
30
|
* PostgreSQL JSON query builder that transforms SimpleSelectQuery into queries
|
31
31
|
* that return JSON arrays or single JSON objects using PostgreSQL JSON functions.
|
32
32
|
*/
|
33
|
-
export declare class
|
33
|
+
export declare class PostgresJsonQueryBuilder {
|
34
34
|
private selectValueCollector;
|
35
35
|
private objectEntityCteBuilder;
|
36
36
|
private arrayEntityCteBuilder;
|
@@ -47,6 +47,14 @@ export declare class PostgreJsonQueryBuilder {
|
|
47
47
|
* @param mapping JSON mapping configuration
|
48
48
|
* @returns Transformed query with JSON aggregation
|
49
49
|
*/
|
50
|
+
buildJsonQuery(originalQuery: SimpleSelectQuery, mapping: JsonMapping): SimpleSelectQuery;
|
51
|
+
/**
|
52
|
+
* Build JSON query from original query and mapping configuration.
|
53
|
+
* @deprecated Use buildJsonQuery instead. This method will be removed in a future version.
|
54
|
+
* @param originalQuery Original query to transform
|
55
|
+
* @param mapping JSON mapping configuration
|
56
|
+
* @returns Transformed query with JSON aggregation
|
57
|
+
*/
|
50
58
|
buildJson(originalQuery: SimpleSelectQuery, mapping: JsonMapping): SimpleSelectQuery;
|
51
59
|
/**
|
52
60
|
* Builds the JSON structure using a unified CTE-based strategy.
|
@@ -104,6 +104,7 @@ export declare class SelectableColumnCollector implements SqlComponentVisitor<vo
|
|
104
104
|
private visitCastExpression;
|
105
105
|
private visitBetweenExpression;
|
106
106
|
private visitArrayExpression;
|
107
|
+
private visitArrayQueryExpression;
|
107
108
|
private visitValueList;
|
108
109
|
private visitPartitionByClause;
|
109
110
|
}
|
@@ -58,6 +58,12 @@ export declare class TableSourceCollector implements SqlComponentVisitor<void> {
|
|
58
58
|
private visitFromClause;
|
59
59
|
private visitSourceExpression;
|
60
60
|
private visitTableSource;
|
61
|
+
private visitFunctionSource;
|
62
|
+
/**
|
63
|
+
* Helper method to visit value components, handling special cases like TupleExpression, ParenExpression, InlineQuery, and ArrayQueryExpression
|
64
|
+
* even in selectableOnly mode when they appear in function arguments
|
65
|
+
*/
|
66
|
+
private visitValueComponent;
|
61
67
|
/**
|
62
68
|
* Checks if a table name is a CTE name
|
63
69
|
*/
|
@@ -89,6 +95,8 @@ export declare class TableSourceCollector implements SqlComponentVisitor<void> {
|
|
89
95
|
private visitBetweenExpression;
|
90
96
|
private visitFunctionCall;
|
91
97
|
private visitArrayExpression;
|
98
|
+
private visitArrayQueryExpression;
|
92
99
|
private visitTupleExpression;
|
93
100
|
private visitCastExpression;
|
101
|
+
private visitValueList;
|
94
102
|
}
|
@@ -0,0 +1,132 @@
|
|
1
|
+
/**
|
2
|
+
* Schema Manager for rawsql-ts
|
3
|
+
* Provides unified schema definition and automatic conversion to various formats
|
4
|
+
* Eliminates code duplication and provides type-safe schema management
|
5
|
+
*/
|
6
|
+
import type { JsonMapping } from '../transformers/PostgresJsonQueryBuilder';
|
7
|
+
/**
|
8
|
+
* Database column metadata for schema mapping
|
9
|
+
*/
|
10
|
+
export interface ColumnDefinition {
|
11
|
+
/** Column name in database */
|
12
|
+
name: string;
|
13
|
+
/** Primary key indicator - used for UPDATE/DELETE query WHERE conditions */
|
14
|
+
isPrimaryKey?: boolean;
|
15
|
+
/** Foreign key reference */
|
16
|
+
foreignKey?: {
|
17
|
+
table: string;
|
18
|
+
column: string;
|
19
|
+
};
|
20
|
+
/** Alias for JSON output (useful for avoiding conflicts) */
|
21
|
+
jsonAlias?: string;
|
22
|
+
}
|
23
|
+
/**
|
24
|
+
* Table relationship definition
|
25
|
+
*/
|
26
|
+
export interface RelationshipDefinition {
|
27
|
+
/** Type of relationship */
|
28
|
+
type: 'object' | 'array';
|
29
|
+
/** Target table name */
|
30
|
+
table: string;
|
31
|
+
/** Property name in JSON output */
|
32
|
+
propertyName: string;
|
33
|
+
/** Optional: Override target table's primary key */
|
34
|
+
targetKey?: string;
|
35
|
+
}
|
36
|
+
/**
|
37
|
+
* Complete table schema definition that users write
|
38
|
+
*/
|
39
|
+
export interface TableDefinition {
|
40
|
+
/** Table name in database */
|
41
|
+
name: string;
|
42
|
+
/** Human-readable entity name */
|
43
|
+
displayName?: string;
|
44
|
+
/** Column definitions */
|
45
|
+
columns: Record<string, ColumnDefinition>;
|
46
|
+
/** Relationships with other tables */
|
47
|
+
relationships?: RelationshipDefinition[];
|
48
|
+
}
|
49
|
+
/**
|
50
|
+
* Schema registry containing all table definitions
|
51
|
+
*/
|
52
|
+
export interface SchemaRegistry {
|
53
|
+
[tableName: string]: TableDefinition;
|
54
|
+
}
|
55
|
+
/**
|
56
|
+
* Central schema management utility for rawsql-ts
|
57
|
+
* Converts user-defined schemas to various internal formats
|
58
|
+
*/
|
59
|
+
export declare class SchemaManager {
|
60
|
+
private schemas;
|
61
|
+
constructor(schemas: SchemaRegistry);
|
62
|
+
/**
|
63
|
+
* Validate schema definitions for consistency
|
64
|
+
* Ensures each table has a primary key (required for UPDATE/DELETE operations)
|
65
|
+
* and validates relationship references
|
66
|
+
*/
|
67
|
+
private validateSchemas;
|
68
|
+
/**
|
69
|
+
* Get table column names for SqlParamInjector TableColumnResolver
|
70
|
+
* @param tableName Name of the table
|
71
|
+
* @returns Array of column names
|
72
|
+
*/
|
73
|
+
getTableColumns(tableName: string): string[];
|
74
|
+
/**
|
75
|
+
* Create TableColumnResolver function for SqlParamInjector
|
76
|
+
* @returns Function compatible with SqlParamInjector
|
77
|
+
*/
|
78
|
+
createTableColumnResolver(): (tableName: string) => string[];
|
79
|
+
/**
|
80
|
+
* Generate JSON mapping configuration for PostgresJsonQueryBuilder
|
81
|
+
* @param rootTableName Root table for the JSON structure
|
82
|
+
* @returns JSON mapping configuration
|
83
|
+
*/
|
84
|
+
createJsonMapping(rootTableName: string): JsonMapping;
|
85
|
+
/**
|
86
|
+
* Get all table names in the schema
|
87
|
+
* @returns Array of table names
|
88
|
+
*/
|
89
|
+
getTableNames(): string[];
|
90
|
+
/**
|
91
|
+
* Get table definition by name
|
92
|
+
* @param tableName Name of the table
|
93
|
+
* @returns Table definition or undefined
|
94
|
+
*/
|
95
|
+
getTable(tableName: string): TableDefinition | undefined;
|
96
|
+
/**
|
97
|
+
* Get primary key column name for a table
|
98
|
+
* Used by QueryBuilder.buildUpdateQuery for WHERE clause conditions
|
99
|
+
* @param tableName Name of the table
|
100
|
+
* @returns Primary key column name or undefined
|
101
|
+
*/
|
102
|
+
getPrimaryKey(tableName: string): string | undefined;
|
103
|
+
/**
|
104
|
+
* Get foreign key relationships for a table
|
105
|
+
* @param tableName Name of the table
|
106
|
+
* @returns Array of foreign key relationships
|
107
|
+
*/
|
108
|
+
getForeignKeys(tableName: string): Array<{
|
109
|
+
column: string;
|
110
|
+
referencedTable: string;
|
111
|
+
referencedColumn: string;
|
112
|
+
}>;
|
113
|
+
}
|
114
|
+
/**
|
115
|
+
* Create a SchemaManager instance from schema definitions
|
116
|
+
* @param schemas Schema registry object
|
117
|
+
* @returns SchemaManager instance
|
118
|
+
*/
|
119
|
+
export declare function createSchemaManager(schemas: SchemaRegistry): SchemaManager;
|
120
|
+
/**
|
121
|
+
* Create TableColumnResolver function from schema definitions
|
122
|
+
* @param schemas Schema registry object
|
123
|
+
* @returns TableColumnResolver function for SqlParamInjector
|
124
|
+
*/
|
125
|
+
export declare function createTableColumnResolver(schemas: SchemaRegistry): (tableName: string) => string[];
|
126
|
+
/**
|
127
|
+
* Create JSON mapping from schema definitions
|
128
|
+
* @param schemas Schema registry object
|
129
|
+
* @param rootTableName Root table name
|
130
|
+
* @returns JSON mapping for PostgresJsonQueryBuilder
|
131
|
+
*/
|
132
|
+
export declare function createJsonMappingFromSchema(schemas: SchemaRegistry, rootTableName: string): JsonMapping;
|
@@ -0,0 +1,194 @@
|
|
1
|
+
/**
|
2
|
+
* Schema Manager for rawsql-ts
|
3
|
+
* Provides unified schema definition and automatic conversion to various formats
|
4
|
+
* Eliminates code duplication and provides type-safe schema management
|
5
|
+
*/
|
6
|
+
// === Schema Manager Class ===
|
7
|
+
/**
|
8
|
+
* Central schema management utility for rawsql-ts
|
9
|
+
* Converts user-defined schemas to various internal formats
|
10
|
+
*/
|
11
|
+
export class SchemaManager {
|
12
|
+
constructor(schemas) {
|
13
|
+
this.schemas = schemas;
|
14
|
+
this.validateSchemas();
|
15
|
+
}
|
16
|
+
/**
|
17
|
+
* Validate schema definitions for consistency
|
18
|
+
* Ensures each table has a primary key (required for UPDATE/DELETE operations)
|
19
|
+
* and validates relationship references
|
20
|
+
*/
|
21
|
+
validateSchemas() {
|
22
|
+
const tableNames = Object.keys(this.schemas);
|
23
|
+
const errors = [];
|
24
|
+
// Validate each table
|
25
|
+
Object.entries(this.schemas).forEach(([tableName, table]) => {
|
26
|
+
var _a;
|
27
|
+
// Check primary key exists (required for UPDATE/DELETE WHERE conditions)
|
28
|
+
const primaryKeys = Object.entries(table.columns)
|
29
|
+
.filter(([_, col]) => col.isPrimaryKey)
|
30
|
+
.map(([name, _]) => name);
|
31
|
+
if (primaryKeys.length === 0) {
|
32
|
+
errors.push(`Table '${tableName}' has no primary key defined`);
|
33
|
+
}
|
34
|
+
// Validate foreign key references
|
35
|
+
(_a = table.relationships) === null || _a === void 0 ? void 0 : _a.forEach(rel => {
|
36
|
+
if (!tableNames.includes(rel.table)) {
|
37
|
+
errors.push(`Table '${tableName}' references unknown table '${rel.table}' in relationship`);
|
38
|
+
}
|
39
|
+
});
|
40
|
+
});
|
41
|
+
if (errors.length > 0) {
|
42
|
+
throw new Error(`Schema validation failed:\\n${errors.join('\\n')}`);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
/**
|
46
|
+
* Get table column names for SqlParamInjector TableColumnResolver
|
47
|
+
* @param tableName Name of the table
|
48
|
+
* @returns Array of column names
|
49
|
+
*/
|
50
|
+
getTableColumns(tableName) {
|
51
|
+
const table = this.schemas[tableName];
|
52
|
+
if (!table) {
|
53
|
+
return [];
|
54
|
+
}
|
55
|
+
return Object.keys(table.columns);
|
56
|
+
}
|
57
|
+
/**
|
58
|
+
* Create TableColumnResolver function for SqlParamInjector
|
59
|
+
* @returns Function compatible with SqlParamInjector
|
60
|
+
*/
|
61
|
+
createTableColumnResolver() {
|
62
|
+
return (tableName) => this.getTableColumns(tableName);
|
63
|
+
}
|
64
|
+
/**
|
65
|
+
* Generate JSON mapping configuration for PostgresJsonQueryBuilder
|
66
|
+
* @param rootTableName Root table for the JSON structure
|
67
|
+
* @returns JSON mapping configuration
|
68
|
+
*/
|
69
|
+
createJsonMapping(rootTableName) {
|
70
|
+
var _a;
|
71
|
+
const rootTable = this.schemas[rootTableName];
|
72
|
+
if (!rootTable) {
|
73
|
+
throw new Error(`Table '${rootTableName}' not found in schema registry`);
|
74
|
+
}
|
75
|
+
// Build root entity columns mapping
|
76
|
+
const rootColumns = {};
|
77
|
+
Object.entries(rootTable.columns).forEach(([columnName, column]) => {
|
78
|
+
rootColumns[columnName] = column.jsonAlias || column.name;
|
79
|
+
});
|
80
|
+
// Build nested entities from relationships
|
81
|
+
const nestedEntities = [];
|
82
|
+
(_a = rootTable.relationships) === null || _a === void 0 ? void 0 : _a.forEach(rel => {
|
83
|
+
const relatedTable = this.schemas[rel.table];
|
84
|
+
if (!relatedTable) {
|
85
|
+
throw new Error(`Related table '${rel.table}' not found in schema registry`);
|
86
|
+
}
|
87
|
+
// Build columns mapping for related table
|
88
|
+
const relatedColumns = {};
|
89
|
+
Object.entries(relatedTable.columns).forEach(([columnName, column]) => {
|
90
|
+
relatedColumns[columnName] = column.jsonAlias || column.name;
|
91
|
+
});
|
92
|
+
// Determine relationship type for JSON builder
|
93
|
+
const relationshipType = rel.type;
|
94
|
+
nestedEntities.push({
|
95
|
+
id: rel.propertyName,
|
96
|
+
name: relatedTable.displayName || rel.table,
|
97
|
+
parentId: rootTableName,
|
98
|
+
propertyName: rel.propertyName,
|
99
|
+
relationshipType: relationshipType,
|
100
|
+
columns: relatedColumns
|
101
|
+
});
|
102
|
+
});
|
103
|
+
return {
|
104
|
+
rootName: rootTableName,
|
105
|
+
rootEntity: {
|
106
|
+
id: rootTableName,
|
107
|
+
name: rootTable.displayName || rootTableName,
|
108
|
+
columns: rootColumns
|
109
|
+
},
|
110
|
+
nestedEntities,
|
111
|
+
useJsonb: true,
|
112
|
+
resultFormat: "single"
|
113
|
+
};
|
114
|
+
}
|
115
|
+
/**
|
116
|
+
* Get all table names in the schema
|
117
|
+
* @returns Array of table names
|
118
|
+
*/
|
119
|
+
getTableNames() {
|
120
|
+
return Object.keys(this.schemas);
|
121
|
+
}
|
122
|
+
/**
|
123
|
+
* Get table definition by name
|
124
|
+
* @param tableName Name of the table
|
125
|
+
* @returns Table definition or undefined
|
126
|
+
*/
|
127
|
+
getTable(tableName) {
|
128
|
+
return this.schemas[tableName];
|
129
|
+
}
|
130
|
+
/**
|
131
|
+
* Get primary key column name for a table
|
132
|
+
* Used by QueryBuilder.buildUpdateQuery for WHERE clause conditions
|
133
|
+
* @param tableName Name of the table
|
134
|
+
* @returns Primary key column name or undefined
|
135
|
+
*/
|
136
|
+
getPrimaryKey(tableName) {
|
137
|
+
const table = this.schemas[tableName];
|
138
|
+
if (!table)
|
139
|
+
return undefined;
|
140
|
+
const primaryKeyEntry = Object.entries(table.columns)
|
141
|
+
.find(([_, col]) => col.isPrimaryKey);
|
142
|
+
return primaryKeyEntry ? primaryKeyEntry[0] : undefined;
|
143
|
+
}
|
144
|
+
/**
|
145
|
+
* Get foreign key relationships for a table
|
146
|
+
* @param tableName Name of the table
|
147
|
+
* @returns Array of foreign key relationships
|
148
|
+
*/
|
149
|
+
getForeignKeys(tableName) {
|
150
|
+
const table = this.schemas[tableName];
|
151
|
+
if (!table)
|
152
|
+
return [];
|
153
|
+
const foreignKeys = [];
|
154
|
+
Object.entries(table.columns).forEach(([columnName, column]) => {
|
155
|
+
if (column.foreignKey) {
|
156
|
+
foreignKeys.push({
|
157
|
+
column: columnName,
|
158
|
+
referencedTable: column.foreignKey.table,
|
159
|
+
referencedColumn: column.foreignKey.column
|
160
|
+
});
|
161
|
+
}
|
162
|
+
});
|
163
|
+
return foreignKeys;
|
164
|
+
}
|
165
|
+
}
|
166
|
+
// === Convenience Functions ===
|
167
|
+
/**
|
168
|
+
* Create a SchemaManager instance from schema definitions
|
169
|
+
* @param schemas Schema registry object
|
170
|
+
* @returns SchemaManager instance
|
171
|
+
*/
|
172
|
+
export function createSchemaManager(schemas) {
|
173
|
+
return new SchemaManager(schemas);
|
174
|
+
}
|
175
|
+
/**
|
176
|
+
* Create TableColumnResolver function from schema definitions
|
177
|
+
* @param schemas Schema registry object
|
178
|
+
* @returns TableColumnResolver function for SqlParamInjector
|
179
|
+
*/
|
180
|
+
export function createTableColumnResolver(schemas) {
|
181
|
+
const manager = new SchemaManager(schemas);
|
182
|
+
return manager.createTableColumnResolver();
|
183
|
+
}
|
184
|
+
/**
|
185
|
+
* Create JSON mapping from schema definitions
|
186
|
+
* @param schemas Schema registry object
|
187
|
+
* @param rootTableName Root table name
|
188
|
+
* @returns JSON mapping for PostgresJsonQueryBuilder
|
189
|
+
*/
|
190
|
+
export function createJsonMappingFromSchema(schemas, rootTableName) {
|
191
|
+
const manager = new SchemaManager(schemas);
|
192
|
+
return manager.createJsonMapping(rootTableName);
|
193
|
+
}
|
194
|
+
//# sourceMappingURL=SchemaManager.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"SchemaManager.js","sourceRoot":"","sources":["../../../src/utils/SchemaManager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
@@ -8,7 +8,7 @@ export * from './transformers/CTECollector';
|
|
8
8
|
export * from './transformers/CTENormalizer';
|
9
9
|
export * from './transformers/Formatter';
|
10
10
|
export * from './transformers/SqlFormatter';
|
11
|
-
export * from './transformers/
|
11
|
+
export * from './transformers/PostgresJsonQueryBuilder';
|
12
12
|
export * from './transformers/QueryBuilder';
|
13
13
|
export * from './transformers/SelectValueCollector';
|
14
14
|
export * from './transformers/SelectableColumnCollector';
|
@@ -18,3 +18,4 @@ export * from './transformers/UpstreamSelectQueryFinder';
|
|
18
18
|
export * from './transformers/SchemaCollector';
|
19
19
|
export * from './transformers/SqlParamInjector';
|
20
20
|
export * from './utils/SqlSchemaValidator';
|
21
|
+
export * from './utils/SchemaManager';
|
package/dist/index.js
CHANGED
@@ -25,7 +25,7 @@ __exportStar(require("./transformers/CTECollector"), exports);
|
|
25
25
|
__exportStar(require("./transformers/CTENormalizer"), exports);
|
26
26
|
__exportStar(require("./transformers/Formatter"), exports);
|
27
27
|
__exportStar(require("./transformers/SqlFormatter"), exports);
|
28
|
-
__exportStar(require("./transformers/
|
28
|
+
__exportStar(require("./transformers/PostgresJsonQueryBuilder"), exports);
|
29
29
|
__exportStar(require("./transformers/QueryBuilder"), exports); // old name:QueryConverter
|
30
30
|
__exportStar(require("./transformers/SelectValueCollector"), exports);
|
31
31
|
__exportStar(require("./transformers/SelectableColumnCollector"), exports);
|
@@ -35,5 +35,6 @@ __exportStar(require("./transformers/UpstreamSelectQueryFinder"), exports);
|
|
35
35
|
__exportStar(require("./transformers/SchemaCollector"), exports);
|
36
36
|
__exportStar(require("./transformers/SqlParamInjector"), exports);
|
37
37
|
__exportStar(require("./utils/SqlSchemaValidator"), exports);
|
38
|
+
__exportStar(require("./utils/SchemaManager"), exports);
|
38
39
|
// Add more exports here if you want to expose additional public API
|
39
40
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oCAAoC;AACpC,8DAA4C;AAC5C,8DAA4C;AAE5C,6DAA2C;AAC3C,uDAAqC;AACrC,0DAAwC;AACxC,uDAAqC;AAErC,8DAA4C;AAC5C,+DAA6C;AAC7C,2DAAyC;AACzC,8DAA4C;AAC5C,
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oCAAoC;AACpC,8DAA4C;AAC5C,8DAA4C;AAE5C,6DAA2C;AAC3C,uDAAqC;AACrC,0DAAwC;AACxC,uDAAqC;AAErC,8DAA4C;AAC5C,+DAA6C;AAC7C,2DAAyC;AACzC,8DAA4C;AAC5C,0EAAwD;AACxD,8DAA4C,CAAC,0BAA0B;AACvE,sEAAoD;AACpD,2EAAyD;AACzD,qEAAmD;AACnD,sEAAoD;AACpD,2EAAyD;AACzD,iEAA+C;AAC/C,kEAAgD;AAEhD,6DAA2C;AAC3C,wDAAsC;AACtC,oEAAoE"}
|