rawsql-ts 0.11.32-beta → 0.11.33-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/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +37 -29
- package/dist/esm/index.min.js.map +4 -4
- package/dist/esm/src/formatters/OriginalFormatRestorer.d.ts +40 -0
- package/dist/esm/src/formatters/OriginalFormatRestorer.js +135 -0
- package/dist/esm/src/formatters/OriginalFormatRestorer.js.map +1 -0
- package/dist/esm/src/index.d.ts +11 -0
- package/dist/esm/src/index.js +9 -0
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/models/FormattingLexeme.d.ts +66 -0
- package/dist/esm/src/models/FormattingLexeme.js +2 -0
- package/dist/esm/src/models/FormattingLexeme.js.map +1 -0
- package/dist/esm/src/models/ValueComponent.d.ts +3 -1
- package/dist/esm/src/models/ValueComponent.js +3 -1
- package/dist/esm/src/models/ValueComponent.js.map +1 -1
- package/dist/esm/src/parsers/FunctionExpressionParser.d.ts +12 -0
- package/dist/esm/src/parsers/FunctionExpressionParser.js +111 -7
- package/dist/esm/src/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/esm/src/parsers/KeywordParser.d.ts +1 -0
- package/dist/esm/src/parsers/KeywordParser.js +10 -4
- package/dist/esm/src/parsers/KeywordParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlPrintTokenParser.js +8 -0
- package/dist/esm/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/esm/src/parsers/SqlTokenizer.d.ts +42 -2
- package/dist/esm/src/parsers/SqlTokenizer.js +213 -12
- package/dist/esm/src/parsers/SqlTokenizer.js.map +1 -1
- package/dist/esm/src/tokenReaders/CommandTokenReader.d.ts +3 -0
- package/dist/esm/src/tokenReaders/CommandTokenReader.js +4 -1
- package/dist/esm/src/tokenReaders/CommandTokenReader.js.map +1 -1
- package/dist/esm/src/transformers/AliasRenamer.d.ts +199 -0
- package/dist/esm/src/transformers/AliasRenamer.js +595 -0
- package/dist/esm/src/transformers/AliasRenamer.js.map +1 -0
- package/dist/esm/src/transformers/CTERenamer.d.ts +53 -0
- package/dist/esm/src/transformers/CTERenamer.js +138 -0
- package/dist/esm/src/transformers/CTERenamer.js.map +1 -1
- package/dist/esm/src/transformers/DynamicQueryBuilder.d.ts +72 -0
- package/dist/esm/src/transformers/DynamicQueryBuilder.js +42 -0
- package/dist/esm/src/transformers/DynamicQueryBuilder.js.map +1 -1
- package/dist/esm/src/transformers/FilterableItemCollector.d.ts +80 -0
- package/dist/esm/src/transformers/FilterableItemCollector.js +254 -0
- package/dist/esm/src/transformers/FilterableItemCollector.js.map +1 -0
- package/dist/esm/src/transformers/SelectableColumnCollector.d.ts +3 -0
- package/dist/esm/src/transformers/SelectableColumnCollector.js +68 -7
- package/dist/esm/src/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/esm/src/transformers/SmartRenamer.d.ts +134 -0
- package/dist/esm/src/transformers/SmartRenamer.js +430 -0
- package/dist/esm/src/transformers/SmartRenamer.js.map +1 -0
- package/dist/esm/src/transformers/SqlIdentifierRenamer.d.ts +150 -0
- package/dist/esm/src/transformers/SqlIdentifierRenamer.js +493 -0
- package/dist/esm/src/transformers/SqlIdentifierRenamer.js.map +1 -0
- package/dist/esm/src/transformers/SqlParamInjector.d.ts +27 -0
- package/dist/esm/src/transformers/SqlParamInjector.js +304 -16
- package/dist/esm/src/transformers/SqlParamInjector.js.map +1 -1
- package/dist/esm/src/transformers/SqlSortInjector.js +6 -3
- package/dist/esm/src/transformers/SqlSortInjector.js.map +1 -1
- package/dist/esm/src/transformers/UpstreamSelectQueryFinder.js +5 -2
- package/dist/esm/src/transformers/UpstreamSelectQueryFinder.js.map +1 -1
- package/dist/esm/src/utils/LexemeCursor.d.ts +41 -0
- package/dist/esm/src/utils/LexemeCursor.js +93 -0
- package/dist/esm/src/utils/LexemeCursor.js.map +1 -1
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/index.min.js +37 -29
- package/dist/index.min.js.map +4 -4
- package/dist/src/formatters/OriginalFormatRestorer.d.ts +40 -0
- package/dist/src/formatters/OriginalFormatRestorer.js +139 -0
- package/dist/src/formatters/OriginalFormatRestorer.js.map +1 -0
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.js +11 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/models/FormattingLexeme.d.ts +66 -0
- package/dist/src/models/FormattingLexeme.js +3 -0
- package/dist/src/models/FormattingLexeme.js.map +1 -0
- package/dist/src/models/ValueComponent.d.ts +3 -1
- package/dist/src/models/ValueComponent.js +3 -1
- package/dist/src/models/ValueComponent.js.map +1 -1
- package/dist/src/parsers/FunctionExpressionParser.d.ts +12 -0
- package/dist/src/parsers/FunctionExpressionParser.js +110 -6
- package/dist/src/parsers/FunctionExpressionParser.js.map +1 -1
- package/dist/src/parsers/KeywordParser.d.ts +1 -0
- package/dist/src/parsers/KeywordParser.js +10 -4
- package/dist/src/parsers/KeywordParser.js.map +1 -1
- package/dist/src/parsers/SqlPrintTokenParser.js +8 -0
- package/dist/src/parsers/SqlPrintTokenParser.js.map +1 -1
- package/dist/src/parsers/SqlTokenizer.d.ts +42 -2
- package/dist/src/parsers/SqlTokenizer.js +222 -12
- package/dist/src/parsers/SqlTokenizer.js.map +1 -1
- package/dist/src/tokenReaders/CommandTokenReader.d.ts +3 -0
- package/dist/src/tokenReaders/CommandTokenReader.js +5 -2
- package/dist/src/tokenReaders/CommandTokenReader.js.map +1 -1
- package/dist/src/transformers/AliasRenamer.d.ts +199 -0
- package/dist/src/transformers/AliasRenamer.js +599 -0
- package/dist/src/transformers/AliasRenamer.js.map +1 -0
- package/dist/src/transformers/CTERenamer.d.ts +53 -0
- package/dist/src/transformers/CTERenamer.js +138 -0
- package/dist/src/transformers/CTERenamer.js.map +1 -1
- package/dist/src/transformers/DynamicQueryBuilder.d.ts +72 -0
- package/dist/src/transformers/DynamicQueryBuilder.js +42 -0
- package/dist/src/transformers/DynamicQueryBuilder.js.map +1 -1
- package/dist/src/transformers/FilterableItemCollector.d.ts +80 -0
- package/dist/src/transformers/FilterableItemCollector.js +259 -0
- package/dist/src/transformers/FilterableItemCollector.js.map +1 -0
- package/dist/src/transformers/SelectableColumnCollector.d.ts +3 -0
- package/dist/src/transformers/SelectableColumnCollector.js +67 -6
- package/dist/src/transformers/SelectableColumnCollector.js.map +1 -1
- package/dist/src/transformers/SmartRenamer.d.ts +134 -0
- package/dist/src/transformers/SmartRenamer.js +442 -0
- package/dist/src/transformers/SmartRenamer.js.map +1 -0
- package/dist/src/transformers/SqlIdentifierRenamer.d.ts +150 -0
- package/dist/src/transformers/SqlIdentifierRenamer.js +497 -0
- package/dist/src/transformers/SqlIdentifierRenamer.js.map +1 -0
- package/dist/src/transformers/SqlParamInjector.d.ts +27 -0
- package/dist/src/transformers/SqlParamInjector.js +303 -15
- package/dist/src/transformers/SqlParamInjector.js.map +1 -1
- package/dist/src/transformers/SqlSortInjector.js +5 -2
- package/dist/src/transformers/SqlSortInjector.js.map +1 -1
- package/dist/src/transformers/UpstreamSelectQueryFinder.js +4 -1
- package/dist/src/transformers/UpstreamSelectQueryFinder.js.map +1 -1
- package/dist/src/utils/LexemeCursor.d.ts +41 -0
- package/dist/src/utils/LexemeCursor.js +93 -0
- package/dist/src/utils/LexemeCursor.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
@@ -0,0 +1,40 @@
|
|
1
|
+
import { FormattingLexeme } from '../models/FormattingLexeme';
|
2
|
+
/**
|
3
|
+
* Restores SQL strings from FormattingLexeme arrays while preserving original formatting
|
4
|
+
* This class handles the restoration of SQL text with exact whitespace, comments, and indentation
|
5
|
+
*/
|
6
|
+
export declare class OriginalFormatRestorer {
|
7
|
+
/**
|
8
|
+
* Restores SQL string from FormattingLexeme array preserving original formatting
|
9
|
+
* @param lexemes Array of FormattingLexeme with formatting information
|
10
|
+
* @returns Restored SQL string with original formatting preserved
|
11
|
+
*/
|
12
|
+
restore(lexemes: FormattingLexeme[]): string;
|
13
|
+
/**
|
14
|
+
* Restores SQL with inline comments preserved at their original positions
|
15
|
+
* @param lexemes Array of FormattingLexeme with formatting information
|
16
|
+
* @param includeComments Whether to include inline comments in output
|
17
|
+
* @returns Restored SQL string
|
18
|
+
*/
|
19
|
+
restoreWithComments(lexemes: FormattingLexeme[], includeComments?: boolean): string;
|
20
|
+
/**
|
21
|
+
* Extracts formatting patterns from FormattingLexemes for analysis
|
22
|
+
* @param lexemes Array of FormattingLexeme
|
23
|
+
* @returns Object containing formatting statistics
|
24
|
+
*/
|
25
|
+
analyzeFormatting(lexemes: FormattingLexeme[]): {
|
26
|
+
totalWhitespace: number;
|
27
|
+
totalComments: number;
|
28
|
+
indentationStyle: 'spaces' | 'tabs' | 'mixed' | 'none';
|
29
|
+
averageIndentSize: number;
|
30
|
+
};
|
31
|
+
/**
|
32
|
+
* Validates that lexemes contain proper formatting information
|
33
|
+
* @param lexemes Array of FormattingLexeme to validate
|
34
|
+
* @returns Validation result with details
|
35
|
+
*/
|
36
|
+
validateFormattingLexemes(lexemes: FormattingLexeme[]): {
|
37
|
+
isValid: boolean;
|
38
|
+
issues: string[];
|
39
|
+
};
|
40
|
+
}
|
@@ -0,0 +1,139 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.OriginalFormatRestorer = void 0;
|
4
|
+
/**
|
5
|
+
* Restores SQL strings from FormattingLexeme arrays while preserving original formatting
|
6
|
+
* This class handles the restoration of SQL text with exact whitespace, comments, and indentation
|
7
|
+
*/
|
8
|
+
class OriginalFormatRestorer {
|
9
|
+
/**
|
10
|
+
* Restores SQL string from FormattingLexeme array preserving original formatting
|
11
|
+
* @param lexemes Array of FormattingLexeme with formatting information
|
12
|
+
* @returns Restored SQL string with original formatting preserved
|
13
|
+
*/
|
14
|
+
restore(lexemes) {
|
15
|
+
if (lexemes.length === 0) {
|
16
|
+
return '';
|
17
|
+
}
|
18
|
+
let result = '';
|
19
|
+
for (const lexeme of lexemes) {
|
20
|
+
// Add the lexeme value
|
21
|
+
result += lexeme.value;
|
22
|
+
// Add any following whitespace (spaces, tabs, newlines)
|
23
|
+
if (lexeme.followingWhitespace) {
|
24
|
+
result += lexeme.followingWhitespace;
|
25
|
+
}
|
26
|
+
}
|
27
|
+
return result;
|
28
|
+
}
|
29
|
+
/**
|
30
|
+
* Restores SQL with inline comments preserved at their original positions
|
31
|
+
* @param lexemes Array of FormattingLexeme with formatting information
|
32
|
+
* @param includeComments Whether to include inline comments in output
|
33
|
+
* @returns Restored SQL string
|
34
|
+
*/
|
35
|
+
restoreWithComments(lexemes, includeComments = true) {
|
36
|
+
if (lexemes.length === 0) {
|
37
|
+
return '';
|
38
|
+
}
|
39
|
+
let result = '';
|
40
|
+
for (const lexeme of lexemes) {
|
41
|
+
// Add the lexeme value
|
42
|
+
result += lexeme.value;
|
43
|
+
// Add inline comments if requested
|
44
|
+
if (includeComments && lexeme.inlineComments && lexeme.inlineComments.length > 0) {
|
45
|
+
for (const comment of lexeme.inlineComments) {
|
46
|
+
// Add comments with appropriate formatting
|
47
|
+
if (comment.trim().length > 0) {
|
48
|
+
result += ` -- ${comment}`;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
}
|
52
|
+
// Add any following whitespace
|
53
|
+
if (lexeme.followingWhitespace) {
|
54
|
+
result += lexeme.followingWhitespace;
|
55
|
+
}
|
56
|
+
}
|
57
|
+
return result;
|
58
|
+
}
|
59
|
+
/**
|
60
|
+
* Extracts formatting patterns from FormattingLexemes for analysis
|
61
|
+
* @param lexemes Array of FormattingLexeme
|
62
|
+
* @returns Object containing formatting statistics
|
63
|
+
*/
|
64
|
+
analyzeFormatting(lexemes) {
|
65
|
+
var _a, _b;
|
66
|
+
let totalWhitespace = 0;
|
67
|
+
let totalComments = 0;
|
68
|
+
let spaceCount = 0;
|
69
|
+
let tabCount = 0;
|
70
|
+
let indentLines = 0;
|
71
|
+
let totalIndentSize = 0;
|
72
|
+
for (const lexeme of lexemes) {
|
73
|
+
if (lexeme.followingWhitespace) {
|
74
|
+
totalWhitespace += lexeme.followingWhitespace.length;
|
75
|
+
// Analyze indentation
|
76
|
+
const lines = lexeme.followingWhitespace.split('\n');
|
77
|
+
for (let i = 1; i < lines.length; i++) { // Skip first line
|
78
|
+
const line = lines[i];
|
79
|
+
const leadingSpaces = ((_a = line.match(/^ */)) === null || _a === void 0 ? void 0 : _a[0].length) || 0;
|
80
|
+
const leadingTabs = ((_b = line.match(/^\t*/)) === null || _b === void 0 ? void 0 : _b[0].length) || 0;
|
81
|
+
if (leadingSpaces > 0 || leadingTabs > 0) {
|
82
|
+
indentLines++;
|
83
|
+
totalIndentSize += leadingSpaces + (leadingTabs * 4); // Count tabs as 4 spaces
|
84
|
+
spaceCount += leadingSpaces;
|
85
|
+
tabCount += leadingTabs;
|
86
|
+
}
|
87
|
+
}
|
88
|
+
}
|
89
|
+
if (lexeme.inlineComments) {
|
90
|
+
totalComments += lexeme.inlineComments.length;
|
91
|
+
}
|
92
|
+
}
|
93
|
+
let indentationStyle = 'none';
|
94
|
+
if (spaceCount > 0 && tabCount > 0) {
|
95
|
+
indentationStyle = 'mixed';
|
96
|
+
}
|
97
|
+
else if (spaceCount > 0) {
|
98
|
+
indentationStyle = 'spaces';
|
99
|
+
}
|
100
|
+
else if (tabCount > 0) {
|
101
|
+
indentationStyle = 'tabs';
|
102
|
+
}
|
103
|
+
return {
|
104
|
+
totalWhitespace,
|
105
|
+
totalComments,
|
106
|
+
indentationStyle,
|
107
|
+
averageIndentSize: indentLines > 0 ? totalIndentSize / indentLines : 0
|
108
|
+
};
|
109
|
+
}
|
110
|
+
/**
|
111
|
+
* Validates that lexemes contain proper formatting information
|
112
|
+
* @param lexemes Array of FormattingLexeme to validate
|
113
|
+
* @returns Validation result with details
|
114
|
+
*/
|
115
|
+
validateFormattingLexemes(lexemes) {
|
116
|
+
const issues = [];
|
117
|
+
for (let i = 0; i < lexemes.length; i++) {
|
118
|
+
const lexeme = lexemes[i];
|
119
|
+
if (!lexeme.position) {
|
120
|
+
issues.push(`Lexeme ${i} missing position information`);
|
121
|
+
}
|
122
|
+
if (lexeme.followingWhitespace === undefined) {
|
123
|
+
issues.push(`Lexeme ${i} missing followingWhitespace property`);
|
124
|
+
}
|
125
|
+
if (lexeme.inlineComments === undefined) {
|
126
|
+
issues.push(`Lexeme ${i} missing inlineComments property`);
|
127
|
+
}
|
128
|
+
if (lexeme.position && lexeme.position.startPosition >= lexeme.position.endPosition) {
|
129
|
+
issues.push(`Lexeme ${i} has invalid position range`);
|
130
|
+
}
|
131
|
+
}
|
132
|
+
return {
|
133
|
+
isValid: issues.length === 0,
|
134
|
+
issues
|
135
|
+
};
|
136
|
+
}
|
137
|
+
}
|
138
|
+
exports.OriginalFormatRestorer = OriginalFormatRestorer;
|
139
|
+
//# sourceMappingURL=OriginalFormatRestorer.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"OriginalFormatRestorer.js","sourceRoot":"","sources":["../../../src/formatters/OriginalFormatRestorer.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACH,MAAa,sBAAsB;IAE/B;;;;OAIG;IACI,OAAO,CAAC,OAA2B;QACtC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACd,CAAC;QAED,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,uBAAuB;YACvB,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;YAEvB,wDAAwD;YACxD,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,MAAM,IAAI,MAAM,CAAC,mBAAmB,CAAC;YACzC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;OAKG;IACI,mBAAmB,CAAC,OAA2B,EAAE,kBAA2B,IAAI;QACnF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;QACd,CAAC;QAED,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,uBAAuB;YACvB,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;YAEvB,mCAAmC;YACnC,IAAI,eAAe,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/E,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;oBAC1C,2CAA2C;oBAC3C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC5B,MAAM,IAAI,OAAO,OAAO,EAAE,CAAC;oBAC/B,CAAC;gBACL,CAAC;YACL,CAAC;YAED,+BAA+B;YAC/B,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,MAAM,IAAI,MAAM,CAAC,mBAAmB,CAAC;YACzC,CAAC;QACL,CAAC;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACI,iBAAiB,CAAC,OAA2B;;QAMhD,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;gBAC7B,eAAe,IAAI,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC;gBAErD,sBAAsB;gBACtB,MAAM,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,kBAAkB;oBACvD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACtB,MAAM,aAAa,GAAG,CAAA,MAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,0CAAG,CAAC,EAAE,MAAM,KAAI,CAAC,CAAC;oBACzD,MAAM,WAAW,GAAG,CAAA,MAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,0CAAG,CAAC,EAAE,MAAM,KAAI,CAAC,CAAC;oBAExD,IAAI,aAAa,GAAG,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;wBACvC,WAAW,EAAE,CAAC;wBACd,eAAe,IAAI,aAAa,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB;wBAC/E,UAAU,IAAI,aAAa,CAAC;wBAC5B,QAAQ,IAAI,WAAW,CAAC;oBAC5B,CAAC;gBACL,CAAC;YACL,CAAC;YAED,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBACxB,aAAa,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;YAClD,CAAC;QACL,CAAC;QAED,IAAI,gBAAgB,GAAyC,MAAM,CAAC;QACpE,IAAI,UAAU,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjC,gBAAgB,GAAG,OAAO,CAAC;QAC/B,CAAC;aAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACxB,gBAAgB,GAAG,QAAQ,CAAC;QAChC,CAAC;aAAM,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACtB,gBAAgB,GAAG,MAAM,CAAC;QAC9B,CAAC;QAED,OAAO;YACH,eAAe;YACf,aAAa;YACb,gBAAgB;YAChB,iBAAiB,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;SACzE,CAAC;IACN,CAAC;IAED;;;;OAIG;IACI,yBAAyB,CAAC,OAA2B;QAIxD,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAE1B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,+BAA+B,CAAC,CAAC;YAC5D,CAAC;YAED,IAAI,MAAM,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,uCAAuC,CAAC,CAAC;YACpE,CAAC;YAED,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACtC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC;YAC/D,CAAC;YAED,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;gBAClF,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,6BAA6B,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC;QAED,OAAO;YACH,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC5B,MAAM;SACT,CAAC;IACN,CAAC;CACJ;AA/JD,wDA+JC"}
|
package/dist/src/index.d.ts
CHANGED
@@ -9,6 +9,7 @@ export * from './models/ValueComponent';
|
|
9
9
|
export * from './models/ValuesQuery';
|
10
10
|
export * from './models/CTEError';
|
11
11
|
export * from './models/Lexeme';
|
12
|
+
export * from './models/FormattingLexeme';
|
12
13
|
export * from './transformers/CTECollector';
|
13
14
|
export * from './transformers/CTENormalizer';
|
14
15
|
export * from './transformers/CTEDisabler';
|
@@ -17,6 +18,11 @@ export * from './transformers/CTETableReferenceCollector';
|
|
17
18
|
export * from './transformers/CTEQueryDecomposer';
|
18
19
|
export * from './transformers/CTEComposer';
|
19
20
|
export * from './transformers/CTERenamer';
|
21
|
+
export * from './transformers/AliasRenamer';
|
22
|
+
export * from './transformers/SmartRenamer';
|
23
|
+
export * from './formatters/OriginalFormatRestorer';
|
24
|
+
export * from './transformers/SqlIdentifierRenamer';
|
25
|
+
export type { ScopeRange } from './transformers/SqlIdentifierRenamer';
|
20
26
|
export * from './transformers/ColumnReferenceCollector';
|
21
27
|
export * from './transformers/Formatter';
|
22
28
|
export * from './transformers/SqlFormatter';
|
@@ -25,6 +31,8 @@ export * from './transformers/QueryBuilder';
|
|
25
31
|
export * from './transformers/SelectValueCollector';
|
26
32
|
export * from './transformers/SelectableColumnCollector';
|
27
33
|
export { DuplicateDetectionMode } from './transformers/SelectableColumnCollector';
|
34
|
+
export * from './transformers/FilterableItemCollector';
|
35
|
+
export * from './transformers/DynamicQueryBuilder';
|
28
36
|
export * from './transformers/TableColumnResolver';
|
29
37
|
export * from './transformers/TableSourceCollector';
|
30
38
|
export * from './transformers/JsonMappingConverter';
|
@@ -39,6 +47,8 @@ export * from './transformers/UpstreamSelectQueryFinder';
|
|
39
47
|
export * from './transformers/TypeTransformationPostProcessor';
|
40
48
|
export * from './transformers/SchemaCollector';
|
41
49
|
export { TableSchema, SchemaAnalysisResult } from './transformers/SchemaCollector';
|
50
|
+
export * from './transformers/FilterableItemCollector';
|
51
|
+
export { FilterableItem, FilterableItemCollectorOptions } from './transformers/FilterableItemCollector';
|
42
52
|
export * from './transformers/QueryFlowDiagramGenerator';
|
43
53
|
export * from './transformers/SqlParamInjector';
|
44
54
|
export * from './transformers/SqlSortInjector';
|
@@ -49,5 +59,6 @@ export * from './utils/JsonSchemaValidator';
|
|
49
59
|
export * from './utils/SchemaManager';
|
50
60
|
export * from './utils/CommentEditor';
|
51
61
|
export * from './utils/LexemeCursor';
|
62
|
+
export type { LineColumn } from './utils/LexemeCursor';
|
52
63
|
export * from './utils/CTERegionDetector';
|
53
64
|
export type { CTERegion, CursorPositionInfo } from './utils/CTERegionDetector';
|
package/dist/src/index.js
CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
15
|
};
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
-
exports.TableSchema = exports.unifyJsonMapping = exports.isLegacyFormat = exports.isUnifiedFormat = exports.isModelDrivenFormat = exports.processJsonMapping = exports.validateModelDrivenMapping = exports.convertModelDrivenMapping = exports.DuplicateDetectionMode = void 0;
|
17
|
+
exports.FilterableItem = exports.TableSchema = exports.unifyJsonMapping = exports.isLegacyFormat = exports.isUnifiedFormat = exports.isModelDrivenFormat = exports.processJsonMapping = exports.validateModelDrivenMapping = exports.convertModelDrivenMapping = exports.DuplicateDetectionMode = void 0;
|
18
18
|
// Entry point for rawsql-ts package
|
19
19
|
__exportStar(require("./parsers/SelectQueryParser"), exports);
|
20
20
|
__exportStar(require("./parsers/InsertQueryParser"), exports);
|
@@ -26,6 +26,7 @@ __exportStar(require("./models/ValueComponent"), exports);
|
|
26
26
|
__exportStar(require("./models/ValuesQuery"), exports);
|
27
27
|
__exportStar(require("./models/CTEError"), exports);
|
28
28
|
__exportStar(require("./models/Lexeme"), exports);
|
29
|
+
__exportStar(require("./models/FormattingLexeme"), exports);
|
29
30
|
__exportStar(require("./transformers/CTECollector"), exports);
|
30
31
|
__exportStar(require("./transformers/CTENormalizer"), exports);
|
31
32
|
__exportStar(require("./transformers/CTEDisabler"), exports);
|
@@ -34,6 +35,10 @@ __exportStar(require("./transformers/CTETableReferenceCollector"), exports);
|
|
34
35
|
__exportStar(require("./transformers/CTEQueryDecomposer"), exports);
|
35
36
|
__exportStar(require("./transformers/CTEComposer"), exports);
|
36
37
|
__exportStar(require("./transformers/CTERenamer"), exports);
|
38
|
+
__exportStar(require("./transformers/AliasRenamer"), exports);
|
39
|
+
__exportStar(require("./transformers/SmartRenamer"), exports);
|
40
|
+
__exportStar(require("./formatters/OriginalFormatRestorer"), exports);
|
41
|
+
__exportStar(require("./transformers/SqlIdentifierRenamer"), exports);
|
37
42
|
__exportStar(require("./transformers/ColumnReferenceCollector"), exports);
|
38
43
|
__exportStar(require("./transformers/Formatter"), exports);
|
39
44
|
__exportStar(require("./transformers/SqlFormatter"), exports);
|
@@ -43,6 +48,8 @@ __exportStar(require("./transformers/SelectValueCollector"), exports);
|
|
43
48
|
__exportStar(require("./transformers/SelectableColumnCollector"), exports);
|
44
49
|
var SelectableColumnCollector_1 = require("./transformers/SelectableColumnCollector");
|
45
50
|
Object.defineProperty(exports, "DuplicateDetectionMode", { enumerable: true, get: function () { return SelectableColumnCollector_1.DuplicateDetectionMode; } });
|
51
|
+
__exportStar(require("./transformers/FilterableItemCollector"), exports);
|
52
|
+
__exportStar(require("./transformers/DynamicQueryBuilder"), exports);
|
46
53
|
__exportStar(require("./transformers/TableColumnResolver"), exports);
|
47
54
|
__exportStar(require("./transformers/TableSourceCollector"), exports);
|
48
55
|
__exportStar(require("./transformers/JsonMappingConverter"), exports);
|
@@ -64,6 +71,9 @@ __exportStar(require("./transformers/TypeTransformationPostProcessor"), exports)
|
|
64
71
|
__exportStar(require("./transformers/SchemaCollector"), exports);
|
65
72
|
var SchemaCollector_1 = require("./transformers/SchemaCollector");
|
66
73
|
Object.defineProperty(exports, "TableSchema", { enumerable: true, get: function () { return SchemaCollector_1.TableSchema; } });
|
74
|
+
__exportStar(require("./transformers/FilterableItemCollector"), exports);
|
75
|
+
var FilterableItemCollector_1 = require("./transformers/FilterableItemCollector");
|
76
|
+
Object.defineProperty(exports, "FilterableItem", { enumerable: true, get: function () { return FilterableItemCollector_1.FilterableItem; } });
|
67
77
|
__exportStar(require("./transformers/QueryFlowDiagramGenerator"), exports);
|
68
78
|
__exportStar(require("./transformers/SqlParamInjector"), exports);
|
69
79
|
__exportStar(require("./transformers/SqlSortInjector"), exports);
|
package/dist/src/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oCAAoC;AACpC,8DAA4C;AAE5C,8DAA4C;AAC5C,6DAA2C;AAE3C,6DAA2C;AAC3C,uDAAqC;AACrC,wDAAsC;AACtC,0DAAwC;AACxC,uDAAqC;AACrC,oDAAkC;AAClC,kDAAgC;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oCAAoC;AACpC,8DAA4C;AAE5C,8DAA4C;AAC5C,6DAA2C;AAE3C,6DAA2C;AAC3C,uDAAqC;AACrC,wDAAsC;AACtC,0DAAwC;AACxC,uDAAqC;AACrC,oDAAkC;AAClC,kDAAgC;AAChC,4DAA0C;AAE1C,8DAA4C;AAC5C,+DAA6C;AAC7C,6DAA2C;AAC3C,uEAAqD;AACrD,4EAA0D;AAC1D,oEAAkD;AAClD,6DAA2C;AAC3C,4DAA0C;AAC1C,8DAA4C;AAC5C,8DAA4C;AAC5C,sEAAoD;AACpD,sEAAoD;AAEpD,0EAAwD;AACxD,2DAAyC;AACzC,8DAA4C;AAC5C,0EAAwD;AACxD,8DAA4C,CAAC,0BAA0B;AACvE,sEAAoD;AACpD,2EAAyD;AACzD,sFAAkF;AAAzE,mIAAA,sBAAsB,OAAA;AAC/B,yEAAuD;AACvD,qEAAmD;AACnD,qEAAmD;AACnD,sEAAoD;AACpD,sEAAoD;AACpD,qEAAmD;AACnD,gFAQ+C;AAN3C,mIAAA,yBAAyB,OAAA;AACzB,oIAAA,0BAA0B,OAAA;AAM9B,wEAM2C;AALvC,6DAA6D;AAC7D,wHAAA,kBAAkB,OAAA;AAClB,yHAAA,mBAAmB,OAAA;AACnB,qHAAA,eAAe,OAAA;AACf,oHAAA,cAAc,OAAA;AAGlB,qEAAqE;AACrE,wEAAqE;AAA5D,sHAAA,gBAAgB,OAAA;AACzB,2EAAyD;AACzD,iFAA+D;AAE/D,iEAA+C;AAC/C,kEAAmF;AAA1E,8GAAA,WAAW,OAAA;AACpB,yEAAuD;AACvD,kFAAwG;AAA/F,yHAAA,cAAc,OAAA;AACvB,2EAAyD;AACzD,kEAAgD;AAChD,iEAA+C;AAC/C,uEAAqD;AACrD,qEAAmD;AAEnD,6DAA2C;AAC3C,8DAA4C;AAC5C,wDAAsC;AACtC,wDAAsC;AACtC,uDAAqC;AAErC,4DAA0C;AAI1C,oEAAoE"}
|
@@ -0,0 +1,66 @@
|
|
1
|
+
import { Lexeme, LexemePosition } from './Lexeme';
|
2
|
+
/**
|
3
|
+
* Extended lexeme interface that preserves formatting information
|
4
|
+
*/
|
5
|
+
export interface FormattingLexeme extends Lexeme {
|
6
|
+
/**
|
7
|
+
* Whitespace that follows this lexeme (spaces, tabs, newlines)
|
8
|
+
*/
|
9
|
+
followingWhitespace: string;
|
10
|
+
/**
|
11
|
+
* Inline comments that appear on the same line as this lexeme
|
12
|
+
*/
|
13
|
+
inlineComments: string[];
|
14
|
+
/**
|
15
|
+
* Enhanced position information for precise reconstruction
|
16
|
+
*/
|
17
|
+
position: LexemePosition;
|
18
|
+
}
|
19
|
+
/**
|
20
|
+
* Metadata for tracking modifications during AST transformations
|
21
|
+
*/
|
22
|
+
export interface ModificationInfo {
|
23
|
+
/**
|
24
|
+
* Map of original values to new values for renamed items
|
25
|
+
*/
|
26
|
+
renames: Map<string, string>;
|
27
|
+
/**
|
28
|
+
* Positions where new content was inserted
|
29
|
+
*/
|
30
|
+
insertions: Array<{
|
31
|
+
position: number;
|
32
|
+
content: string;
|
33
|
+
}>;
|
34
|
+
/**
|
35
|
+
* Ranges that were deleted from original content
|
36
|
+
*/
|
37
|
+
deletions: Array<{
|
38
|
+
start: number;
|
39
|
+
end: number;
|
40
|
+
}>;
|
41
|
+
}
|
42
|
+
/**
|
43
|
+
* Container for formatting information associated with AST nodes
|
44
|
+
*/
|
45
|
+
export interface FormattingInfo {
|
46
|
+
/**
|
47
|
+
* Original lexemes with formatting information
|
48
|
+
*/
|
49
|
+
originalLexemes: FormattingLexeme[];
|
50
|
+
/**
|
51
|
+
* Start position in original text
|
52
|
+
*/
|
53
|
+
startPosition: number;
|
54
|
+
/**
|
55
|
+
* End position in original text
|
56
|
+
*/
|
57
|
+
endPosition: number;
|
58
|
+
/**
|
59
|
+
* Modifications made during transformations
|
60
|
+
*/
|
61
|
+
modifications?: ModificationInfo;
|
62
|
+
/**
|
63
|
+
* Original whitespace patterns for reconstruction
|
64
|
+
*/
|
65
|
+
whitespacePatterns?: string[];
|
66
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"FormattingLexeme.js","sourceRoot":"","sources":["../../../src/models/FormattingLexeme.ts"],"names":[],"mappings":""}
|
@@ -33,7 +33,9 @@ export declare class FunctionCall extends SqlComponent {
|
|
33
33
|
argument: ValueComponent | null;
|
34
34
|
over: OverExpression | null;
|
35
35
|
withinGroup: OrderByClause | null;
|
36
|
-
|
36
|
+
withOrdinality: boolean;
|
37
|
+
internalOrderBy: OrderByClause | null;
|
38
|
+
constructor(namespaces: string | string[] | IdentifierString[] | null, name: string | RawString | IdentifierString, argument: ValueComponent | null, over: OverExpression | null, withinGroup?: OrderByClause | null, withOrdinality?: boolean, internalOrderBy?: OrderByClause | null);
|
37
39
|
/**
|
38
40
|
* For backward compatibility: returns the namespaces as IdentifierString[] | null (readonly)
|
39
41
|
*/
|
@@ -57,12 +57,14 @@ class ColumnReference extends SqlComponent_1.SqlComponent {
|
|
57
57
|
exports.ColumnReference = ColumnReference;
|
58
58
|
ColumnReference.kind = Symbol("ColumnReference");
|
59
59
|
class FunctionCall extends SqlComponent_1.SqlComponent {
|
60
|
-
constructor(namespaces, name, argument, over, withinGroup = null) {
|
60
|
+
constructor(namespaces, name, argument, over, withinGroup = null, withOrdinality = false, internalOrderBy = null) {
|
61
61
|
super();
|
62
62
|
this.qualifiedName = new QualifiedName(namespaces, name);
|
63
63
|
this.argument = argument;
|
64
64
|
this.over = over;
|
65
65
|
this.withinGroup = withinGroup;
|
66
|
+
this.withOrdinality = withOrdinality;
|
67
|
+
this.internalOrderBy = internalOrderBy;
|
66
68
|
}
|
67
69
|
/**
|
68
70
|
* For backward compatibility: returns the namespaces as IdentifierString[] | null (readonly)
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ValueComponent.js","sourceRoot":"","sources":["../../../src/models/ValueComponent.ts"],"names":[],"mappings":";;;AAEA,iDAA8C;AA0B9C,MAAa,WAAY,SAAQ,2BAAY;IAGzC,YAAY,WAAwB;QAChC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;;AANL,kCAOC;AANU,gBAAI,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAQxC,MAAa,SAAU,SAAQ,2BAAY;IAGvC,YAAY,MAAwB;QAChC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;;AANL,8BAOC;AANU,cAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAQtC,MAAa,eAAgB,SAAQ,2BAAY;IAC7C;;OAEG;IACH,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC;IACzC,CAAC;IACD;;OAEG;IACH,IAAI,MAAM;QACN,0EAA0E;QAC1E,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,YAAY,gBAAgB,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QACnC,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IAE6B,YAAY,UAAyD,EAAE,MAAiC;QAClI,KAAK,EAAE,CAAC;QACR,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC/E,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,uBAAuB,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;IACrF,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;IACzC,CAAC;IACM,YAAY;QACf,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtF,CAAC;aAAM,CAAC;YACJ,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;;AAlCL,0CAmCC;AAjBU,oBAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAmB5C,MAAa,YAAa,SAAQ,2BAAY;
|
1
|
+
{"version":3,"file":"ValueComponent.js","sourceRoot":"","sources":["../../../src/models/ValueComponent.ts"],"names":[],"mappings":"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"}
|
@@ -1,6 +1,10 @@
|
|
1
1
|
import { Lexeme } from "../models/Lexeme";
|
2
2
|
import { ValueComponent, TypeValue } from "../models/ValueComponent";
|
3
3
|
export declare class FunctionExpressionParser {
|
4
|
+
/**
|
5
|
+
* Aggregate functions that support internal ORDER BY clause
|
6
|
+
*/
|
7
|
+
private static readonly AGGREGATE_FUNCTIONS_WITH_ORDER_BY;
|
4
8
|
/**
|
5
9
|
* Parse ARRAY expressions - handles both ARRAY[...] (literal) and ARRAY(...) (query) syntax
|
6
10
|
* @param lexemes Array of lexemes to parse
|
@@ -38,4 +42,12 @@ export declare class FunctionExpressionParser {
|
|
38
42
|
* @returns Parsed OrderByClause and new index
|
39
43
|
*/
|
40
44
|
private static parseWithinGroupClause;
|
45
|
+
/**
|
46
|
+
* Parse arguments for aggregate functions that support internal ORDER BY
|
47
|
+
* Handles patterns like: string_agg(expr, separator ORDER BY sort_expr)
|
48
|
+
* @param lexemes Array of lexemes to parse
|
49
|
+
* @param index Current parsing index (should point to opening parenthesis)
|
50
|
+
* @returns Parsed arguments, ORDER BY clause, and new index
|
51
|
+
*/
|
52
|
+
private static parseAggregateArguments;
|
41
53
|
}
|
@@ -130,8 +130,20 @@ class FunctionExpressionParser {
|
|
130
130
|
const name = fullNameResult.name;
|
131
131
|
idx = fullNameResult.newIndex;
|
132
132
|
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.OpenParen)) {
|
133
|
-
//
|
134
|
-
const
|
133
|
+
// Check if this is an aggregate function that supports internal ORDER BY
|
134
|
+
const functionName = name.name.toLowerCase();
|
135
|
+
let arg;
|
136
|
+
let internalOrderBy = null;
|
137
|
+
if (this.AGGREGATE_FUNCTIONS_WITH_ORDER_BY.has(functionName)) {
|
138
|
+
// Use special aggregate function argument parser
|
139
|
+
const result = this.parseAggregateArguments(lexemes, idx);
|
140
|
+
arg = { value: result.arguments, newIndex: result.newIndex };
|
141
|
+
internalOrderBy = result.orderByClause;
|
142
|
+
}
|
143
|
+
else {
|
144
|
+
// General argument parsing
|
145
|
+
arg = ValueParser_1.ValueParser.parseArgument(Lexeme_1.TokenType.OpenParen, Lexeme_1.TokenType.CloseParen, lexemes, idx);
|
146
|
+
}
|
135
147
|
idx = arg.newIndex;
|
136
148
|
// Check for WITHIN GROUP clause
|
137
149
|
let withinGroup = null;
|
@@ -140,14 +152,20 @@ class FunctionExpressionParser {
|
|
140
152
|
withinGroup = withinGroupResult.value;
|
141
153
|
idx = withinGroupResult.newIndex;
|
142
154
|
}
|
155
|
+
// Check for WITH ORDINALITY clause
|
156
|
+
let withOrdinality = false;
|
157
|
+
if (idx < lexemes.length && lexemes[idx].value === "with ordinality") {
|
158
|
+
withOrdinality = true;
|
159
|
+
idx++; // Skip single "with ordinality" token
|
160
|
+
}
|
143
161
|
if (idx < lexemes.length && lexemes[idx].value === "over") {
|
144
162
|
const over = OverExpressionParser_1.OverExpressionParser.parseFromLexeme(lexemes, idx);
|
145
163
|
idx = over.newIndex;
|
146
|
-
const value = new ValueComponent_1.FunctionCall(namespaces, name.name, arg.value, over.value, withinGroup);
|
164
|
+
const value = new ValueComponent_1.FunctionCall(namespaces, name.name, arg.value, over.value, withinGroup, withOrdinality, internalOrderBy);
|
147
165
|
return { value, newIndex: idx };
|
148
166
|
}
|
149
167
|
else {
|
150
|
-
const value = new ValueComponent_1.FunctionCall(namespaces, name.name, arg.value, null, withinGroup);
|
168
|
+
const value = new ValueComponent_1.FunctionCall(namespaces, name.name, arg.value, null, withinGroup, withOrdinality, internalOrderBy);
|
151
169
|
return { value, newIndex: idx };
|
152
170
|
}
|
153
171
|
}
|
@@ -199,16 +217,22 @@ class FunctionExpressionParser {
|
|
199
217
|
withinGroup = withinGroupResult.value;
|
200
218
|
idx = withinGroupResult.newIndex;
|
201
219
|
}
|
220
|
+
// Check for WITH ORDINALITY clause
|
221
|
+
let withOrdinality = false;
|
222
|
+
if (idx < lexemes.length && lexemes[idx].value === "with ordinality") {
|
223
|
+
withOrdinality = true;
|
224
|
+
idx++; // Skip single "with ordinality" token
|
225
|
+
}
|
202
226
|
// Use the previously parsed namespaces and function name for consistency
|
203
227
|
if (idx < lexemes.length && lexemes[idx].value === "over") {
|
204
228
|
idx++;
|
205
229
|
const over = OverExpressionParser_1.OverExpressionParser.parseFromLexeme(lexemes, idx);
|
206
230
|
idx = over.newIndex;
|
207
|
-
const value = new ValueComponent_1.FunctionCall(namespaces, name.name, arg, over.value, withinGroup);
|
231
|
+
const value = new ValueComponent_1.FunctionCall(namespaces, name.name, arg, over.value, withinGroup, withOrdinality, null);
|
208
232
|
return { value, newIndex: idx };
|
209
233
|
}
|
210
234
|
else {
|
211
|
-
const value = new ValueComponent_1.FunctionCall(namespaces, name.name, arg, null, withinGroup);
|
235
|
+
const value = new ValueComponent_1.FunctionCall(namespaces, name.name, arg, null, withinGroup, withOrdinality, null);
|
212
236
|
return { value, newIndex: idx };
|
213
237
|
}
|
214
238
|
}
|
@@ -263,6 +287,86 @@ class FunctionExpressionParser {
|
|
263
287
|
idx++;
|
264
288
|
return { value: orderByResult.value, newIndex: idx };
|
265
289
|
}
|
290
|
+
/**
|
291
|
+
* Parse arguments for aggregate functions that support internal ORDER BY
|
292
|
+
* Handles patterns like: string_agg(expr, separator ORDER BY sort_expr)
|
293
|
+
* @param lexemes Array of lexemes to parse
|
294
|
+
* @param index Current parsing index (should point to opening parenthesis)
|
295
|
+
* @returns Parsed arguments, ORDER BY clause, and new index
|
296
|
+
*/
|
297
|
+
static parseAggregateArguments(lexemes, index) {
|
298
|
+
let idx = index;
|
299
|
+
const args = [];
|
300
|
+
let orderByClause = null;
|
301
|
+
// Check for opening parenthesis
|
302
|
+
if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.OpenParen)) {
|
303
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected opening parenthesis.`);
|
304
|
+
}
|
305
|
+
idx++;
|
306
|
+
// Handle empty arguments
|
307
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.CloseParen)) {
|
308
|
+
idx++;
|
309
|
+
return { arguments: new ValueComponent_1.ValueList([]), orderByClause: null, newIndex: idx };
|
310
|
+
}
|
311
|
+
// Handle wildcard case
|
312
|
+
if (idx < lexemes.length && lexemes[idx].value === "*") {
|
313
|
+
const wildcard = new ValueComponent_1.ColumnReference(null, "*");
|
314
|
+
idx++;
|
315
|
+
if (idx < lexemes.length && (lexemes[idx].type & Lexeme_1.TokenType.CloseParen)) {
|
316
|
+
idx++;
|
317
|
+
return { arguments: wildcard, orderByClause: null, newIndex: idx };
|
318
|
+
}
|
319
|
+
else {
|
320
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected closing parenthesis after wildcard '*'.`);
|
321
|
+
}
|
322
|
+
}
|
323
|
+
// Parse first argument
|
324
|
+
const firstArg = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
325
|
+
idx = firstArg.newIndex;
|
326
|
+
args.push(firstArg.value);
|
327
|
+
// Parse additional arguments separated by comma, or ORDER BY
|
328
|
+
while (idx < lexemes.length &&
|
329
|
+
((lexemes[idx].type & Lexeme_1.TokenType.Comma) || lexemes[idx].value === "order by")) {
|
330
|
+
// Check if current token is ORDER BY (without comma)
|
331
|
+
if (lexemes[idx].value === "order by") {
|
332
|
+
// Parse ORDER BY clause
|
333
|
+
const orderByResult = OrderByClauseParser_1.OrderByClauseParser.parseFromLexeme(lexemes, idx);
|
334
|
+
idx = orderByResult.newIndex;
|
335
|
+
orderByClause = orderByResult.value;
|
336
|
+
break; // ORDER BY should be the last element in aggregate functions
|
337
|
+
}
|
338
|
+
if (lexemes[idx].type & Lexeme_1.TokenType.Comma) {
|
339
|
+
idx++; // Skip comma
|
340
|
+
// Check if next token after comma is ORDER BY
|
341
|
+
if (idx < lexemes.length && lexemes[idx].value === "order by") {
|
342
|
+
// Parse ORDER BY clause
|
343
|
+
const orderByResult = OrderByClauseParser_1.OrderByClauseParser.parseFromLexeme(lexemes, idx);
|
344
|
+
idx = orderByResult.newIndex;
|
345
|
+
orderByClause = orderByResult.value;
|
346
|
+
break; // ORDER BY should be the last element in aggregate functions
|
347
|
+
}
|
348
|
+
// Parse regular argument after comma
|
349
|
+
const argResult = ValueParser_1.ValueParser.parseFromLexeme(lexemes, idx);
|
350
|
+
idx = argResult.newIndex;
|
351
|
+
args.push(argResult.value);
|
352
|
+
}
|
353
|
+
}
|
354
|
+
// Check for closing parenthesis
|
355
|
+
if (idx >= lexemes.length || !(lexemes[idx].type & Lexeme_1.TokenType.CloseParen)) {
|
356
|
+
throw ParseError_1.ParseError.fromUnparsedLexemes(lexemes, idx, `Expected closing parenthesis.`);
|
357
|
+
}
|
358
|
+
idx++;
|
359
|
+
// Return single argument if only one, otherwise return ValueList
|
360
|
+
const argumentsValue = args.length === 1 ? args[0] : new ValueComponent_1.ValueList(args);
|
361
|
+
return { arguments: argumentsValue, orderByClause, newIndex: idx };
|
362
|
+
}
|
266
363
|
}
|
267
364
|
exports.FunctionExpressionParser = FunctionExpressionParser;
|
365
|
+
/**
|
366
|
+
* Aggregate functions that support internal ORDER BY clause
|
367
|
+
*/
|
368
|
+
FunctionExpressionParser.AGGREGATE_FUNCTIONS_WITH_ORDER_BY = new Set([
|
369
|
+
'string_agg', 'array_agg', 'json_agg', 'jsonb_agg',
|
370
|
+
'json_object_agg', 'jsonb_object_agg', 'xmlagg'
|
371
|
+
]);
|
268
372
|
//# sourceMappingURL=FunctionExpressionParser.js.map
|