rawsql-ts 0.11.32-beta → 0.11.34-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 +28 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +52 -36
- 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 +32 -0
- package/dist/esm/src/index.js +28 -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 +9 -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/CTEBuilder.js +2 -2
- package/dist/esm/src/transformers/CTEBuilder.js.map +1 -1
- 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/CursorContextAnalyzer.d.ts +70 -0
- package/dist/esm/src/utils/CursorContextAnalyzer.js +322 -0
- package/dist/esm/src/utils/CursorContextAnalyzer.js.map +1 -0
- package/dist/esm/src/utils/IntelliSenseApi.d.ts +114 -0
- package/dist/esm/src/utils/IntelliSenseApi.js +284 -0
- package/dist/esm/src/utils/IntelliSenseApi.js.map +1 -0
- package/dist/esm/src/utils/KeywordCache.d.ts +65 -0
- package/dist/esm/src/utils/KeywordCache.js +202 -0
- package/dist/esm/src/utils/KeywordCache.js.map +1 -0
- 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/src/utils/MultiQuerySplitter.d.ts +131 -0
- package/dist/esm/src/utils/MultiQuerySplitter.js +287 -0
- package/dist/esm/src/utils/MultiQuerySplitter.js.map +1 -0
- package/dist/esm/src/utils/PositionAwareParser.d.ts +85 -0
- package/dist/esm/src/utils/PositionAwareParser.js +336 -0
- package/dist/esm/src/utils/PositionAwareParser.js.map +1 -0
- package/dist/esm/src/utils/ScopeResolver.d.ts +127 -0
- package/dist/esm/src/utils/ScopeResolver.js +268 -0
- package/dist/esm/src/utils/ScopeResolver.js.map +1 -0
- package/dist/esm/src/utils/TextPositionUtils.d.ts +62 -0
- package/dist/esm/src/utils/TextPositionUtils.js +124 -0
- package/dist/esm/src/utils/TextPositionUtils.js.map +1 -0
- package/dist/esm/tsconfig.browser.tsbuildinfo +1 -1
- package/dist/index.min.js +52 -36
- 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 +32 -0
- package/dist/src/index.js +30 -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 +10 -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/CTEBuilder.js +2 -2
- package/dist/src/transformers/CTEBuilder.js.map +1 -1
- 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/CursorContextAnalyzer.d.ts +70 -0
- package/dist/src/utils/CursorContextAnalyzer.js +338 -0
- package/dist/src/utils/CursorContextAnalyzer.js.map +1 -0
- package/dist/src/utils/IntelliSenseApi.d.ts +114 -0
- package/dist/src/utils/IntelliSenseApi.js +292 -0
- package/dist/src/utils/IntelliSenseApi.js.map +1 -0
- package/dist/src/utils/KeywordCache.d.ts +65 -0
- package/dist/src/utils/KeywordCache.js +206 -0
- package/dist/src/utils/KeywordCache.js.map +1 -0
- 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/src/utils/MultiQuerySplitter.d.ts +131 -0
- package/dist/src/utils/MultiQuerySplitter.js +292 -0
- package/dist/src/utils/MultiQuerySplitter.js.map +1 -0
- package/dist/src/utils/PositionAwareParser.d.ts +85 -0
- package/dist/src/utils/PositionAwareParser.js +363 -0
- package/dist/src/utils/PositionAwareParser.js.map +1 -0
- package/dist/src/utils/ScopeResolver.d.ts +127 -0
- package/dist/src/utils/ScopeResolver.js +272 -0
- package/dist/src/utils/ScopeResolver.js.map +1 -0
- package/dist/src/utils/TextPositionUtils.d.ts +62 -0
- package/dist/src/utils/TextPositionUtils.js +128 -0
- package/dist/src/utils/TextPositionUtils.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
@@ -1,4 +1,11 @@
|
|
1
1
|
import { Lexeme } from '../models/Lexeme';
|
2
|
+
import { FormattingLexeme } from '../models/FormattingLexeme';
|
3
|
+
/**
|
4
|
+
* Options for tokenization behavior
|
5
|
+
*/
|
6
|
+
export interface TokenizeOptions {
|
7
|
+
preserveFormatting?: boolean;
|
8
|
+
}
|
2
9
|
/**
|
3
10
|
* Class responsible for tokenizing SQL input.
|
4
11
|
*/
|
@@ -33,6 +40,14 @@ export declare class SqlTokenizer {
|
|
33
40
|
* @returns True if more input can be read; otherwise, false.
|
34
41
|
*/
|
35
42
|
private canRead;
|
43
|
+
/**
|
44
|
+
* Tokenizes the input SQL with optional formatting preservation.
|
45
|
+
*/
|
46
|
+
tokenize(): Lexeme[];
|
47
|
+
tokenize(options: {
|
48
|
+
preserveFormatting: true;
|
49
|
+
}): FormattingLexeme[];
|
50
|
+
tokenize(options?: TokenizeOptions): Lexeme[] | FormattingLexeme[];
|
36
51
|
/**
|
37
52
|
* Reads the lexemes from the input string.
|
38
53
|
*
|
@@ -41,9 +56,9 @@ export declare class SqlTokenizer {
|
|
41
56
|
*/
|
42
57
|
readLexmes(): Lexeme[];
|
43
58
|
/**
|
44
|
-
*
|
59
|
+
* Tokenizes the input SQL without formatting preservation (internal method)
|
45
60
|
*/
|
46
|
-
private
|
61
|
+
private tokenizeBasic;
|
47
62
|
/**
|
48
63
|
* Adds comments to the token.
|
49
64
|
*/
|
@@ -61,4 +76,29 @@ export declare class SqlTokenizer {
|
|
61
76
|
* @returns A string containing the debug position information.
|
62
77
|
*/
|
63
78
|
private getDebugPositionInfo;
|
79
|
+
/**
|
80
|
+
* Tokenizes the input SQL while preserving formatting information
|
81
|
+
*/
|
82
|
+
private tokenizeWithFormatting;
|
83
|
+
private mapToFormattingLexemes;
|
84
|
+
/**
|
85
|
+
* Find lexeme at a specific position, handling case variations
|
86
|
+
*/
|
87
|
+
private findLexemeAtPosition;
|
88
|
+
private isValidLexemeMatch;
|
89
|
+
/**
|
90
|
+
* Check if character is alphanumeric or underscore (faster than regex)
|
91
|
+
*/
|
92
|
+
private isAlphanumericUnderscore;
|
93
|
+
/**
|
94
|
+
* Check if character is whitespace (faster than regex)
|
95
|
+
*/
|
96
|
+
private isWhitespace;
|
97
|
+
private extractCommentsFromWhitespace;
|
98
|
+
/**
|
99
|
+
* Skip whitespace and comments from the given position
|
100
|
+
*/
|
101
|
+
private skipWhitespaceAndComments;
|
102
|
+
private getLineColumnInfo;
|
103
|
+
private getLineColumn;
|
64
104
|
}
|
@@ -62,6 +62,14 @@ class SqlTokenizer {
|
|
62
62
|
canRead(shift = 0) {
|
63
63
|
return !this.isEndOfInput(shift);
|
64
64
|
}
|
65
|
+
tokenize(options) {
|
66
|
+
if (options === null || options === void 0 ? void 0 : options.preserveFormatting) {
|
67
|
+
return this.tokenizeWithFormatting();
|
68
|
+
}
|
69
|
+
// Create a fresh tokenizer instance for clean state
|
70
|
+
const freshTokenizer = new SqlTokenizer(this.input);
|
71
|
+
return freshTokenizer.readLexmes();
|
72
|
+
}
|
65
73
|
/**
|
66
74
|
* Reads the lexemes from the input string.
|
67
75
|
*
|
@@ -69,6 +77,14 @@ class SqlTokenizer {
|
|
69
77
|
* @throws Error if an unexpected character is encountered.
|
70
78
|
*/
|
71
79
|
readLexmes() {
|
80
|
+
return this.tokenizeBasic();
|
81
|
+
}
|
82
|
+
/**
|
83
|
+
* Tokenizes the input SQL without formatting preservation (internal method)
|
84
|
+
*/
|
85
|
+
tokenizeBasic() {
|
86
|
+
// Reset position for this tokenization
|
87
|
+
this.position = 0;
|
72
88
|
// Pre-allocate array with estimated capacity for better performance
|
73
89
|
const estimatedTokens = Math.ceil(this.input.length / 8); // Assuming average token length of 8 chars
|
74
90
|
const lexemes = new Array(estimatedTokens);
|
@@ -123,18 +139,6 @@ class SqlTokenizer {
|
|
123
139
|
// Trim the array to actual size used
|
124
140
|
return lexemeCount === estimatedTokens ? lexemes : lexemes.slice(0, lexemeCount);
|
125
141
|
}
|
126
|
-
/**
|
127
|
-
* Adds pending comments to the last token.
|
128
|
-
*/
|
129
|
-
addPendingCommentsToLastToken(lexemes, pendingComments) {
|
130
|
-
if (pendingComments.length > 0 && lexemes.length > 0) {
|
131
|
-
const lastToken = lexemes[lexemes.length - 1];
|
132
|
-
if (lastToken.comments === null) {
|
133
|
-
lastToken.comments = [];
|
134
|
-
}
|
135
|
-
lastToken.comments.push(...pendingComments);
|
136
|
-
}
|
137
|
-
}
|
138
142
|
/**
|
139
143
|
* Adds comments to the token.
|
140
144
|
*/
|
@@ -171,6 +175,212 @@ class SqlTokenizer {
|
|
171
175
|
getDebugPositionInfo(errPosition) {
|
172
176
|
return stringUtils_1.StringUtils.getDebugPositionInfo(this.input, errPosition);
|
173
177
|
}
|
178
|
+
/**
|
179
|
+
* Tokenizes the input SQL while preserving formatting information
|
180
|
+
*/
|
181
|
+
tokenizeWithFormatting() {
|
182
|
+
// Get regular lexemes first
|
183
|
+
const regularLexemes = this.tokenizeBasic();
|
184
|
+
// Map regular lexemes to formatting lexemes with whitespace info
|
185
|
+
return this.mapToFormattingLexemes(regularLexemes);
|
186
|
+
}
|
187
|
+
mapToFormattingLexemes(regularLexemes) {
|
188
|
+
if (regularLexemes.length === 0) {
|
189
|
+
return [];
|
190
|
+
}
|
191
|
+
// First pass: find all lexeme positions in the input
|
192
|
+
const lexemePositions = [];
|
193
|
+
let searchPos = 0;
|
194
|
+
for (const lexeme of regularLexemes) {
|
195
|
+
// Skip whitespace and comments
|
196
|
+
searchPos = this.skipWhitespaceAndComments(searchPos);
|
197
|
+
// Find lexeme at current position
|
198
|
+
const lexemeInfo = this.findLexemeAtPosition(lexeme, searchPos);
|
199
|
+
if (lexemeInfo) {
|
200
|
+
lexemePositions.push(lexemeInfo);
|
201
|
+
searchPos = lexemeInfo.endPosition;
|
202
|
+
}
|
203
|
+
else {
|
204
|
+
// Fallback: assume lexeme length and continue
|
205
|
+
const fallbackInfo = {
|
206
|
+
startPosition: searchPos,
|
207
|
+
endPosition: searchPos + lexeme.value.length
|
208
|
+
};
|
209
|
+
lexemePositions.push(fallbackInfo);
|
210
|
+
searchPos = fallbackInfo.endPosition;
|
211
|
+
}
|
212
|
+
}
|
213
|
+
// Second pass: build formatting lexemes with proper whitespace segments
|
214
|
+
const formattingLexemes = [];
|
215
|
+
for (let i = 0; i < regularLexemes.length; i++) {
|
216
|
+
const lexeme = regularLexemes[i];
|
217
|
+
const lexemeInfo = lexemePositions[i];
|
218
|
+
// Determine the end position of the whitespace segment
|
219
|
+
const nextLexemeStartPos = i < regularLexemes.length - 1
|
220
|
+
? lexemePositions[i + 1].startPosition
|
221
|
+
: this.input.length;
|
222
|
+
// Extract whitespace between this lexeme and the next
|
223
|
+
const whitespaceSegment = this.input.slice(lexemeInfo.endPosition, nextLexemeStartPos);
|
224
|
+
const inlineComments = this.extractCommentsFromWhitespace(whitespaceSegment);
|
225
|
+
const formattingLexeme = {
|
226
|
+
...lexeme,
|
227
|
+
followingWhitespace: whitespaceSegment,
|
228
|
+
inlineComments,
|
229
|
+
position: {
|
230
|
+
startPosition: lexemeInfo.startPosition,
|
231
|
+
endPosition: lexemeInfo.endPosition,
|
232
|
+
...this.getLineColumnInfo(lexemeInfo.startPosition, lexemeInfo.endPosition)
|
233
|
+
}
|
234
|
+
};
|
235
|
+
formattingLexemes.push(formattingLexeme);
|
236
|
+
}
|
237
|
+
return formattingLexemes;
|
238
|
+
}
|
239
|
+
/**
|
240
|
+
* Find lexeme at a specific position, handling case variations
|
241
|
+
*/
|
242
|
+
findLexemeAtPosition(lexeme, expectedPos) {
|
243
|
+
if (expectedPos >= this.input.length) {
|
244
|
+
return null;
|
245
|
+
}
|
246
|
+
// For command tokens (keywords), the lexeme.value might be lowercase but appear uppercase in input
|
247
|
+
const valuesToTry = [lexeme.value, lexeme.value.toUpperCase(), lexeme.value.toLowerCase()];
|
248
|
+
for (const valueToTry of valuesToTry) {
|
249
|
+
// Check if the input at expected position matches this value
|
250
|
+
if (expectedPos + valueToTry.length <= this.input.length &&
|
251
|
+
this.input.substring(expectedPos, expectedPos + valueToTry.length) === valueToTry &&
|
252
|
+
this.isValidLexemeMatch(valueToTry, expectedPos)) {
|
253
|
+
return {
|
254
|
+
startPosition: expectedPos,
|
255
|
+
endPosition: expectedPos + valueToTry.length
|
256
|
+
};
|
257
|
+
}
|
258
|
+
}
|
259
|
+
return null;
|
260
|
+
}
|
261
|
+
isValidLexemeMatch(value, position) {
|
262
|
+
// Check character before
|
263
|
+
if (position > 0) {
|
264
|
+
const charBefore = this.input[position - 1];
|
265
|
+
if (this.isAlphanumericUnderscore(charBefore)) {
|
266
|
+
return false; // Part of another identifier
|
267
|
+
}
|
268
|
+
}
|
269
|
+
// Check character after
|
270
|
+
const endPosition = position + value.length;
|
271
|
+
if (endPosition < this.input.length) {
|
272
|
+
const charAfter = this.input[endPosition];
|
273
|
+
if (this.isAlphanumericUnderscore(charAfter)) {
|
274
|
+
return false; // Part of another identifier
|
275
|
+
}
|
276
|
+
}
|
277
|
+
return true;
|
278
|
+
}
|
279
|
+
/**
|
280
|
+
* Check if character is alphanumeric or underscore (faster than regex)
|
281
|
+
*/
|
282
|
+
isAlphanumericUnderscore(char) {
|
283
|
+
const code = char.charCodeAt(0);
|
284
|
+
return (code >= 48 && code <= 57) || // 0-9
|
285
|
+
(code >= 65 && code <= 90) || // A-Z
|
286
|
+
(code >= 97 && code <= 122) || // a-z
|
287
|
+
code === 95; // _
|
288
|
+
}
|
289
|
+
/**
|
290
|
+
* Check if character is whitespace (faster than regex)
|
291
|
+
*/
|
292
|
+
isWhitespace(char) {
|
293
|
+
const code = char.charCodeAt(0);
|
294
|
+
return code === 32 || // space
|
295
|
+
code === 9 || // tab
|
296
|
+
code === 10 || // \n
|
297
|
+
code === 13; // \r
|
298
|
+
}
|
299
|
+
extractCommentsFromWhitespace(whitespaceSegment) {
|
300
|
+
const inlineComments = [];
|
301
|
+
let pos = 0;
|
302
|
+
while (pos < whitespaceSegment.length) {
|
303
|
+
const oldPos = pos;
|
304
|
+
// Try to extract comments using StringUtils
|
305
|
+
const result = stringUtils_1.StringUtils.readWhiteSpaceAndComment(whitespaceSegment, pos);
|
306
|
+
// Add any comments found
|
307
|
+
if (result.lines.length > 0) {
|
308
|
+
inlineComments.push(...result.lines);
|
309
|
+
}
|
310
|
+
// Move position forward
|
311
|
+
pos = result.position;
|
312
|
+
// Prevent infinite loop - if position didn't advance, manually skip one character
|
313
|
+
if (pos === oldPos) {
|
314
|
+
pos++;
|
315
|
+
}
|
316
|
+
}
|
317
|
+
return inlineComments;
|
318
|
+
}
|
319
|
+
/**
|
320
|
+
* Skip whitespace and comments from the given position
|
321
|
+
*/
|
322
|
+
skipWhitespaceAndComments(pos) {
|
323
|
+
let currentPos = pos;
|
324
|
+
while (currentPos < this.input.length) {
|
325
|
+
const char = this.input[currentPos];
|
326
|
+
// Skip whitespace
|
327
|
+
if (this.isWhitespace(char)) {
|
328
|
+
currentPos++;
|
329
|
+
continue;
|
330
|
+
}
|
331
|
+
// Skip line comments
|
332
|
+
if (currentPos < this.input.length - 1 &&
|
333
|
+
this.input[currentPos] === '-' && this.input[currentPos + 1] === '-') {
|
334
|
+
// Find end of line or end of input
|
335
|
+
while (currentPos < this.input.length &&
|
336
|
+
this.input[currentPos] !== '\n' && this.input[currentPos] !== '\r') {
|
337
|
+
currentPos++;
|
338
|
+
}
|
339
|
+
continue;
|
340
|
+
}
|
341
|
+
// Skip block comments
|
342
|
+
if (currentPos < this.input.length - 1 &&
|
343
|
+
this.input[currentPos] === '/' && this.input[currentPos + 1] === '*') {
|
344
|
+
currentPos += 2;
|
345
|
+
// Find end of comment
|
346
|
+
while (currentPos < this.input.length - 1) {
|
347
|
+
if (this.input[currentPos] === '*' && this.input[currentPos + 1] === '/') {
|
348
|
+
currentPos += 2;
|
349
|
+
break;
|
350
|
+
}
|
351
|
+
currentPos++;
|
352
|
+
}
|
353
|
+
continue;
|
354
|
+
}
|
355
|
+
// No more whitespace or comments
|
356
|
+
break;
|
357
|
+
}
|
358
|
+
return currentPos;
|
359
|
+
}
|
360
|
+
getLineColumnInfo(startPos, endPos) {
|
361
|
+
const startInfo = this.getLineColumn(startPos);
|
362
|
+
const endInfo = this.getLineColumn(endPos);
|
363
|
+
return {
|
364
|
+
startLine: startInfo.line,
|
365
|
+
startColumn: startInfo.column,
|
366
|
+
endLine: endInfo.line,
|
367
|
+
endColumn: endInfo.column
|
368
|
+
};
|
369
|
+
}
|
370
|
+
getLineColumn(position) {
|
371
|
+
let line = 1;
|
372
|
+
let column = 1;
|
373
|
+
for (let i = 0; i < Math.min(position, this.input.length); i++) {
|
374
|
+
if (this.input[i] === '\n') {
|
375
|
+
line++;
|
376
|
+
column = 1;
|
377
|
+
}
|
378
|
+
else {
|
379
|
+
column++;
|
380
|
+
}
|
381
|
+
}
|
382
|
+
return { line, column };
|
383
|
+
}
|
174
384
|
}
|
175
385
|
exports.SqlTokenizer = SqlTokenizer;
|
176
386
|
//# sourceMappingURL=SqlTokenizer.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"SqlTokenizer.js","sourceRoot":"","sources":["../../../src/parsers/SqlTokenizer.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"SqlTokenizer.js","sourceRoot":"","sources":["../../../src/parsers/SqlTokenizer.ts"],"names":[],"mappings":"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"}
|
@@ -1,7 +1,10 @@
|
|
1
1
|
import { BaseTokenReader } from "./BaseTokenReader";
|
2
2
|
import { Lexeme } from '../models/Lexeme';
|
3
|
+
import { KeywordTrie } from "../models/KeywordTrie";
|
3
4
|
import { KeywordParser } from "../parsers/KeywordParser";
|
5
|
+
declare const keywordTrie: KeywordTrie;
|
4
6
|
export declare const joinkeywordParser: KeywordParser;
|
7
|
+
export { keywordTrie as commandKeywordTrie };
|
5
8
|
export declare class CommandTokenReader extends BaseTokenReader {
|
6
9
|
tryRead(previous: Lexeme | null): Lexeme | null;
|
7
10
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.CommandTokenReader = exports.joinkeywordParser = void 0;
|
3
|
+
exports.CommandTokenReader = exports.commandKeywordTrie = exports.joinkeywordParser = void 0;
|
4
4
|
const BaseTokenReader_1 = require("./BaseTokenReader");
|
5
5
|
const Lexeme_1 = require("../models/Lexeme");
|
6
6
|
const KeywordTrie_1 = require("../models/KeywordTrie");
|
@@ -26,6 +26,11 @@ const joinTrie = new KeywordTrie_1.KeywordTrie([
|
|
26
26
|
["natural", "right", "outer", "join"],
|
27
27
|
["natural", "full", "join"],
|
28
28
|
["natural", "full", "outer", "join"],
|
29
|
+
// LATERAL JOIN patterns
|
30
|
+
["lateral", "join"],
|
31
|
+
["lateral", "inner", "join"],
|
32
|
+
["lateral", "left", "join"],
|
33
|
+
["lateral", "left", "outer", "join"],
|
29
34
|
]);
|
30
35
|
const keywordTrie = new KeywordTrie_1.KeywordTrie([
|
31
36
|
["with"],
|
@@ -74,6 +79,8 @@ const keywordTrie = new KeywordTrie_1.KeywordTrie([
|
|
74
79
|
["groups"],
|
75
80
|
// aggregate functions with WITHIN GROUP
|
76
81
|
["within", "group"],
|
82
|
+
// table functions with WITH ORDINALITY
|
83
|
+
["with", "ordinality"],
|
77
84
|
// window frame
|
78
85
|
["current", "row"],
|
79
86
|
["unbounded", "preceding"],
|
@@ -114,6 +121,7 @@ const keywordTrie = new KeywordTrie_1.KeywordTrie([
|
|
114
121
|
["nulls", "first"],
|
115
122
|
["nulls", "last"],
|
116
123
|
]);
|
124
|
+
exports.commandKeywordTrie = keywordTrie;
|
117
125
|
const keywordParser = new KeywordParser_1.KeywordParser(keywordTrie);
|
118
126
|
exports.joinkeywordParser = new KeywordParser_1.KeywordParser(joinTrie);
|
119
127
|
class CommandTokenReader extends BaseTokenReader_1.BaseTokenReader {
|
@@ -130,7 +138,7 @@ class CommandTokenReader extends BaseTokenReader_1.BaseTokenReader {
|
|
130
138
|
const keyword = keywordParser.parse(this.input, this.position);
|
131
139
|
if (keyword !== null) {
|
132
140
|
this.position = keyword.newPosition;
|
133
|
-
return this.createLexeme(Lexeme_1.TokenType.Command, keyword.keyword);
|
141
|
+
return this.createLexeme(Lexeme_1.TokenType.Command, keyword.keyword, keyword.comments);
|
134
142
|
}
|
135
143
|
// check hint clause
|
136
144
|
if (this.canRead(2) && this.input[this.position] === '/' && this.input[this.position + 1] === '*' && this.input[this.position + 2] === '+') {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CommandTokenReader.js","sourceRoot":"","sources":["../../../src/tokenReaders/CommandTokenReader.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"CommandTokenReader.js","sourceRoot":"","sources":["../../../src/tokenReaders/CommandTokenReader.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,199 @@
|
|
1
|
+
import { SelectQuery } from "../models/SelectQuery";
|
2
|
+
import { LineColumn } from "../utils/LexemeCursor";
|
3
|
+
import { Lexeme } from "../models/Lexeme";
|
4
|
+
/**
|
5
|
+
* Represents an alias scope within SQL query structure
|
6
|
+
*/
|
7
|
+
export interface AliasScope {
|
8
|
+
type: 'cte' | 'subquery' | 'main';
|
9
|
+
name?: string;
|
10
|
+
query: SelectQuery;
|
11
|
+
startPosition: number;
|
12
|
+
endPosition: number;
|
13
|
+
}
|
14
|
+
/**
|
15
|
+
* Represents a reference to an alias within the SQL
|
16
|
+
*/
|
17
|
+
export interface AliasReference {
|
18
|
+
lexeme: Lexeme;
|
19
|
+
scope: AliasScope;
|
20
|
+
referenceType: 'definition' | 'usage';
|
21
|
+
context: 'table' | 'column';
|
22
|
+
}
|
23
|
+
/**
|
24
|
+
* Options for alias renaming operations
|
25
|
+
*/
|
26
|
+
export interface RenameOptions {
|
27
|
+
scopeType?: 'auto' | 'cte' | 'subquery' | 'main';
|
28
|
+
dryRun?: boolean;
|
29
|
+
preserveFormatting?: boolean;
|
30
|
+
}
|
31
|
+
/**
|
32
|
+
* Result of alias renaming operation
|
33
|
+
*/
|
34
|
+
export interface RenameResult {
|
35
|
+
success: boolean;
|
36
|
+
originalSql: string;
|
37
|
+
newSql?: string;
|
38
|
+
changes: AliasChange[];
|
39
|
+
conflicts?: string[];
|
40
|
+
scope?: AliasScope;
|
41
|
+
}
|
42
|
+
/**
|
43
|
+
* Details of a specific alias change
|
44
|
+
*/
|
45
|
+
export interface AliasChange {
|
46
|
+
oldName: string;
|
47
|
+
newName: string;
|
48
|
+
position: LineColumn;
|
49
|
+
context: 'table' | 'column';
|
50
|
+
referenceType: 'definition' | 'usage';
|
51
|
+
}
|
52
|
+
/**
|
53
|
+
* A utility class for renaming table and column aliases in SQL queries.
|
54
|
+
*
|
55
|
+
* This class provides functionality to rename aliases within specific scopes
|
56
|
+
* (CTE, subquery, or main query) based on cursor position from GUI editors.
|
57
|
+
* It automatically detects the appropriate scope and updates all references
|
58
|
+
* to the alias within that scope boundary.
|
59
|
+
*
|
60
|
+
* @example
|
61
|
+
* ```typescript
|
62
|
+
* import { AliasRenamer } from 'rawsql-ts';
|
63
|
+
*
|
64
|
+
* const sql = `
|
65
|
+
* SELECT u.name, o.date
|
66
|
+
* FROM users u
|
67
|
+
* JOIN orders o ON u.id = o.user_id
|
68
|
+
* `;
|
69
|
+
*
|
70
|
+
* const renamer = new AliasRenamer();
|
71
|
+
*
|
72
|
+
* // Rename 'u' to 'user_alias' by selecting it at line 2, column 10
|
73
|
+
* const result = renamer.renameAlias(sql, { line: 2, column: 10 }, 'user_alias');
|
74
|
+
*
|
75
|
+
* if (result.success) {
|
76
|
+
* console.log(result.newSql);
|
77
|
+
* // SELECT user_alias.name, o.date
|
78
|
+
* // FROM users user_alias
|
79
|
+
* // JOIN orders o ON user_alias.id = o.user_id
|
80
|
+
* }
|
81
|
+
* ```
|
82
|
+
*
|
83
|
+
* @since 0.12.0
|
84
|
+
*/
|
85
|
+
export declare class AliasRenamer {
|
86
|
+
private keywordParser;
|
87
|
+
/**
|
88
|
+
* Creates a new instance of AliasRenamer.
|
89
|
+
*/
|
90
|
+
constructor();
|
91
|
+
/**
|
92
|
+
* Renames an alias based on the cursor position in GUI editor.
|
93
|
+
*
|
94
|
+
* This method detects the alias at the specified line and column position,
|
95
|
+
* determines its scope (CTE, subquery, or main query), and renames all
|
96
|
+
* references to that alias within the scope boundaries.
|
97
|
+
*
|
98
|
+
* @param sql - The SQL string containing the alias to rename
|
99
|
+
* @param position - Line and column position (1-based) from GUI editor
|
100
|
+
* @param newName - The new name for the alias
|
101
|
+
* @param options - Optional configuration for the rename operation
|
102
|
+
* @returns Result containing success status, modified SQL, and change details
|
103
|
+
*
|
104
|
+
* @example
|
105
|
+
* ```typescript
|
106
|
+
* const sql = "SELECT u.name FROM users u WHERE u.active = true";
|
107
|
+
* const result = renamer.renameAlias(sql, { line: 1, column: 8 }, 'user_table');
|
108
|
+
*
|
109
|
+
* if (result.success) {
|
110
|
+
* console.log(result.newSql);
|
111
|
+
* // "SELECT user_table.name FROM users user_table WHERE user_table.active = true"
|
112
|
+
* }
|
113
|
+
* ```
|
114
|
+
*
|
115
|
+
* @throws {Error} When the SQL cannot be parsed or position is invalid
|
116
|
+
*/
|
117
|
+
renameAlias(sql: string, position: LineColumn, newName: string, options?: RenameOptions): RenameResult;
|
118
|
+
/**
|
119
|
+
* Validates input parameters for alias renaming.
|
120
|
+
*/
|
121
|
+
private validateInputs;
|
122
|
+
/**
|
123
|
+
* Validates that the lexeme represents a valid alias.
|
124
|
+
*/
|
125
|
+
private validateLexemeIsAlias;
|
126
|
+
/**
|
127
|
+
* Detects the scope (CTE, subquery, main query) containing the alias.
|
128
|
+
*/
|
129
|
+
private detectAliasScope;
|
130
|
+
/**
|
131
|
+
* Creates scope for a specific requested type.
|
132
|
+
*/
|
133
|
+
private createScopeForType;
|
134
|
+
/**
|
135
|
+
* Auto-detects the most appropriate scope based on cursor position.
|
136
|
+
*/
|
137
|
+
private autoDetectScope;
|
138
|
+
/**
|
139
|
+
* Detects if the position is within a CTE and returns appropriate scope.
|
140
|
+
*/
|
141
|
+
private detectCTEScope;
|
142
|
+
/**
|
143
|
+
* Detects if the position is within a subquery scope.
|
144
|
+
*/
|
145
|
+
private detectSubqueryScope;
|
146
|
+
/**
|
147
|
+
* Finds a CTE query by name within the parsed AST.
|
148
|
+
*/
|
149
|
+
private findCTEQueryByName;
|
150
|
+
/**
|
151
|
+
* Collects all references to the specified alias within the given scope.
|
152
|
+
*/
|
153
|
+
private collectAliasReferences;
|
154
|
+
/**
|
155
|
+
* Collects table alias references within the scope.
|
156
|
+
*/
|
157
|
+
private collectTableAliasReferences;
|
158
|
+
/**
|
159
|
+
* Collects column alias references (table_alias.column format) within the scope.
|
160
|
+
*/
|
161
|
+
private collectColumnAliasReferences;
|
162
|
+
/**
|
163
|
+
* Creates a lexeme representation from a table source for reference tracking.
|
164
|
+
*/
|
165
|
+
private createLexemeFromTableSource;
|
166
|
+
/**
|
167
|
+
* Creates a lexeme representation from a namespace for reference tracking.
|
168
|
+
*/
|
169
|
+
private createLexemeFromNamespace;
|
170
|
+
/**
|
171
|
+
* Checks for naming conflicts when renaming to the new name.
|
172
|
+
*/
|
173
|
+
private checkNameConflicts;
|
174
|
+
/**
|
175
|
+
* Checks for conflicts with existing table aliases and table names in the scope.
|
176
|
+
*/
|
177
|
+
private checkTableAliasConflicts;
|
178
|
+
/**
|
179
|
+
* Extracts the actual table name from a table source (not the alias).
|
180
|
+
*/
|
181
|
+
private extractTableName;
|
182
|
+
/**
|
183
|
+
* Checks if the new name conflicts with SQL keywords using the existing KeywordTrie.
|
184
|
+
*/
|
185
|
+
private checkKeywordConflicts;
|
186
|
+
/**
|
187
|
+
* Fallback method for basic reserved keyword checking.
|
188
|
+
*/
|
189
|
+
private isBasicReservedKeyword;
|
190
|
+
/**
|
191
|
+
* Prepares change details for the rename operation.
|
192
|
+
*/
|
193
|
+
private prepareChanges;
|
194
|
+
/**
|
195
|
+
* Enhanced SQL text replacement using lexeme-based approach.
|
196
|
+
* This method re-tokenizes the SQL to get accurate position information.
|
197
|
+
*/
|
198
|
+
private performLexemeBasedRename;
|
199
|
+
}
|