rawsql-ts 0.2.0-beta → 0.4.0-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 +134 -11
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/models/BinarySelectQuery.js +0 -2
- package/dist/esm/models/BinarySelectQuery.js.map +1 -1
- package/dist/esm/models/CreateTableQuery.js +62 -0
- package/dist/esm/models/CreateTableQuery.js.map +1 -0
- package/dist/esm/models/InsertQuery.js +24 -0
- package/dist/esm/models/InsertQuery.js.map +1 -0
- package/dist/esm/models/SelectQuery.js +2 -1
- package/dist/esm/models/SelectQuery.js.map +1 -1
- package/dist/esm/models/SimpleSelectQuery.js +2 -2
- package/dist/esm/models/SimpleSelectQuery.js.map +1 -1
- package/dist/esm/models/ValueComponent.js +9 -1
- package/dist/esm/models/ValueComponent.js.map +1 -1
- package/dist/esm/models/ValuesQuery.js +6 -1
- package/dist/esm/models/ValuesQuery.js.map +1 -1
- package/dist/esm/parsers/IdentifierParser.js +3 -2
- package/dist/esm/parsers/IdentifierParser.js.map +1 -1
- package/dist/esm/parsers/InsertQueryParser.js +104 -0
- package/dist/esm/parsers/InsertQueryParser.js.map +1 -0
- package/dist/esm/parsers/ParameterExpressionParser.js +11 -2
- package/dist/esm/parsers/ParameterExpressionParser.js.map +1 -1
- package/dist/esm/parsers/SelectQueryParser.js +1 -1
- package/dist/esm/parsers/SelectQueryParser.js.map +1 -1
- package/dist/esm/parsers/SourceParser.js +8 -26
- package/dist/esm/parsers/SourceParser.js.map +1 -1
- package/dist/esm/parsers/ValueParser.js +14 -1
- package/dist/esm/parsers/ValueParser.js.map +1 -1
- package/dist/esm/tokenReaders/ParameterTokenReader.js +21 -1
- package/dist/esm/tokenReaders/ParameterTokenReader.js.map +1 -1
- package/dist/esm/transformers/Formatter.js +76 -4
- package/dist/esm/transformers/Formatter.js.map +1 -1
- package/dist/esm/transformers/QueryBuilder.js +170 -0
- package/dist/esm/transformers/QueryBuilder.js.map +1 -0
- package/dist/esm/types/index.d.ts +2 -1
- package/dist/esm/types/models/CreateTableQuery.d.ts +27 -0
- package/dist/esm/types/models/InsertQuery.d.ts +21 -0
- package/dist/esm/types/models/SelectQuery.d.ts +3 -2
- package/dist/esm/types/models/ValueComponent.d.ts +1 -1
- package/dist/esm/types/models/ValuesQuery.d.ts +9 -1
- package/dist/esm/types/parsers/InsertQueryParser.d.ts +17 -0
- package/dist/esm/types/tokenReaders/ParameterTokenReader.d.ts +2 -1
- package/dist/esm/types/transformers/Formatter.d.ts +19 -2
- package/dist/esm/types/transformers/QueryBuilder.d.ts +54 -0
- package/dist/esm/types/utils/extractNamespacesAndName.d.ts +5 -0
- package/dist/esm/types/utils/parseEscapedOrDotSeparatedIdentifiers.d.ts +9 -0
- package/dist/esm/utils/extractNamespacesAndName.js +16 -0
- package/dist/esm/utils/extractNamespacesAndName.js.map +1 -0
- package/dist/esm/utils/parseEscapedOrDotSeparatedIdentifiers.js +39 -0
- package/dist/esm/utils/parseEscapedOrDotSeparatedIdentifiers.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/models/BinarySelectQuery.js +0 -2
- package/dist/models/BinarySelectQuery.js.map +1 -1
- package/dist/models/CreateTableQuery.d.ts +27 -0
- package/dist/models/CreateTableQuery.js +66 -0
- package/dist/models/CreateTableQuery.js.map +1 -0
- package/dist/models/InsertQuery.d.ts +21 -0
- package/dist/models/InsertQuery.js +28 -0
- package/dist/models/InsertQuery.js.map +1 -0
- package/dist/models/SelectQuery.d.ts +3 -2
- package/dist/models/SelectQuery.js +3 -1
- package/dist/models/SelectQuery.js.map +1 -1
- package/dist/models/SimpleSelectQuery.js +2 -2
- package/dist/models/SimpleSelectQuery.js.map +1 -1
- package/dist/models/ValueComponent.d.ts +1 -1
- package/dist/models/ValueComponent.js +9 -1
- package/dist/models/ValueComponent.js.map +1 -1
- package/dist/models/ValuesQuery.d.ts +9 -1
- package/dist/models/ValuesQuery.js +6 -1
- package/dist/models/ValuesQuery.js.map +1 -1
- package/dist/parsers/IdentifierParser.js +3 -2
- package/dist/parsers/IdentifierParser.js.map +1 -1
- package/dist/parsers/InsertQueryParser.d.ts +17 -0
- package/dist/parsers/InsertQueryParser.js +108 -0
- package/dist/parsers/InsertQueryParser.js.map +1 -0
- package/dist/parsers/ParameterExpressionParser.js +11 -2
- package/dist/parsers/ParameterExpressionParser.js.map +1 -1
- package/dist/parsers/SelectQueryParser.js +1 -1
- package/dist/parsers/SelectQueryParser.js.map +1 -1
- package/dist/parsers/SourceParser.js +8 -26
- package/dist/parsers/SourceParser.js.map +1 -1
- package/dist/parsers/ValueParser.js +14 -1
- package/dist/parsers/ValueParser.js.map +1 -1
- package/dist/tokenReaders/ParameterTokenReader.d.ts +2 -1
- package/dist/tokenReaders/ParameterTokenReader.js +21 -1
- package/dist/tokenReaders/ParameterTokenReader.js.map +1 -1
- package/dist/transformers/Formatter.d.ts +19 -2
- package/dist/transformers/Formatter.js +76 -4
- package/dist/transformers/Formatter.js.map +1 -1
- package/dist/transformers/QueryBuilder.d.ts +54 -0
- package/dist/transformers/QueryBuilder.js +174 -0
- package/dist/transformers/QueryBuilder.js.map +1 -0
- package/dist/utils/extractNamespacesAndName.d.ts +5 -0
- package/dist/utils/extractNamespacesAndName.js +18 -0
- package/dist/utils/extractNamespacesAndName.js.map +1 -0
- package/dist/utils/parseEscapedOrDotSeparatedIdentifiers.d.ts +9 -0
- package/dist/utils/parseEscapedOrDotSeparatedIdentifiers.js +42 -0
- package/dist/utils/parseEscapedOrDotSeparatedIdentifiers.js.map +1 -0
- package/package.json +1 -1
- package/dist/esm/transformers/QueryConverter.js +0 -115
- package/dist/esm/transformers/QueryConverter.js.map +0 -1
- package/dist/esm/types/transformers/QueryConverter.d.ts +0 -41
- package/dist/transformers/QueryConverter.d.ts +0 -41
- package/dist/transformers/QueryConverter.js +0 -119
- package/dist/transformers/QueryConverter.js.map +0 -1
@@ -0,0 +1,170 @@
|
|
1
|
+
import { FromClause, SelectClause, SelectItem, SourceAliasExpression, SourceExpression, SubQuerySource } from "../models/Clause";
|
2
|
+
import { BinarySelectQuery, SimpleSelectQuery, ValuesQuery } from "../models/SelectQuery";
|
3
|
+
import { ColumnReference } from "../models/ValueComponent";
|
4
|
+
import { CTENormalizer } from "./CTENormalizer";
|
5
|
+
import { CreateTableQuery } from "../models/CreateTableQuery";
|
6
|
+
import { InsertQuery } from "../models/InsertQuery";
|
7
|
+
import { SelectValueCollector } from "./SelectValueCollector";
|
8
|
+
/**
|
9
|
+
* QueryBuilder provides static methods to build or convert various SQL query objects.
|
10
|
+
*/
|
11
|
+
export class QueryBuilder {
|
12
|
+
/**
|
13
|
+
* Builds a BinarySelectQuery by combining an array of SelectQuery using the specified operator.
|
14
|
+
* Throws if less than two queries are provided.
|
15
|
+
* @param queries Array of SelectQuery to combine
|
16
|
+
* @param operator SQL operator to use (e.g. 'union', 'union all', 'intersect', 'except')
|
17
|
+
* @returns BinarySelectQuery
|
18
|
+
*/
|
19
|
+
static buildBinaryQuery(queries, operator) {
|
20
|
+
if (!queries || queries.length === 0) {
|
21
|
+
throw new Error("No queries provided to combine.");
|
22
|
+
}
|
23
|
+
if (queries.length === 1) {
|
24
|
+
throw new Error("At least two queries are required to create a BinarySelectQuery.");
|
25
|
+
}
|
26
|
+
// Always create a new BinarySelectQuery instance (never mutate input)
|
27
|
+
const wrap = (q) => q instanceof ValuesQuery ? QueryBuilder.buildSimpleQuery(q) : q;
|
28
|
+
let result = new BinarySelectQuery(wrap(queries[0]), operator, wrap(queries[1]));
|
29
|
+
CTENormalizer.normalize(result);
|
30
|
+
for (let i = 2; i < queries.length; i++) {
|
31
|
+
result.appendSelectQuery(operator, wrap(queries[i]));
|
32
|
+
}
|
33
|
+
return result;
|
34
|
+
}
|
35
|
+
constructor() {
|
36
|
+
// This class is not meant to be instantiated.
|
37
|
+
}
|
38
|
+
/**
|
39
|
+
* Converts a SELECT query to a standard SimpleSelectQuery form.
|
40
|
+
* @param query The query to convert
|
41
|
+
* @returns A SimpleSelectQuery
|
42
|
+
*/
|
43
|
+
static buildSimpleQuery(query) {
|
44
|
+
if (query instanceof SimpleSelectQuery) {
|
45
|
+
return query;
|
46
|
+
}
|
47
|
+
else if (query instanceof BinarySelectQuery) {
|
48
|
+
return QueryBuilder.buildSimpleBinaryQuery(query);
|
49
|
+
}
|
50
|
+
else if (query instanceof ValuesQuery) {
|
51
|
+
return QueryBuilder.buildSimpleValuesQuery(query);
|
52
|
+
}
|
53
|
+
throw new Error("Unsupported query type for buildSimpleQuery");
|
54
|
+
}
|
55
|
+
static buildSimpleBinaryQuery(query) {
|
56
|
+
// Create a subquery source from the binary query
|
57
|
+
const subQuerySource = new SubQuerySource(query);
|
58
|
+
// Create a source expression with alias
|
59
|
+
const sourceExpr = new SourceExpression(subQuerySource, new SourceAliasExpression("bq", null));
|
60
|
+
// Create FROM clause with the source expression
|
61
|
+
const fromClause = new FromClause(sourceExpr, null);
|
62
|
+
// Create SELECT clause with * (all columns)
|
63
|
+
const selectClause = QueryBuilder.createSelectAllClause();
|
64
|
+
// Create the final simple select query
|
65
|
+
const q = new SimpleSelectQuery(null, // No WITH clause
|
66
|
+
selectClause, fromClause, null, // No WHERE
|
67
|
+
null, // No GROUP BY
|
68
|
+
null, // No HAVING
|
69
|
+
null, // No ORDER BY
|
70
|
+
null, // No WINDOW
|
71
|
+
null, // No LIMIT
|
72
|
+
null // No FOR
|
73
|
+
);
|
74
|
+
return CTENormalizer.normalize(q);
|
75
|
+
}
|
76
|
+
/**
|
77
|
+
* Converts a ValuesQuery to a SimpleSelectQuery with sequentially numbered columns or user-specified columns
|
78
|
+
*
|
79
|
+
* @param query The VALUES query to convert
|
80
|
+
* @param columns Optional: column names
|
81
|
+
* @returns A SimpleSelectQuery
|
82
|
+
*/
|
83
|
+
static buildSimpleValuesQuery(query) {
|
84
|
+
// Figure out how many columns are in the VALUES clause
|
85
|
+
const columnCount = query.tuples.length > 0 ? query.tuples[0].values.length : 0;
|
86
|
+
if (query.tuples.length === 0) {
|
87
|
+
throw new Error("Empty VALUES clause cannot be converted to a SimpleSelectQuery");
|
88
|
+
}
|
89
|
+
if (!query.columnAliases) {
|
90
|
+
throw new Error("Column aliases are required to convert a VALUES clause to SimpleSelectQuery. Please specify column aliases.");
|
91
|
+
}
|
92
|
+
if (query.columnAliases.length !== columnCount) {
|
93
|
+
throw new Error(`The number of column aliases (${query.columnAliases.length}) does not match the number of columns in the first tuple (${columnCount}).`);
|
94
|
+
}
|
95
|
+
// Create a subquery source from the VALUES query
|
96
|
+
const subQuerySource = new SubQuerySource(query);
|
97
|
+
const sourceExpr = new SourceExpression(subQuerySource, new SourceAliasExpression("vq", query.columnAliases));
|
98
|
+
// Create FROM clause with the source expression
|
99
|
+
const fromClause = new FromClause(sourceExpr, null);
|
100
|
+
// Create SELECT clause with all columns
|
101
|
+
const selectItems = query.columnAliases.map(name => new SelectItem(new ColumnReference("vq", name), name));
|
102
|
+
const selectClause = new SelectClause(selectItems, null);
|
103
|
+
// Create the final simple select query
|
104
|
+
return new SimpleSelectQuery(null, // No WITH clause
|
105
|
+
selectClause, fromClause, null, // No WHERE
|
106
|
+
null, // No GROUP BY
|
107
|
+
null, // No HAVING
|
108
|
+
null, // No ORDER BY
|
109
|
+
null, // No WINDOW
|
110
|
+
null, // No LIMIT
|
111
|
+
null // No FOR
|
112
|
+
);
|
113
|
+
}
|
114
|
+
/**
|
115
|
+
* Creates a SELECT clause with a single * (all columns) item
|
116
|
+
*
|
117
|
+
* @returns A SELECT clause with *
|
118
|
+
*/
|
119
|
+
static createSelectAllClause() {
|
120
|
+
// Create a column reference for *
|
121
|
+
const columnRef = new ColumnReference(null, "*");
|
122
|
+
// Create a SelectItem with the column reference
|
123
|
+
const selectItem = new SelectItem(columnRef, "*");
|
124
|
+
// Create and return a SelectClause with the item
|
125
|
+
return new SelectClause([selectItem], null);
|
126
|
+
}
|
127
|
+
/**
|
128
|
+
* Converts a SELECT query to a CREATE TABLE query (CREATE [TEMPORARY] TABLE ... AS SELECT ...)
|
129
|
+
* @param query The SELECT query to use as the source
|
130
|
+
* @param tableName The name of the table to create
|
131
|
+
* @param isTemporary If true, creates a temporary table
|
132
|
+
* @returns A CreateTableQuery instance
|
133
|
+
*/
|
134
|
+
static buildCreateTableQuery(query, tableName, isTemporary = false) {
|
135
|
+
return new CreateTableQuery({
|
136
|
+
tableName,
|
137
|
+
isTemporary,
|
138
|
+
asSelectQuery: query
|
139
|
+
});
|
140
|
+
}
|
141
|
+
/**
|
142
|
+
* Converts a SELECT query to an INSERT query (INSERT INTO ... SELECT ...)
|
143
|
+
* @param selectQuery The SELECT query to use as the source
|
144
|
+
* @param tableName The name of the table to insert into
|
145
|
+
* @param columns Optional: array of column names. If omitted, columns are inferred from the selectQuery
|
146
|
+
* @returns An InsertQuery instance
|
147
|
+
*/
|
148
|
+
static buildInsertQuery(selectQuery, tableName) {
|
149
|
+
let cols;
|
150
|
+
const count = selectQuery.selectClause.items.length;
|
151
|
+
// Try to infer columns from the selectQuery
|
152
|
+
const collector = new SelectValueCollector();
|
153
|
+
const items = collector.collect(selectQuery);
|
154
|
+
cols = items.map(item => item.name);
|
155
|
+
if (!cols.length || count !== cols.length) {
|
156
|
+
throw new Error(`Columns cannot be inferred from the selectQuery. ` +
|
157
|
+
`Make sure you are not using wildcards or unnamed columns.\n` +
|
158
|
+
`Select clause column count: ${count}, ` +
|
159
|
+
`Columns with valid names: ${cols.length}\n` +
|
160
|
+
`Detected column names: [${cols.join(", ")}]`);
|
161
|
+
}
|
162
|
+
return new InsertQuery({
|
163
|
+
namespaces: null,
|
164
|
+
table: tableName,
|
165
|
+
columns: cols,
|
166
|
+
selectQuery: selectQuery
|
167
|
+
});
|
168
|
+
}
|
169
|
+
}
|
170
|
+
//# sourceMappingURL=QueryBuilder.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"QueryBuilder.js","sourceRoot":"","sources":["../../../src/transformers/QueryBuilder.ts"],"names":[],"mappings":"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"}
|
@@ -1,4 +1,5 @@
|
|
1
1
|
export * from './parsers/SelectQueryParser';
|
2
|
+
export * from './parsers/InsertQueryParser';
|
2
3
|
export * from './models/BinarySelectQuery';
|
3
4
|
export * from './models/SelectQuery';
|
4
5
|
export * from './models/ValueComponent';
|
@@ -6,7 +7,7 @@ export * from './models/ValuesQuery';
|
|
6
7
|
export * from './transformers/CTECollector';
|
7
8
|
export * from './transformers/CTENormalizer';
|
8
9
|
export * from './transformers/Formatter';
|
9
|
-
export * from './transformers/
|
10
|
+
export * from './transformers/QueryBuilder';
|
10
11
|
export * from './transformers/SelectValueCollector';
|
11
12
|
export * from './transformers/SelectableColumnCollector';
|
12
13
|
export * from './transformers/TableColumnResolver';
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import { SqlComponent } from "./SqlComponent";
|
2
|
+
import type { SelectQuery } from "./SelectQuery";
|
3
|
+
import { IdentifierString } from "./ValueComponent";
|
4
|
+
import { SimpleSelectQuery } from "./SimpleSelectQuery";
|
5
|
+
export declare class CreateTableQuery extends SqlComponent {
|
6
|
+
/** SqlComponent kind symbol for visitor pattern */
|
7
|
+
static kind: symbol;
|
8
|
+
/** Table name (with optional schema) */
|
9
|
+
tableName: IdentifierString;
|
10
|
+
/** If true, this is a temporary table */
|
11
|
+
isTemporary: boolean;
|
12
|
+
/** Optional: SELECT query for AS SELECT ... */
|
13
|
+
asSelectQuery?: SelectQuery;
|
14
|
+
constructor(params: {
|
15
|
+
tableName: string;
|
16
|
+
isTemporary?: boolean;
|
17
|
+
asSelectQuery?: SelectQuery;
|
18
|
+
});
|
19
|
+
/**
|
20
|
+
* Returns a SelectQuery that selects all columns from this table.
|
21
|
+
*/
|
22
|
+
getSelectQuery(): SimpleSelectQuery;
|
23
|
+
/**
|
24
|
+
* Returns a SelectQuery that counts all rows in this table.
|
25
|
+
*/
|
26
|
+
getCountQuery(): SimpleSelectQuery;
|
27
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import { SqlComponent } from "./SqlComponent";
|
2
|
+
import { IdentifierString } from "./ValueComponent";
|
3
|
+
import { SelectQuery } from "./SelectQuery";
|
4
|
+
export declare class InsertQuery extends SqlComponent {
|
5
|
+
static kind: symbol;
|
6
|
+
namespaces: IdentifierString[] | null;
|
7
|
+
table: IdentifierString;
|
8
|
+
columns: IdentifierString[];
|
9
|
+
selectQuery: SelectQuery | null;
|
10
|
+
/**
|
11
|
+
* @param params.table Table name (string or IdentifierString)
|
12
|
+
* @param params.columns Array of column names (string[] or IdentifierString[])
|
13
|
+
* @param params.selectQuery SELECT/VALUES query (required)
|
14
|
+
*/
|
15
|
+
constructor(params: {
|
16
|
+
namespaces: (string | IdentifierString)[] | null;
|
17
|
+
table: string | IdentifierString;
|
18
|
+
columns: (string | IdentifierString)[];
|
19
|
+
selectQuery?: SelectQuery | null;
|
20
|
+
});
|
21
|
+
}
|
@@ -1,5 +1,6 @@
|
|
1
|
+
import { InsertQuery } from "./InsertQuery";
|
1
2
|
import { SimpleSelectQuery } from "./SimpleSelectQuery";
|
2
3
|
import { BinarySelectQuery } from "./BinarySelectQuery";
|
3
4
|
import { ValuesQuery } from "./ValuesQuery";
|
4
|
-
export type SelectQuery = SimpleSelectQuery | BinarySelectQuery | ValuesQuery;
|
5
|
-
export { SimpleSelectQuery, BinarySelectQuery, ValuesQuery };
|
5
|
+
export type SelectQuery = SimpleSelectQuery | BinarySelectQuery | ValuesQuery | InsertQuery;
|
6
|
+
export { SimpleSelectQuery, BinarySelectQuery, ValuesQuery, InsertQuery };
|
@@ -16,7 +16,7 @@ export declare class ColumnReference extends SqlComponent {
|
|
16
16
|
static kind: symbol;
|
17
17
|
namespaces: IdentifierString[] | null;
|
18
18
|
column: IdentifierString;
|
19
|
-
constructor(namespaces: string[] | null, column: string);
|
19
|
+
constructor(namespaces: string | string[] | null, column: string);
|
20
20
|
toString(): string;
|
21
21
|
getNamespace(): string;
|
22
22
|
}
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { SimpleSelectQuery } from "./SimpleSelectQuery";
|
1
2
|
import { SqlComponent } from "./SqlComponent";
|
2
3
|
import { TupleExpression } from "./ValueComponent";
|
3
4
|
/**
|
@@ -6,5 +7,12 @@ import { TupleExpression } from "./ValueComponent";
|
|
6
7
|
export declare class ValuesQuery extends SqlComponent {
|
7
8
|
static kind: symbol;
|
8
9
|
tuples: TupleExpression[];
|
9
|
-
|
10
|
+
/**
|
11
|
+
* Column aliases for the VALUES query.
|
12
|
+
* These represent the logical column names for each value tuple.
|
13
|
+
* Note: This property is optional and is not referenced during SQL output, but is used when converting to a SimpleSelectQuery.
|
14
|
+
*/
|
15
|
+
columnAliases: string[] | null;
|
16
|
+
constructor(tuples: TupleExpression[], columnAliases?: string[] | null);
|
17
|
+
toSimpleSelectQuery(): SimpleSelectQuery;
|
10
18
|
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { InsertQuery } from "../models/InsertQuery";
|
2
|
+
import { Lexeme } from "../models/Lexeme";
|
3
|
+
export declare class InsertQueryParser {
|
4
|
+
/**
|
5
|
+
* Parse SQL string to InsertQuery AST.
|
6
|
+
* @param query SQL string
|
7
|
+
*/
|
8
|
+
static parse(query: string): InsertQuery;
|
9
|
+
/**
|
10
|
+
* Parse from lexeme array (for internal use and tests)
|
11
|
+
*/
|
12
|
+
static parseFromLexeme(lexemes: Lexeme[], index: number): {
|
13
|
+
value: InsertQuery;
|
14
|
+
newIndex: number;
|
15
|
+
};
|
16
|
+
private static parseFullQualifiedName;
|
17
|
+
}
|
@@ -1,9 +1,10 @@
|
|
1
1
|
import { BaseTokenReader } from './BaseTokenReader';
|
2
2
|
import { Lexeme } from '../models/Lexeme';
|
3
3
|
/**
|
4
|
-
* Reads SQL parameter tokens (@param, :param, $param,
|
4
|
+
* Reads SQL parameter tokens (@param, :param, $param, ?, ${param})
|
5
5
|
*/
|
6
6
|
export declare class ParameterTokenReader extends BaseTokenReader {
|
7
|
+
constructor(input: string);
|
7
8
|
/**
|
8
9
|
* Try to read a parameter token
|
9
10
|
*/
|
@@ -1,12 +1,24 @@
|
|
1
1
|
import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent";
|
2
2
|
interface FormatterConfig {
|
3
|
-
identifierEscape
|
3
|
+
identifierEscape?: {
|
4
4
|
start: string;
|
5
5
|
end: string;
|
6
6
|
};
|
7
|
-
parameterSymbol
|
7
|
+
parameterSymbol?: string | {
|
8
|
+
start: string;
|
9
|
+
end: string;
|
10
|
+
};
|
11
|
+
/**
|
12
|
+
* If false, named parameters are not supported (e.g. MySQL: use only '?').
|
13
|
+
* If true (default), named parameters are output (e.g. :userId, @userId).
|
14
|
+
*/
|
15
|
+
supportNamedParameter?: boolean;
|
8
16
|
}
|
9
17
|
export declare class Formatter implements SqlComponentVisitor<string> {
|
18
|
+
/**
|
19
|
+
* Preset configs for common DB dialects.
|
20
|
+
*/
|
21
|
+
static readonly PRESETS: Record<string, FormatterConfig>;
|
10
22
|
private handlers;
|
11
23
|
private config;
|
12
24
|
constructor();
|
@@ -78,5 +90,10 @@ export declare class Formatter implements SqlComponentVisitor<string> {
|
|
78
90
|
private visitIdentifierString;
|
79
91
|
private visitValuesQuery;
|
80
92
|
private visitTupleExpression;
|
93
|
+
/**
|
94
|
+
* Formats a CreateTableQuery into SQL string.
|
95
|
+
*/
|
96
|
+
private visitCreateTableQuery;
|
97
|
+
private visitInsertQuery;
|
81
98
|
}
|
82
99
|
export {};
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import { BinarySelectQuery, SelectQuery, SimpleSelectQuery } from "../models/SelectQuery";
|
2
|
+
import { CreateTableQuery } from "../models/CreateTableQuery";
|
3
|
+
import { InsertQuery } from "../models/InsertQuery";
|
4
|
+
/**
|
5
|
+
* QueryBuilder provides static methods to build or convert various SQL query objects.
|
6
|
+
*/
|
7
|
+
export declare class QueryBuilder {
|
8
|
+
/**
|
9
|
+
* Builds a BinarySelectQuery by combining an array of SelectQuery using the specified operator.
|
10
|
+
* Throws if less than two queries are provided.
|
11
|
+
* @param queries Array of SelectQuery to combine
|
12
|
+
* @param operator SQL operator to use (e.g. 'union', 'union all', 'intersect', 'except')
|
13
|
+
* @returns BinarySelectQuery
|
14
|
+
*/
|
15
|
+
static buildBinaryQuery(queries: SelectQuery[], operator: string): BinarySelectQuery;
|
16
|
+
private constructor();
|
17
|
+
/**
|
18
|
+
* Converts a SELECT query to a standard SimpleSelectQuery form.
|
19
|
+
* @param query The query to convert
|
20
|
+
* @returns A SimpleSelectQuery
|
21
|
+
*/
|
22
|
+
static buildSimpleQuery(query: SelectQuery): SimpleSelectQuery;
|
23
|
+
private static buildSimpleBinaryQuery;
|
24
|
+
/**
|
25
|
+
* Converts a ValuesQuery to a SimpleSelectQuery with sequentially numbered columns or user-specified columns
|
26
|
+
*
|
27
|
+
* @param query The VALUES query to convert
|
28
|
+
* @param columns Optional: column names
|
29
|
+
* @returns A SimpleSelectQuery
|
30
|
+
*/
|
31
|
+
private static buildSimpleValuesQuery;
|
32
|
+
/**
|
33
|
+
* Creates a SELECT clause with a single * (all columns) item
|
34
|
+
*
|
35
|
+
* @returns A SELECT clause with *
|
36
|
+
*/
|
37
|
+
private static createSelectAllClause;
|
38
|
+
/**
|
39
|
+
* Converts a SELECT query to a CREATE TABLE query (CREATE [TEMPORARY] TABLE ... AS SELECT ...)
|
40
|
+
* @param query The SELECT query to use as the source
|
41
|
+
* @param tableName The name of the table to create
|
42
|
+
* @param isTemporary If true, creates a temporary table
|
43
|
+
* @returns A CreateTableQuery instance
|
44
|
+
*/
|
45
|
+
static buildCreateTableQuery(query: SelectQuery, tableName: string, isTemporary?: boolean): CreateTableQuery;
|
46
|
+
/**
|
47
|
+
* Converts a SELECT query to an INSERT query (INSERT INTO ... SELECT ...)
|
48
|
+
* @param selectQuery The SELECT query to use as the source
|
49
|
+
* @param tableName The name of the table to insert into
|
50
|
+
* @param columns Optional: array of column names. If omitted, columns are inferred from the selectQuery
|
51
|
+
* @returns An InsertQuery instance
|
52
|
+
*/
|
53
|
+
static buildInsertQuery(selectQuery: SimpleSelectQuery, tableName: string): InsertQuery;
|
54
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { Lexeme } from "../models/Lexeme";
|
2
|
+
/**
|
3
|
+
* Parses SQL Server-style escaped identifiers ([table]) and dot-separated identifiers.
|
4
|
+
* Returns the list of identifiers and the new index after parsing.
|
5
|
+
*/
|
6
|
+
export declare function parseEscapedOrDotSeparatedIdentifiers(lexemes: Lexeme[], index: number): {
|
7
|
+
identifiers: string[];
|
8
|
+
newIndex: number;
|
9
|
+
};
|
@@ -0,0 +1,16 @@
|
|
1
|
+
// Utility to extract namespaces and the final name from an array of identifiers
|
2
|
+
// Example: ["db", "schema", "users"] => { namespaces: ["db", "schema"], name: "users" }
|
3
|
+
function extractNamespacesAndName(identifiers) {
|
4
|
+
if (!identifiers || identifiers.length === 0) {
|
5
|
+
throw new Error("Identifier list is empty");
|
6
|
+
}
|
7
|
+
if (identifiers.length === 1) {
|
8
|
+
return { namespaces: null, name: identifiers[0] };
|
9
|
+
}
|
10
|
+
return {
|
11
|
+
namespaces: identifiers.slice(0, -1),
|
12
|
+
name: identifiers[identifiers.length - 1]
|
13
|
+
};
|
14
|
+
}
|
15
|
+
export { extractNamespacesAndName };
|
16
|
+
//# sourceMappingURL=extractNamespacesAndName.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"extractNamespacesAndName.js","sourceRoot":"","sources":["../../../src/utils/extractNamespacesAndName.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,wFAAwF;AACxF,SAAS,wBAAwB,CAAC,WAAqB;IACnD,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,CAAC;IACD,OAAO;QACH,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpC,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;KAC5C,CAAC;AACN,CAAC;AAED,OAAO,EAAE,wBAAwB,EAAE,CAAC"}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import { TokenType } from "../models/Lexeme";
|
2
|
+
/**
|
3
|
+
* Parses SQL Server-style escaped identifiers ([table]) and dot-separated identifiers.
|
4
|
+
* Returns the list of identifiers and the new index after parsing.
|
5
|
+
*/
|
6
|
+
export function parseEscapedOrDotSeparatedIdentifiers(lexemes, index) {
|
7
|
+
let idx = index;
|
8
|
+
const identifiers = [];
|
9
|
+
while (idx < lexemes.length) {
|
10
|
+
if (lexemes[idx].type & TokenType.OpenBracket) {
|
11
|
+
idx++; // skip [
|
12
|
+
if (idx >= lexemes.length || !(lexemes[idx].type & TokenType.Identifier)) {
|
13
|
+
throw new Error(`Expected identifier after '[' at position ${idx}`);
|
14
|
+
}
|
15
|
+
identifiers.push(lexemes[idx].value);
|
16
|
+
idx++;
|
17
|
+
if (idx >= lexemes.length || lexemes[idx].value !== "]") {
|
18
|
+
throw new Error(`Expected closing ']' after identifier at position ${idx}`);
|
19
|
+
}
|
20
|
+
idx++; // skip ]
|
21
|
+
}
|
22
|
+
else if (lexemes[idx].type & TokenType.Identifier) {
|
23
|
+
identifiers.push(lexemes[idx].value);
|
24
|
+
idx++;
|
25
|
+
}
|
26
|
+
else {
|
27
|
+
break;
|
28
|
+
}
|
29
|
+
// Handle dot for schema.table or db.schema.table
|
30
|
+
if (idx < lexemes.length && (lexemes[idx].type & TokenType.Dot)) {
|
31
|
+
idx++; // skip dot
|
32
|
+
}
|
33
|
+
else {
|
34
|
+
break;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
return { identifiers, newIndex: idx };
|
38
|
+
}
|
39
|
+
//# sourceMappingURL=parseEscapedOrDotSeparatedIdentifiers.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"parseEscapedOrDotSeparatedIdentifiers.js","sourceRoot":"","sources":["../../../src/utils/parseEscapedOrDotSeparatedIdentifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAErD;;;GAGG;AACH,MAAM,UAAU,qCAAqC,CAAC,OAAiB,EAAE,KAAa;IAClF,IAAI,GAAG,GAAG,KAAK,CAAC;IAChB,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,OAAO,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;YAC5C,GAAG,EAAE,CAAC,CAAC,SAAS;YAChB,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvE,MAAM,IAAI,KAAK,CAAC,6CAA6C,GAAG,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACrC,GAAG,EAAE,CAAC;YACN,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,qDAAqD,GAAG,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,GAAG,EAAE,CAAC,CAAC,SAAS;QACpB,CAAC;aAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;YAClD,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;YACrC,GAAG,EAAE,CAAC;QACV,CAAC;aAAM,CAAC;YACJ,MAAM;QACV,CAAC;QACD,iDAAiD;QACjD,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9D,GAAG,EAAE,CAAC,CAAC,WAAW;QACtB,CAAC;aAAM,CAAC;YACJ,MAAM;QACV,CAAC;IACL,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC1C,CAAC"}
|
package/dist/index.d.ts
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
export * from './parsers/SelectQueryParser';
|
2
|
+
export * from './parsers/InsertQueryParser';
|
2
3
|
export * from './models/BinarySelectQuery';
|
3
4
|
export * from './models/SelectQuery';
|
4
5
|
export * from './models/ValueComponent';
|
@@ -6,7 +7,7 @@ export * from './models/ValuesQuery';
|
|
6
7
|
export * from './transformers/CTECollector';
|
7
8
|
export * from './transformers/CTENormalizer';
|
8
9
|
export * from './transformers/Formatter';
|
9
|
-
export * from './transformers/
|
10
|
+
export * from './transformers/QueryBuilder';
|
10
11
|
export * from './transformers/SelectValueCollector';
|
11
12
|
export * from './transformers/SelectableColumnCollector';
|
12
13
|
export * from './transformers/TableColumnResolver';
|
package/dist/index.js
CHANGED
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
17
17
|
// Entry point for rawsql-ts package
|
18
18
|
__exportStar(require("./parsers/SelectQueryParser"), exports);
|
19
|
+
__exportStar(require("./parsers/InsertQueryParser"), exports);
|
19
20
|
__exportStar(require("./models/BinarySelectQuery"), exports);
|
20
21
|
__exportStar(require("./models/SelectQuery"), exports);
|
21
22
|
__exportStar(require("./models/ValueComponent"), exports);
|
@@ -23,7 +24,7 @@ __exportStar(require("./models/ValuesQuery"), exports);
|
|
23
24
|
__exportStar(require("./transformers/CTECollector"), exports);
|
24
25
|
__exportStar(require("./transformers/CTENormalizer"), exports);
|
25
26
|
__exportStar(require("./transformers/Formatter"), exports);
|
26
|
-
__exportStar(require("./transformers/
|
27
|
+
__exportStar(require("./transformers/QueryBuilder"), exports); // old name:QueryConverter
|
27
28
|
__exportStar(require("./transformers/SelectValueCollector"), exports);
|
28
29
|
__exportStar(require("./transformers/SelectableColumnCollector"), exports);
|
29
30
|
__exportStar(require("./transformers/TableColumnResolver"), exports);
|
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;AAE5C,6DAA2C;AAC3C,uDAAqC;AACrC,0DAAwC;AACxC,uDAAqC;AAErC,8DAA4C;AAC5C,+DAA6C;AAC7C,2DAAyC;AACzC,
|
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,CAAC,0BAA0B;AACvE,sEAAoD;AACpD,2EAAyD;AACzD,qEAAmD;AACnD,sEAAoD;AACpD,2EAAyD;AACzD,oEAAoE"}
|
@@ -95,8 +95,6 @@ class BinarySelectQuery extends SqlComponent_1.SqlComponent {
|
|
95
95
|
this.left = new BinarySelectQuery(this.left, this.operator.value, this.right);
|
96
96
|
this.operator = new ValueComponent_1.RawString(operator);
|
97
97
|
this.right = query;
|
98
|
-
// const normalizer = new CTENormalizer();
|
99
|
-
// normalizer.normalize(this);
|
100
98
|
CTENormalizer_1.CTENormalizer.normalize(this);
|
101
99
|
return this;
|
102
100
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"BinarySelectQuery.js","sourceRoot":"","sources":["../../src/models/BinarySelectQuery.ts"],"names":[],"mappings":";;;AAAA,qCAAmF;
|
1
|
+
{"version":3,"file":"BinarySelectQuery.js","sourceRoot":"","sources":["../../src/models/BinarySelectQuery.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import { SqlComponent } from "./SqlComponent";
|
2
|
+
import type { SelectQuery } from "./SelectQuery";
|
3
|
+
import { IdentifierString } from "./ValueComponent";
|
4
|
+
import { SimpleSelectQuery } from "./SimpleSelectQuery";
|
5
|
+
export declare class CreateTableQuery extends SqlComponent {
|
6
|
+
/** SqlComponent kind symbol for visitor pattern */
|
7
|
+
static kind: symbol;
|
8
|
+
/** Table name (with optional schema) */
|
9
|
+
tableName: IdentifierString;
|
10
|
+
/** If true, this is a temporary table */
|
11
|
+
isTemporary: boolean;
|
12
|
+
/** Optional: SELECT query for AS SELECT ... */
|
13
|
+
asSelectQuery?: SelectQuery;
|
14
|
+
constructor(params: {
|
15
|
+
tableName: string;
|
16
|
+
isTemporary?: boolean;
|
17
|
+
asSelectQuery?: SelectQuery;
|
18
|
+
});
|
19
|
+
/**
|
20
|
+
* Returns a SelectQuery that selects all columns from this table.
|
21
|
+
*/
|
22
|
+
getSelectQuery(): SimpleSelectQuery;
|
23
|
+
/**
|
24
|
+
* Returns a SelectQuery that counts all rows in this table.
|
25
|
+
*/
|
26
|
+
getCountQuery(): SimpleSelectQuery;
|
27
|
+
}
|