rawsql-ts 0.1.2-beta → 0.2.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 +122 -0
- package/dist/esm/models/Clause.js +2 -2
- package/dist/esm/models/Clause.js.map +1 -1
- package/dist/esm/models/Lexeme.js +15 -14
- package/dist/esm/models/Lexeme.js.map +1 -1
- package/dist/esm/models/SimpleSelectQuery.js +95 -25
- package/dist/esm/models/SimpleSelectQuery.js.map +1 -1
- package/dist/esm/parsers/CommandExpressionParser.js +4 -4
- package/dist/esm/parsers/CommandExpressionParser.js.map +1 -1
- package/dist/esm/parsers/FunctionExpressionParser.js +10 -10
- package/dist/esm/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/esm/parsers/GroupByParser.js +1 -1
- package/dist/esm/parsers/GroupByParser.js.map +1 -1
- package/dist/esm/parsers/IdentifierParser.js +2 -2
- package/dist/esm/parsers/IdentifierParser.js.map +1 -1
- package/dist/esm/parsers/JoinClauseParser.js +1 -1
- package/dist/esm/parsers/JoinClauseParser.js.map +1 -1
- package/dist/esm/parsers/OrderByClauseParser.js +1 -1
- package/dist/esm/parsers/OrderByClauseParser.js.map +1 -1
- package/dist/esm/parsers/OverExpressionParser.js +2 -2
- package/dist/esm/parsers/OverExpressionParser.js.map +1 -1
- package/dist/esm/parsers/ParenExpressionParser.js +1 -1
- package/dist/esm/parsers/ParenExpressionParser.js.map +1 -1
- package/dist/esm/parsers/PartitionByParser.js +1 -1
- package/dist/esm/parsers/PartitionByParser.js.map +1 -1
- package/dist/esm/parsers/SelectClauseParser.js +11 -5
- package/dist/esm/parsers/SelectClauseParser.js.map +1 -1
- package/dist/esm/parsers/SelectQueryParser.js +21 -0
- package/dist/esm/parsers/SelectQueryParser.js.map +1 -1
- package/dist/esm/parsers/SourceAliasExpressionParser.js +5 -5
- package/dist/esm/parsers/SourceAliasExpressionParser.js.map +1 -1
- package/dist/esm/parsers/SourceExpressionParser.js +1 -1
- package/dist/esm/parsers/SourceExpressionParser.js.map +1 -1
- package/dist/esm/parsers/SourceParser.js +4 -4
- package/dist/esm/parsers/SourceParser.js.map +1 -1
- package/dist/esm/parsers/SqlTokenizer.js +1 -1
- package/dist/esm/parsers/SqlTokenizer.js.map +1 -1
- package/dist/esm/parsers/UnaryExpressionParser.js +1 -1
- package/dist/esm/parsers/UnaryExpressionParser.js.map +1 -1
- package/dist/esm/parsers/ValueParser.js +28 -12
- package/dist/esm/parsers/ValueParser.js.map +1 -1
- package/dist/esm/parsers/ValuesQueryParser.js +3 -3
- package/dist/esm/parsers/ValuesQueryParser.js.map +1 -1
- package/dist/esm/parsers/WindowExpressionParser.js +3 -3
- package/dist/esm/parsers/WindowExpressionParser.js.map +1 -1
- package/dist/esm/parsers/WithClauseParser.js +1 -1
- package/dist/esm/parsers/WithClauseParser.js.map +1 -1
- package/dist/esm/tokenReaders/BaseTokenReader.js +1 -3
- package/dist/esm/tokenReaders/BaseTokenReader.js.map +1 -1
- package/dist/esm/tokenReaders/OperatorTokenReader.js +36 -2
- package/dist/esm/tokenReaders/OperatorTokenReader.js.map +1 -1
- package/dist/esm/tokenReaders/TypeTokenReader.js +3 -3
- package/dist/esm/tokenReaders/TypeTokenReader.js.map +1 -1
- package/dist/esm/transformers/CTEDisabler.js +2 -1
- package/dist/esm/transformers/CTEDisabler.js.map +1 -1
- package/dist/esm/transformers/Formatter.js +3 -4
- package/dist/esm/transformers/Formatter.js.map +1 -1
- package/dist/esm/transformers/SelectValueCollector.js +11 -16
- package/dist/esm/transformers/SelectValueCollector.js.map +1 -1
- package/dist/esm/transformers/SelectableColumnCollector.js +7 -10
- package/dist/esm/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/esm/transformers/UpstreamSelectQueryFinder.js.map +1 -1
- package/dist/esm/types/models/Clause.d.ts +4 -5
- package/dist/esm/types/models/Lexeme.d.ts +16 -16
- package/dist/esm/types/models/SimpleSelectQuery.d.ts +39 -8
- package/dist/esm/types/parsers/SelectQueryParser.d.ts +7 -0
- package/dist/esm/types/tokenReaders/BaseTokenReader.d.ts +1 -1
- package/dist/esm/types/transformers/Formatter.d.ts +1 -1
- package/dist/esm/types/transformers/SelectValueCollector.d.ts +2 -4
- package/dist/esm/types/transformers/SelectableColumnCollector.d.ts +3 -3
- package/dist/esm/types/transformers/UpstreamSelectQueryFinder.d.ts +2 -2
- package/dist/models/Clause.d.ts +4 -5
- package/dist/models/Clause.js +2 -2
- package/dist/models/Clause.js.map +1 -1
- package/dist/models/Lexeme.d.ts +16 -16
- package/dist/models/Lexeme.js +15 -14
- package/dist/models/Lexeme.js.map +1 -1
- package/dist/models/SimpleSelectQuery.d.ts +39 -8
- package/dist/models/SimpleSelectQuery.js +95 -25
- package/dist/models/SimpleSelectQuery.js.map +1 -1
- package/dist/parsers/CommandExpressionParser.js +4 -4
- package/dist/parsers/CommandExpressionParser.js.map +1 -1
- package/dist/parsers/FunctionExpressionParser.js +10 -10
- package/dist/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/parsers/GroupByParser.js +1 -1
- package/dist/parsers/GroupByParser.js.map +1 -1
- package/dist/parsers/IdentifierParser.js +2 -2
- package/dist/parsers/IdentifierParser.js.map +1 -1
- package/dist/parsers/JoinClauseParser.js +1 -1
- package/dist/parsers/JoinClauseParser.js.map +1 -1
- package/dist/parsers/OrderByClauseParser.js +1 -1
- package/dist/parsers/OrderByClauseParser.js.map +1 -1
- package/dist/parsers/OverExpressionParser.js +2 -2
- package/dist/parsers/OverExpressionParser.js.map +1 -1
- package/dist/parsers/ParenExpressionParser.js +1 -1
- package/dist/parsers/ParenExpressionParser.js.map +1 -1
- package/dist/parsers/PartitionByParser.js +1 -1
- package/dist/parsers/PartitionByParser.js.map +1 -1
- package/dist/parsers/SelectClauseParser.js +11 -5
- package/dist/parsers/SelectClauseParser.js.map +1 -1
- package/dist/parsers/SelectQueryParser.d.ts +7 -0
- package/dist/parsers/SelectQueryParser.js +21 -0
- package/dist/parsers/SelectQueryParser.js.map +1 -1
- package/dist/parsers/SourceAliasExpressionParser.js +5 -5
- package/dist/parsers/SourceAliasExpressionParser.js.map +1 -1
- package/dist/parsers/SourceExpressionParser.js +1 -1
- package/dist/parsers/SourceExpressionParser.js.map +1 -1
- package/dist/parsers/SourceParser.js +4 -4
- package/dist/parsers/SourceParser.js.map +1 -1
- package/dist/parsers/SqlTokenizer.js +1 -1
- package/dist/parsers/SqlTokenizer.js.map +1 -1
- package/dist/parsers/UnaryExpressionParser.js +1 -1
- package/dist/parsers/UnaryExpressionParser.js.map +1 -1
- package/dist/parsers/ValueParser.js +27 -11
- package/dist/parsers/ValueParser.js.map +1 -1
- package/dist/parsers/ValuesQueryParser.js +3 -3
- package/dist/parsers/ValuesQueryParser.js.map +1 -1
- package/dist/parsers/WindowExpressionParser.js +3 -3
- package/dist/parsers/WindowExpressionParser.js.map +1 -1
- package/dist/parsers/WithClauseParser.js +1 -1
- package/dist/parsers/WithClauseParser.js.map +1 -1
- package/dist/tokenReaders/BaseTokenReader.d.ts +1 -1
- package/dist/tokenReaders/BaseTokenReader.js +1 -3
- package/dist/tokenReaders/BaseTokenReader.js.map +1 -1
- package/dist/tokenReaders/OperatorTokenReader.js +36 -2
- package/dist/tokenReaders/OperatorTokenReader.js.map +1 -1
- package/dist/tokenReaders/TypeTokenReader.js +3 -3
- package/dist/tokenReaders/TypeTokenReader.js.map +1 -1
- package/dist/transformers/CTEDisabler.js +2 -1
- package/dist/transformers/CTEDisabler.js.map +1 -1
- package/dist/transformers/Formatter.d.ts +1 -1
- package/dist/transformers/Formatter.js +3 -4
- package/dist/transformers/Formatter.js.map +1 -1
- package/dist/transformers/SelectValueCollector.d.ts +2 -4
- package/dist/transformers/SelectValueCollector.js +10 -15
- package/dist/transformers/SelectValueCollector.js.map +1 -1
- package/dist/transformers/SelectableColumnCollector.d.ts +3 -3
- package/dist/transformers/SelectableColumnCollector.js +6 -9
- package/dist/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/transformers/UpstreamSelectQueryFinder.d.ts +2 -2
- package/dist/transformers/UpstreamSelectQueryFinder.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
@@ -91,6 +91,8 @@ console.log(formattedSql);
|
|
91
91
|
Represents a standard SELECT statement. Supports all major clauses such as WHERE, GROUP BY, JOIN, and CTE.
|
92
92
|
- `toUnion`, `toUnionAll`, ... for UNION operations
|
93
93
|
- `appendWhere`, `appendWhereRaw` to add WHERE conditions
|
94
|
+
- `appendWhereExpr` to add a WHERE condition using the column's SQL expression (see below)
|
95
|
+
- `overrideSelectItemExpr` to override a SELECT item using its SQL expression (see below)
|
94
96
|
- `innerJoin`, `leftJoin`, ... to add JOINs
|
95
97
|
- `toSource` to wrap as a subquery
|
96
98
|
- `appendWith`, `appendWithRaw` to add CTEs
|
@@ -104,6 +106,126 @@ console.log(formattedSql);
|
|
104
106
|
- **ValuesQuery**
|
105
107
|
For inline tables like `VALUES (1, 'a'), (2, 'b')`.
|
106
108
|
- Can be used as a subquery or converted to SELECT with QueryNormalizer
|
109
|
+
---
|
110
|
+
|
111
|
+
## Advanced Expression-based Methods
|
112
|
+
|
113
|
+
### appendWhereExpr
|
114
|
+
`appendWhereExpr` is a highly important feature that enables you to add WHERE conditions using the SQL expression of a column, regardless of whether it is a direct column, an alias, a table alias, or even a calculated expression.
|
115
|
+
|
116
|
+
- **Basic Column**
|
117
|
+
- SQL: `select amount from sales`
|
118
|
+
- API: `query.appendWhereExpr('amount', expr => `${expr} > 100`)`
|
119
|
+
- Result: `where amount > 100`
|
120
|
+
|
121
|
+
- **Alias**
|
122
|
+
- SQL: `select fee as amount from sales`
|
123
|
+
- API: `query.appendWhereExpr('amount', expr => `${expr} > 100`)`
|
124
|
+
- Result: `where fee > 100`
|
125
|
+
|
126
|
+
- **Table Alias**
|
127
|
+
- SQL: `select s.fee as amount from sales as s`
|
128
|
+
- API: `query.appendWhereExpr('amount', expr => `${expr} > 100`)`
|
129
|
+
- Result: `where s.fee > 100`
|
130
|
+
|
131
|
+
- **Expression**
|
132
|
+
- SQL: `select quantity * pack_size as amount from sales`
|
133
|
+
- API: `query.appendWhereExpr('amount', expr => `${expr} > 100`)`
|
134
|
+
- Result: `where quantity * pack_size > 100`
|
135
|
+
|
136
|
+
As long as the column is named (or aliased) as `amount`, `appendWhereExpr` will detect and use the correct SQL expression for the WHERE clause—even if it is a complex calculation or uses table aliases.
|
137
|
+
|
138
|
+
```typescript
|
139
|
+
// Works for any alias, table alias, or expression!
|
140
|
+
query.appendWhereExpr('amount', expr => `${expr} > 100`);
|
141
|
+
```
|
142
|
+
|
143
|
+
#### Upstream Query Support
|
144
|
+
|
145
|
+
`Upstream Query Support` is a powerful extension of `appendWhereExpr` that allows you to add WHERE conditions to all relevant upstream queries that provide a specific column, regardless of the query structure. This means you can target columns defined in subqueries, CTEs (WITH clauses), or even branches of UNION/INTERSECT/EXCEPT, and the condition will be automatically inserted at the correct place in the SQL tree.
|
146
|
+
|
147
|
+
**What does this mean in practice?**
|
148
|
+
- If the column is defined in a subquery, the WHERE condition is added inside that subquery.
|
149
|
+
- If the column is defined in a CTE (WITH clause), the WHERE condition is added inside the CTE.
|
150
|
+
- If the column is provided by multiple upstream queries (e.g., UNION branches), the condition is added to all relevant branches.
|
151
|
+
- You do not need to know or traverse the query structure yourself—just specify the column name, and `appendWhereExpr` with `{ upstream: true }` will do the rest.
|
152
|
+
|
153
|
+
##### Example: Filtering a CTE
|
154
|
+
|
155
|
+
```typescript
|
156
|
+
const query = SelectQueryParser.parse(`
|
157
|
+
WITH temp_sales AS (
|
158
|
+
SELECT id, amount, date FROM sales WHERE date >= '2024-01-01'
|
159
|
+
)
|
160
|
+
SELECT * FROM temp_sales
|
161
|
+
`) as SimpleSelectQuery;
|
162
|
+
|
163
|
+
// Add a filter to the CTE using upstream support
|
164
|
+
query.appendWhereExpr('amount', expr => `${expr} > 100`, { upstream: true });
|
165
|
+
|
166
|
+
const sql = new Formatter().format(query);
|
167
|
+
console.log(sql);
|
168
|
+
// => with "temp_sales" as (select "id", "amount", "date" from "sales" where "date" >= '2024-01-01' and "amount" > 100) select * from "temp_sales"
|
169
|
+
```
|
170
|
+
|
171
|
+
##### Example: Filtering All Branches of a UNION
|
172
|
+
|
173
|
+
```typescript
|
174
|
+
const query = SelectQueryParser.parse(`
|
175
|
+
WITH sales_transactions AS (
|
176
|
+
SELECT transaction_id, customer_id, amount, transaction_date FROM sales_schema.transactions WHERE transaction_date >= CURRENT_DATE - INTERVAL '90 days'
|
177
|
+
),
|
178
|
+
support_transactions AS (
|
179
|
+
SELECT support_id AS transaction_id, user_id AS customer_id, fee AS amount, support_date AS transaction_date FROM support_schema.support_fees WHERE support_date >= CURRENT_DATE - INTERVAL '90 days'
|
180
|
+
)
|
181
|
+
SELECT * FROM (
|
182
|
+
SELECT * FROM sales_transactions
|
183
|
+
UNION ALL
|
184
|
+
SELECT * FROM support_transactions
|
185
|
+
) d
|
186
|
+
ORDER BY transaction_date DESC
|
187
|
+
`) as SimpleSelectQuery;
|
188
|
+
|
189
|
+
// Add a filter to all upstream queries that provide 'amount'
|
190
|
+
query.appendWhereExpr('amount', expr => `${expr} > 100`, { upstream: true });
|
191
|
+
|
192
|
+
const sql = new Formatter().format(query);
|
193
|
+
console.log(sql);
|
194
|
+
// => with "sales_transactions" as (select ... where ... and "amount" > 100),
|
195
|
+
// "support_transactions" as (select ... where ... and "fee" > 100)
|
196
|
+
// select * from (... union all ...) as "d" order by "transaction_date" desc
|
197
|
+
```
|
198
|
+
|
199
|
+
### appendWhereExpr Use Cases
|
200
|
+
|
201
|
+
`appendWhereExpr` is especially useful in the following scenarios:
|
202
|
+
|
203
|
+
- **Dynamic Search Conditions for Complex Reports**
|
204
|
+
Easily inject arbitrary search filters into deeply nested or highly complex queries, such as those used in reporting or analytics dashboards. This enables flexible, user-driven filtering without manual SQL string manipulation.
|
205
|
+
|
206
|
+
- **Performance-Critical Query Construction**
|
207
|
+
Build high-performance queries by programmatically adding WHERE conditions only when needed, ensuring that unnecessary filters are not included and that the generated SQL remains as efficient as possible.
|
208
|
+
|
209
|
+
- **Generic Access Control and Security Filters**
|
210
|
+
Apply reusable access control or security-related WHERE clauses (e.g., tenant isolation, user-based restrictions) across all relevant queries, regardless of their internal structure. This helps enforce consistent data access policies throughout your application.
|
211
|
+
|
212
|
+
> [!TIP]
|
213
|
+
> Upstream Query Support is especially useful for large, complex SQL with multiple layers of subqueries, CTEs, or set operations. You can add filters or conditions without worrying about the internal structure—just specify the column name!
|
214
|
+
>
|
215
|
+
> You can focus on developing and maintaining RawSQL itself, without being bothered by troublesome variable search conditions.
|
216
|
+
|
217
|
+
---
|
218
|
+
|
219
|
+
### overrideSelectItemExpr
|
220
|
+
Overrides a SELECT item using its SQL expression. The callback receives the original SQL expression as a string and returns a new SQL string.
|
221
|
+
|
222
|
+
```typescript
|
223
|
+
// Override the SELECT item 'journal_date' to use greatest(journal_date, DATE '2025-01-01')
|
224
|
+
query.overrideSelectItemExpr('journal_date', expr => `greatest(${expr}, DATE '2025-01-01')`);
|
225
|
+
```
|
226
|
+
---
|
227
|
+
|
228
|
+
|
107
229
|
|
108
230
|
---
|
109
231
|
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import { SqlComponent } from "./SqlComponent";
|
2
2
|
import { IdentifierString, RawString } from "./ValueComponent";
|
3
3
|
export class SelectItem extends SqlComponent {
|
4
|
-
constructor(value, name) {
|
4
|
+
constructor(value, name = null) {
|
5
5
|
super();
|
6
6
|
this.value = value;
|
7
|
-
this.identifier = new IdentifierString(name);
|
7
|
+
this.identifier = name ? new IdentifierString(name) : null;
|
8
8
|
}
|
9
9
|
}
|
10
10
|
SelectItem.kind = Symbol("SelectItem");
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Clause.js","sourceRoot":"","sources":["../../../src/models/Clause.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAA0D,MAAM,kBAAkB,CAAC;
|
1
|
+
{"version":3,"file":"Clause.js","sourceRoot":"","sources":["../../../src/models/Clause.ts"],"names":[],"mappings":"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"}
|
@@ -1,18 +1,19 @@
|
|
1
1
|
export var TokenType;
|
2
2
|
(function (TokenType) {
|
3
|
-
TokenType[TokenType["
|
4
|
-
TokenType[TokenType["
|
5
|
-
TokenType[TokenType["
|
6
|
-
TokenType[TokenType["
|
7
|
-
TokenType[TokenType["
|
8
|
-
TokenType[TokenType["
|
9
|
-
TokenType[TokenType["
|
10
|
-
TokenType[TokenType["
|
11
|
-
TokenType[TokenType["
|
12
|
-
TokenType[TokenType["
|
13
|
-
TokenType[TokenType["
|
14
|
-
TokenType[TokenType["
|
15
|
-
TokenType[TokenType["
|
16
|
-
TokenType[TokenType["
|
3
|
+
TokenType[TokenType["None"] = 0] = "None";
|
4
|
+
TokenType[TokenType["Literal"] = 1] = "Literal";
|
5
|
+
TokenType[TokenType["Operator"] = 2] = "Operator";
|
6
|
+
TokenType[TokenType["OpenParen"] = 4] = "OpenParen";
|
7
|
+
TokenType[TokenType["CloseParen"] = 8] = "CloseParen";
|
8
|
+
TokenType[TokenType["Comma"] = 16] = "Comma";
|
9
|
+
TokenType[TokenType["Dot"] = 32] = "Dot";
|
10
|
+
TokenType[TokenType["Identifier"] = 64] = "Identifier";
|
11
|
+
TokenType[TokenType["Command"] = 128] = "Command";
|
12
|
+
TokenType[TokenType["Parameter"] = 256] = "Parameter";
|
13
|
+
TokenType[TokenType["OpenBracket"] = 512] = "OpenBracket";
|
14
|
+
TokenType[TokenType["CloseBracket"] = 1024] = "CloseBracket";
|
15
|
+
TokenType[TokenType["Function"] = 2048] = "Function";
|
16
|
+
TokenType[TokenType["StringSpecifier"] = 4096] = "StringSpecifier";
|
17
|
+
TokenType[TokenType["Type"] = 8192] = "Type";
|
17
18
|
})(TokenType || (TokenType = {}));
|
18
19
|
//# sourceMappingURL=Lexeme.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Lexeme.js","sourceRoot":"","sources":["../../../src/models/Lexeme.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,
|
1
|
+
{"version":3,"file":"Lexeme.js","sourceRoot":"","sources":["../../../src/models/Lexeme.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,SAgBX;AAhBD,WAAY,SAAS;IACjB,yCAAQ,CAAA;IACR,+CAAgB,CAAA;IAChB,iDAAiB,CAAA;IACjB,mDAAkB,CAAA;IAClB,qDAAmB,CAAA;IACnB,4CAAc,CAAA;IACd,wCAAY,CAAA;IACZ,sDAAmB,CAAA;IACnB,iDAAgB,CAAA;IAChB,qDAAkB,CAAA;IAClB,yDAAoB,CAAA;IACpB,4DAAsB,CAAA;IACtB,oDAAkB,CAAA;IAClB,kEAAyB,CAAA;IACzB,4CAAc,CAAA;AAClB,CAAC,EAhBW,SAAS,KAAT,SAAS,QAgBpB"}
|
@@ -7,6 +7,8 @@ import { SelectableColumnCollector } from "../transformers/SelectableColumnColle
|
|
7
7
|
import { SourceParser } from "../parsers/SourceParser";
|
8
8
|
import { BinarySelectQuery } from "./BinarySelectQuery";
|
9
9
|
import { SelectQueryParser } from "../parsers/SelectQueryParser";
|
10
|
+
import { Formatter } from "../transformers/Formatter";
|
11
|
+
import { UpstreamSelectQueryFinder } from "../transformers/UpstreamSelectQueryFinder";
|
10
12
|
/**
|
11
13
|
* Represents a simple SELECT query in SQL.
|
12
14
|
*/
|
@@ -148,10 +150,10 @@ export class SimpleSelectQuery extends SqlComponent {
|
|
148
150
|
* Appends an INNER JOIN clause to the query.
|
149
151
|
* @param joinSourceRawText The table source text to join (e.g., "my_table", "schema.my_table")
|
150
152
|
* @param alias The alias for the joined table
|
151
|
-
* @param columns The columns to use for the join condition (e.g. ["user_id"])
|
153
|
+
* @param columns The columns to use for the join condition (e.g. ["user_id"] or "user_id")
|
152
154
|
*/
|
153
|
-
innerJoinRaw(joinSourceRawText, alias, columns) {
|
154
|
-
this.joinSourceRaw('inner join', joinSourceRawText, alias, columns);
|
155
|
+
innerJoinRaw(joinSourceRawText, alias, columns, resolver = null) {
|
156
|
+
this.joinSourceRaw('inner join', joinSourceRawText, alias, columns, resolver);
|
155
157
|
}
|
156
158
|
/**
|
157
159
|
* Appends a LEFT JOIN clause to the query.
|
@@ -159,8 +161,8 @@ export class SimpleSelectQuery extends SqlComponent {
|
|
159
161
|
* @param alias The alias for the joined table
|
160
162
|
* @param columns The columns to use for the join condition
|
161
163
|
*/
|
162
|
-
leftJoinRaw(joinSourceRawText, alias, columns) {
|
163
|
-
this.joinSourceRaw('left join', joinSourceRawText, alias, columns);
|
164
|
+
leftJoinRaw(joinSourceRawText, alias, columns, resolver = null) {
|
165
|
+
this.joinSourceRaw('left join', joinSourceRawText, alias, columns, resolver);
|
164
166
|
}
|
165
167
|
/**
|
166
168
|
* Appends a RIGHT JOIN clause to the query.
|
@@ -168,32 +170,32 @@ export class SimpleSelectQuery extends SqlComponent {
|
|
168
170
|
* @param alias The alias for the joined table
|
169
171
|
* @param columns The columns to use for the join condition
|
170
172
|
*/
|
171
|
-
rightJoinRaw(joinSourceRawText, alias, columns) {
|
172
|
-
this.joinSourceRaw('right join', joinSourceRawText, alias, columns);
|
173
|
+
rightJoinRaw(joinSourceRawText, alias, columns, resolver = null) {
|
174
|
+
this.joinSourceRaw('right join', joinSourceRawText, alias, columns, resolver);
|
173
175
|
}
|
174
176
|
/**
|
175
177
|
* Appends an INNER JOIN clause to the query using a SourceExpression.
|
176
178
|
* @param sourceExpr The source expression to join
|
177
179
|
* @param columns The columns to use for the join condition
|
178
180
|
*/
|
179
|
-
innerJoin(sourceExpr, columns) {
|
180
|
-
this.joinSource('inner join', sourceExpr, columns);
|
181
|
+
innerJoin(sourceExpr, columns, resolver = null) {
|
182
|
+
this.joinSource('inner join', sourceExpr, columns, resolver);
|
181
183
|
}
|
182
184
|
/**
|
183
185
|
* Appends a LEFT JOIN clause to the query using a SourceExpression.
|
184
186
|
* @param sourceExpr The source expression to join
|
185
187
|
* @param columns The columns to use for the join condition
|
186
188
|
*/
|
187
|
-
leftJoin(sourceExpr, columns) {
|
188
|
-
this.joinSource('left join', sourceExpr, columns);
|
189
|
+
leftJoin(sourceExpr, columns, resolver = null) {
|
190
|
+
this.joinSource('left join', sourceExpr, columns, resolver);
|
189
191
|
}
|
190
192
|
/**
|
191
193
|
* Appends a RIGHT JOIN clause to the query using a SourceExpression.
|
192
194
|
* @param sourceExpr The source expression to join
|
193
195
|
* @param columns The columns to use for the join condition
|
194
196
|
*/
|
195
|
-
rightJoin(sourceExpr, columns) {
|
196
|
-
this.joinSource('right join', sourceExpr, columns);
|
197
|
+
rightJoin(sourceExpr, columns, resolver = null) {
|
198
|
+
this.joinSource('right join', sourceExpr, columns, resolver);
|
197
199
|
}
|
198
200
|
/**
|
199
201
|
* Internal helper to append a JOIN clause.
|
@@ -202,18 +204,26 @@ export class SimpleSelectQuery extends SqlComponent {
|
|
202
204
|
* @param joinType Type of join (e.g., 'inner join', 'left join')
|
203
205
|
* @param joinSourceRawText Raw text for the table/source to join (e.g., "my_table", "schema.another_table")
|
204
206
|
* @param alias Alias for the table/source being joined
|
205
|
-
* @param columns Array of column names to join on
|
207
|
+
* @param columns Array or string of column names to join on
|
206
208
|
*/
|
207
|
-
joinSourceRaw(joinType, joinSourceRawText, alias, columns) {
|
209
|
+
joinSourceRaw(joinType, joinSourceRawText, alias, columns, resolver = null) {
|
208
210
|
const tableSource = SourceParser.parse(joinSourceRawText);
|
209
211
|
const sourceExpr = new SourceExpression(tableSource, new SourceAliasExpression(alias, null));
|
210
|
-
this.joinSource(joinType, sourceExpr, columns);
|
212
|
+
this.joinSource(joinType, sourceExpr, columns, resolver);
|
211
213
|
}
|
212
|
-
|
214
|
+
/**
|
215
|
+
* Internal helper to append a JOIN clause using a SourceExpression.
|
216
|
+
* @param joinType Type of join (e.g., 'inner join', 'left join')
|
217
|
+
* @param sourceExpr The source expression to join
|
218
|
+
* @param columns Array or string of column names to join on
|
219
|
+
*/
|
220
|
+
joinSource(joinType, sourceExpr, columns, resolver = null) {
|
213
221
|
if (!this.fromClause) {
|
214
222
|
throw new Error('A FROM clause is required to add a JOIN condition.');
|
215
223
|
}
|
216
|
-
|
224
|
+
// Always treat columns as array
|
225
|
+
const columnsArr = Array.isArray(columns) ? columns : [columns];
|
226
|
+
const collector = new SelectableColumnCollector(resolver);
|
217
227
|
const valueSets = collector.collect(this);
|
218
228
|
let joinCondition = null;
|
219
229
|
let count = 0;
|
@@ -222,7 +232,7 @@ export class SimpleSelectQuery extends SqlComponent {
|
|
222
232
|
throw new Error('An alias is required for the source expression to add a JOIN condition.');
|
223
233
|
}
|
224
234
|
for (const valueSet of valueSets) {
|
225
|
-
if (
|
235
|
+
if (columnsArr.some(col => col == valueSet.name)) {
|
226
236
|
const expr = new BinaryExpression(valueSet.value, '=', new ColumnReference([sourceAlias], valueSet.name));
|
227
237
|
if (joinCondition) {
|
228
238
|
joinCondition = new BinaryExpression(joinCondition, 'and', expr);
|
@@ -233,8 +243,8 @@ export class SimpleSelectQuery extends SqlComponent {
|
|
233
243
|
count++;
|
234
244
|
}
|
235
245
|
}
|
236
|
-
if (!joinCondition || count !==
|
237
|
-
throw new Error(`Invalid JOIN condition. The specified columns were not found: ${
|
246
|
+
if (!joinCondition || count !== columnsArr.length) {
|
247
|
+
throw new Error(`Invalid JOIN condition. The specified columns were not found: ${columnsArr.join(', ')}`);
|
238
248
|
}
|
239
249
|
const joinOnClause = new JoinOnClause(joinCondition);
|
240
250
|
const joinClause = new JoinClause(joinType, sourceExpr, joinOnClause, false);
|
@@ -246,8 +256,6 @@ export class SimpleSelectQuery extends SqlComponent {
|
|
246
256
|
this.fromClause.joins = [joinClause];
|
247
257
|
}
|
248
258
|
}
|
249
|
-
// const normalizer = new CTENormalizer();
|
250
|
-
// normalizer.normalize(this);
|
251
259
|
CTENormalizer.normalize(this);
|
252
260
|
}
|
253
261
|
// Returns a SourceExpression wrapping this query as a subquery source.
|
@@ -267,8 +275,6 @@ export class SimpleSelectQuery extends SqlComponent {
|
|
267
275
|
else {
|
268
276
|
this.WithClause.tables.push(...tables);
|
269
277
|
}
|
270
|
-
// const normalizer = new CTENormalizer();
|
271
|
-
// normalizer.normalize(this);
|
272
278
|
CTENormalizer.normalize(this);
|
273
279
|
}
|
274
280
|
/**
|
@@ -283,6 +289,70 @@ export class SimpleSelectQuery extends SqlComponent {
|
|
283
289
|
const commonTable = new CommonTable(query, alias, null);
|
284
290
|
this.appendWith(commonTable);
|
285
291
|
}
|
292
|
+
/**
|
293
|
+
* Overrides a select item using a template literal function.
|
294
|
+
* The callback receives the SQL string of the original expression and must return a new SQL string.
|
295
|
+
* The result is parsed and set as the new select item value.
|
296
|
+
*
|
297
|
+
* Example usage:
|
298
|
+
* query.overrideSelectItemRaw("journal_date", expr => `greatest(${expr}, DATE '2025-01-01')`)
|
299
|
+
*
|
300
|
+
* @param columnName The name of the column to override
|
301
|
+
* @param fn Callback that receives the SQL string of the original expression and returns a new SQL string
|
302
|
+
*/
|
303
|
+
overrideSelectItemExpr(columnName, fn) {
|
304
|
+
const items = this.selectClause.items.filter(item => { var _a; return ((_a = item.identifier) === null || _a === void 0 ? void 0 : _a.name) === columnName; });
|
305
|
+
if (items.length === 0) {
|
306
|
+
throw new Error(`Column ${columnName} not found in the query`);
|
307
|
+
}
|
308
|
+
if (items.length > 1) {
|
309
|
+
throw new Error(`Duplicate column name ${columnName} found in the query`);
|
310
|
+
}
|
311
|
+
const item = items[0];
|
312
|
+
const formatter = new Formatter();
|
313
|
+
const exprSql = formatter.visit(item.value);
|
314
|
+
const newValue = fn(exprSql);
|
315
|
+
item.value = ValueParser.parse(newValue);
|
316
|
+
}
|
317
|
+
/**
|
318
|
+
* Appends a WHERE clause using the expression for the specified column.
|
319
|
+
* If `options.upstream` is true, applies to all upstream queries containing the column.
|
320
|
+
* If false or omitted, applies only to the current query.
|
321
|
+
*
|
322
|
+
* @param columnName The name of the column to target.
|
323
|
+
* @param exprBuilder Function that receives the column expression as a string and returns the WHERE condition string.
|
324
|
+
* @param options Optional settings. If `upstream` is true, applies to upstream queries.
|
325
|
+
*/
|
326
|
+
appendWhereExpr(columnName, exprBuilder, options) {
|
327
|
+
// If upstream option is true, find all upstream queries containing the column
|
328
|
+
if (options && options.upstream) {
|
329
|
+
// Use UpstreamSelectQueryFinder to find all relevant queries
|
330
|
+
// (Assume UpstreamSelectQueryFinder is imported)
|
331
|
+
const finder = new UpstreamSelectQueryFinder();
|
332
|
+
const queries = finder.find(this, [columnName]);
|
333
|
+
const collector = new SelectableColumnCollector();
|
334
|
+
const formatter = new Formatter();
|
335
|
+
for (const q of queries) {
|
336
|
+
const exprs = collector.collect(q).filter(item => item.name === columnName).map(item => item.value);
|
337
|
+
if (exprs.length !== 1) {
|
338
|
+
throw new Error(`Expected exactly one expression for column '${columnName}'`);
|
339
|
+
}
|
340
|
+
const exprStr = formatter.format(exprs[0]);
|
341
|
+
q.appendWhereRaw(exprBuilder(exprStr));
|
342
|
+
}
|
343
|
+
}
|
344
|
+
else {
|
345
|
+
// Only apply to the current query
|
346
|
+
const collector = new SelectableColumnCollector();
|
347
|
+
const formatter = new Formatter();
|
348
|
+
const exprs = collector.collect(this).filter(item => item.name === columnName).map(item => item.value);
|
349
|
+
if (exprs.length !== 1) {
|
350
|
+
throw new Error(`Expected exactly one expression for column '${columnName}'`);
|
351
|
+
}
|
352
|
+
const exprStr = formatter.format(exprs[0]);
|
353
|
+
this.appendWhereRaw(exprBuilder(exprStr));
|
354
|
+
}
|
355
|
+
}
|
286
356
|
}
|
287
357
|
SimpleSelectQuery.kind = Symbol("SelectQuery");
|
288
358
|
//# sourceMappingURL=SimpleSelectQuery.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SimpleSelectQuery.js","sourceRoot":"","sources":["../../../src/models/SimpleSelectQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAwC,YAAY,EAAE,UAAU,EAAE,YAAY,EAA4C,gBAAgB,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAAqB,UAAU,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACpQ,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAkB,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;
|
1
|
+
{"version":3,"file":"SimpleSelectQuery.js","sourceRoot":"","sources":["../../../src/models/SimpleSelectQuery.ts"],"names":[],"mappings":"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"}
|
@@ -22,7 +22,7 @@ export class CommandExpressionParser {
|
|
22
22
|
static parseModifierUnaryExpression(lexemes, index) {
|
23
23
|
let idx = index;
|
24
24
|
// Check for modifier unary expression
|
25
|
-
if (idx < lexemes.length && lexemes[idx].type
|
25
|
+
if (idx < lexemes.length && (lexemes[idx].type & TokenType.Command)) {
|
26
26
|
const command = lexemes[idx].value;
|
27
27
|
idx++;
|
28
28
|
const result = ValueParser.parseFromLexeme(lexemes, idx);
|
@@ -89,14 +89,14 @@ export class CommandExpressionParser {
|
|
89
89
|
}
|
90
90
|
// Helper method: Check if a lexeme is a Command token with the specified value
|
91
91
|
static isCommandWithValue(lexeme, value) {
|
92
|
-
return lexeme.type
|
92
|
+
return ((lexeme.type & TokenType.Command) !== 0) && lexeme.value === value;
|
93
93
|
}
|
94
94
|
static parseCaseConditionValuePair(lexemes, index) {
|
95
95
|
let idx = index;
|
96
96
|
const condition = ValueParser.parseFromLexeme(lexemes, idx);
|
97
97
|
idx = condition.newIndex;
|
98
98
|
// Check for the existence of the THEN keyword
|
99
|
-
if (idx >= lexemes.length || lexemes[idx].type
|
99
|
+
if (idx >= lexemes.length || !(lexemes[idx].type & TokenType.Command) || lexemes[idx].value !== "then") {
|
100
100
|
throw new Error(`Expected 'then' after WHEN condition at index ${idx}`);
|
101
101
|
}
|
102
102
|
idx++; // Skip the THEN keyword
|
@@ -108,7 +108,7 @@ export class CommandExpressionParser {
|
|
108
108
|
static parseArrayExpression(lexemes, index) {
|
109
109
|
let idx = index;
|
110
110
|
// Array function is enclosed in []
|
111
|
-
if (idx < lexemes.length && lexemes[idx].type
|
111
|
+
if (idx < lexemes.length && (lexemes[idx].type & TokenType.OpenBracket)) {
|
112
112
|
const arg = ValueParser.parseArgument(TokenType.OpenBracket, TokenType.CloseBracket, lexemes, idx);
|
113
113
|
idx = arg.newIndex;
|
114
114
|
const value = new ArrayExpression(arg.value);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CommandExpressionParser.js","sourceRoot":"","sources":["../../../src/parsers/CommandExpressionParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAkB,MAAM,0BAA0B,CAAC;AAClJ,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,OAAO,uBAAuB;IACzB,MAAM,CAAC,eAAe,CAAC,OAAiB,EAAE,KAAa;QAC1D,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC3B,GAAG,EAAE,CAAC;YACN,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACvC,GAAG,EAAE,CAAC;YACN,OAAO,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,OAAO,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACnC,GAAG,EAAE,CAAC;YACN,OAAO,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACnD,CAAC;QAED,OAAO,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC;IAEO,MAAM,CAAC,4BAA4B,CAAC,OAAiB,EAAE,KAAa;QACxE,IAAI,GAAG,GAAG,KAAK,CAAC;QAChB,sCAAsC;QACtC,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,
|
1
|
+
{"version":3,"file":"CommandExpressionParser.js","sourceRoot":"","sources":["../../../src/parsers/CommandExpressionParser.ts"],"names":[],"mappings":"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"}
|
@@ -27,7 +27,7 @@ export class FunctionExpressionParser {
|
|
27
27
|
static tryParseBinaryExpression(lexemes, index, left, allowAndOperator = true) {
|
28
28
|
let idx = index;
|
29
29
|
// If the next element is an operator, process it as a binary expression
|
30
|
-
if (idx < lexemes.length && lexemes[idx].type
|
30
|
+
if (idx < lexemes.length && (lexemes[idx].type & TokenType.Operator)) {
|
31
31
|
if (!allowAndOperator && lexemes[idx].value === "and") {
|
32
32
|
// Handle special case for "and" operator
|
33
33
|
return null;
|
@@ -61,7 +61,7 @@ export class FunctionExpressionParser {
|
|
61
61
|
let idx = index;
|
62
62
|
const lower = ValueParser.parseFromLexeme(lexemes, idx, false);
|
63
63
|
idx = lower.newIndex;
|
64
|
-
if (idx < lexemes.length && lexemes[idx].type
|
64
|
+
if (idx < lexemes.length && (lexemes[idx].type & TokenType.Operator) && lexemes[idx].value !== "and") {
|
65
65
|
throw new Error(`Expected 'and' after 'between' at index ${idx}`);
|
66
66
|
}
|
67
67
|
idx++;
|
@@ -76,7 +76,7 @@ export class FunctionExpressionParser {
|
|
76
76
|
const result = lexemes[idx];
|
77
77
|
const functionName = result.value;
|
78
78
|
idx++;
|
79
|
-
if (idx < lexemes.length && lexemes[idx].type
|
79
|
+
if (idx < lexemes.length && (lexemes[idx].type & TokenType.OpenParen)) {
|
80
80
|
// General argument parsing
|
81
81
|
const arg = ValueParser.parseArgument(TokenType.OpenParen, TokenType.CloseParen, lexemes, idx);
|
82
82
|
idx = arg.newIndex;
|
@@ -99,20 +99,20 @@ export class FunctionExpressionParser {
|
|
99
99
|
let idx = index;
|
100
100
|
const functionName = lexemes[idx].value;
|
101
101
|
idx++;
|
102
|
-
if (idx < lexemes.length && lexemes[idx].type
|
102
|
+
if (idx < lexemes.length && (lexemes[idx].type & TokenType.OpenParen)) {
|
103
103
|
idx++;
|
104
104
|
const input = ValueParser.parseFromLexeme(lexemes, idx);
|
105
105
|
let arg = input.value;
|
106
106
|
idx = input.newIndex;
|
107
107
|
// Delegate to the standard function parser if parsing by comma
|
108
|
-
if (idx < lexemes.length && lexemes[idx].type
|
108
|
+
if (idx < lexemes.length && (lexemes[idx].type & TokenType.Comma)) {
|
109
109
|
return this.parseFunctionCall(lexemes, index);
|
110
110
|
}
|
111
111
|
// Check keywords
|
112
112
|
for (const { key, required } of keywords) {
|
113
|
-
if (idx < lexemes.length && lexemes[idx].type
|
113
|
+
if (idx < lexemes.length && (lexemes[idx].type & TokenType.Command) && lexemes[idx].value === key) {
|
114
114
|
idx++;
|
115
|
-
if (idx < lexemes.length && (lexemes[idx].type
|
115
|
+
if (idx < lexemes.length && (lexemes[idx].type & TokenType.Type)) {
|
116
116
|
const typeValue = this.parseTypeValue(lexemes, idx);
|
117
117
|
arg = new BinaryExpression(arg, key, typeValue.value);
|
118
118
|
idx = typeValue.newIndex;
|
@@ -127,7 +127,7 @@ export class FunctionExpressionParser {
|
|
127
127
|
throw new Error(`Keyword '${key}' is required at index ${idx}`);
|
128
128
|
}
|
129
129
|
}
|
130
|
-
if (idx < lexemes.length && lexemes[idx].type
|
130
|
+
if (idx < lexemes.length && (lexemes[idx].type & TokenType.CloseParen)) {
|
131
131
|
idx++;
|
132
132
|
if (idx < lexemes.length && lexemes[idx].value === "over") {
|
133
133
|
idx++;
|
@@ -152,11 +152,11 @@ export class FunctionExpressionParser {
|
|
152
152
|
static parseTypeValue(lexemes, index) {
|
153
153
|
let idx = index;
|
154
154
|
// Check for type value
|
155
|
-
if (idx < lexemes.length && (lexemes[idx].type
|
155
|
+
if (idx < lexemes.length && (lexemes[idx].type & TokenType.Type)) {
|
156
156
|
const typeName = lexemes[idx].value;
|
157
157
|
idx++;
|
158
158
|
// Check for array type
|
159
|
-
if (idx < lexemes.length && lexemes[idx].type
|
159
|
+
if (idx < lexemes.length && (lexemes[idx].type & TokenType.OpenParen)) {
|
160
160
|
const arg = ValueParser.parseArgument(TokenType.OpenParen, TokenType.CloseParen, lexemes, idx);
|
161
161
|
idx = arg.newIndex;
|
162
162
|
const value = new TypeValue(typeName, arg.value);
|