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
@@ -0,0 +1,599 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.AliasRenamer = void 0;
|
4
|
+
const SelectQuery_1 = require("../models/SelectQuery");
|
5
|
+
const LexemeCursor_1 = require("../utils/LexemeCursor");
|
6
|
+
const Lexeme_1 = require("../models/Lexeme");
|
7
|
+
const SelectQueryParser_1 = require("../parsers/SelectQueryParser");
|
8
|
+
const CTERegionDetector_1 = require("../utils/CTERegionDetector");
|
9
|
+
const TableSourceCollector_1 = require("./TableSourceCollector");
|
10
|
+
const ColumnReferenceCollector_1 = require("./ColumnReferenceCollector");
|
11
|
+
const KeywordParser_1 = require("../parsers/KeywordParser");
|
12
|
+
const CommandTokenReader_1 = require("../tokenReaders/CommandTokenReader");
|
13
|
+
/**
|
14
|
+
* Error messages for alias renaming operations
|
15
|
+
*/
|
16
|
+
const ERROR_MESSAGES = {
|
17
|
+
invalidSql: 'Invalid SQL: unable to parse query',
|
18
|
+
invalidPosition: 'Invalid position: line or column out of bounds',
|
19
|
+
noLexemeAtPosition: 'No lexeme found at the specified position',
|
20
|
+
notAnAlias: 'Selected lexeme is not a valid alias',
|
21
|
+
invalidNewName: 'New alias name must be a non-empty string',
|
22
|
+
sameNames: 'Old and new alias names cannot be the same',
|
23
|
+
nameConflict: (name) => `Alias '${name}' already exists in this scope`,
|
24
|
+
aliasNotFound: (name) => `Alias '${name}' not found in current scope`,
|
25
|
+
};
|
26
|
+
/**
|
27
|
+
* A utility class for renaming table and column aliases in SQL queries.
|
28
|
+
*
|
29
|
+
* This class provides functionality to rename aliases within specific scopes
|
30
|
+
* (CTE, subquery, or main query) based on cursor position from GUI editors.
|
31
|
+
* It automatically detects the appropriate scope and updates all references
|
32
|
+
* to the alias within that scope boundary.
|
33
|
+
*
|
34
|
+
* @example
|
35
|
+
* ```typescript
|
36
|
+
* import { AliasRenamer } from 'rawsql-ts';
|
37
|
+
*
|
38
|
+
* const sql = `
|
39
|
+
* SELECT u.name, o.date
|
40
|
+
* FROM users u
|
41
|
+
* JOIN orders o ON u.id = o.user_id
|
42
|
+
* `;
|
43
|
+
*
|
44
|
+
* const renamer = new AliasRenamer();
|
45
|
+
*
|
46
|
+
* // Rename 'u' to 'user_alias' by selecting it at line 2, column 10
|
47
|
+
* const result = renamer.renameAlias(sql, { line: 2, column: 10 }, 'user_alias');
|
48
|
+
*
|
49
|
+
* if (result.success) {
|
50
|
+
* console.log(result.newSql);
|
51
|
+
* // SELECT user_alias.name, o.date
|
52
|
+
* // FROM users user_alias
|
53
|
+
* // JOIN orders o ON user_alias.id = o.user_id
|
54
|
+
* }
|
55
|
+
* ```
|
56
|
+
*
|
57
|
+
* @since 0.12.0
|
58
|
+
*/
|
59
|
+
class AliasRenamer {
|
60
|
+
/**
|
61
|
+
* Creates a new instance of AliasRenamer.
|
62
|
+
*/
|
63
|
+
constructor() {
|
64
|
+
// Initialize keyword parser for reserved word detection using shared trie
|
65
|
+
this.keywordParser = new KeywordParser_1.KeywordParser(CommandTokenReader_1.commandKeywordTrie);
|
66
|
+
}
|
67
|
+
/**
|
68
|
+
* Renames an alias based on the cursor position in GUI editor.
|
69
|
+
*
|
70
|
+
* This method detects the alias at the specified line and column position,
|
71
|
+
* determines its scope (CTE, subquery, or main query), and renames all
|
72
|
+
* references to that alias within the scope boundaries.
|
73
|
+
*
|
74
|
+
* @param sql - The SQL string containing the alias to rename
|
75
|
+
* @param position - Line and column position (1-based) from GUI editor
|
76
|
+
* @param newName - The new name for the alias
|
77
|
+
* @param options - Optional configuration for the rename operation
|
78
|
+
* @returns Result containing success status, modified SQL, and change details
|
79
|
+
*
|
80
|
+
* @example
|
81
|
+
* ```typescript
|
82
|
+
* const sql = "SELECT u.name FROM users u WHERE u.active = true";
|
83
|
+
* const result = renamer.renameAlias(sql, { line: 1, column: 8 }, 'user_table');
|
84
|
+
*
|
85
|
+
* if (result.success) {
|
86
|
+
* console.log(result.newSql);
|
87
|
+
* // "SELECT user_table.name FROM users user_table WHERE user_table.active = true"
|
88
|
+
* }
|
89
|
+
* ```
|
90
|
+
*
|
91
|
+
* @throws {Error} When the SQL cannot be parsed or position is invalid
|
92
|
+
*/
|
93
|
+
renameAlias(sql, position, newName, options = {}) {
|
94
|
+
try {
|
95
|
+
// Input validation
|
96
|
+
this.validateInputs(sql, position, newName);
|
97
|
+
// Find lexeme at the specified position
|
98
|
+
const lexeme = LexemeCursor_1.LexemeCursor.findLexemeAtLineColumn(sql, position);
|
99
|
+
if (!lexeme) {
|
100
|
+
throw new Error(ERROR_MESSAGES.noLexemeAtPosition);
|
101
|
+
}
|
102
|
+
// Validate that the lexeme is a valid alias
|
103
|
+
this.validateLexemeIsAlias(lexeme);
|
104
|
+
// Parse SQL to get AST
|
105
|
+
const query = SelectQueryParser_1.SelectQueryParser.parse(sql);
|
106
|
+
// Detect the scope containing this alias
|
107
|
+
const scope = this.detectAliasScope(sql, query, lexeme, options.scopeType);
|
108
|
+
// Find all references to this alias within the scope
|
109
|
+
const references = this.collectAliasReferences(scope, lexeme.value);
|
110
|
+
// Check for naming conflicts
|
111
|
+
const conflicts = this.checkNameConflicts(scope, newName, lexeme.value);
|
112
|
+
if (conflicts.length > 0) {
|
113
|
+
return {
|
114
|
+
success: false,
|
115
|
+
originalSql: sql,
|
116
|
+
changes: [],
|
117
|
+
conflicts,
|
118
|
+
scope
|
119
|
+
};
|
120
|
+
}
|
121
|
+
// Prepare changes
|
122
|
+
const changes = this.prepareChanges(references, newName);
|
123
|
+
// If dry run, return without making changes
|
124
|
+
if (options.dryRun) {
|
125
|
+
return {
|
126
|
+
success: true,
|
127
|
+
originalSql: sql,
|
128
|
+
changes,
|
129
|
+
conflicts,
|
130
|
+
scope
|
131
|
+
};
|
132
|
+
}
|
133
|
+
// Perform the actual renaming using lexeme-based approach for better accuracy
|
134
|
+
const newSql = this.performLexemeBasedRename(sql, lexeme.value, newName, scope);
|
135
|
+
return {
|
136
|
+
success: true,
|
137
|
+
originalSql: sql,
|
138
|
+
newSql,
|
139
|
+
changes,
|
140
|
+
scope
|
141
|
+
};
|
142
|
+
}
|
143
|
+
catch (error) {
|
144
|
+
return {
|
145
|
+
success: false,
|
146
|
+
originalSql: sql,
|
147
|
+
changes: [],
|
148
|
+
conflicts: [error instanceof Error ? error.message : String(error)]
|
149
|
+
};
|
150
|
+
}
|
151
|
+
}
|
152
|
+
/**
|
153
|
+
* Validates input parameters for alias renaming.
|
154
|
+
*/
|
155
|
+
validateInputs(sql, position, newName) {
|
156
|
+
if (!sql || typeof sql !== 'string' || sql.trim() === '') {
|
157
|
+
throw new Error(ERROR_MESSAGES.invalidSql);
|
158
|
+
}
|
159
|
+
if (!position || typeof position.line !== 'number' || typeof position.column !== 'number' ||
|
160
|
+
position.line < 1 || position.column < 1) {
|
161
|
+
throw new Error(ERROR_MESSAGES.invalidPosition);
|
162
|
+
}
|
163
|
+
if (!newName || typeof newName !== 'string' || newName.trim() === '') {
|
164
|
+
throw new Error(ERROR_MESSAGES.invalidNewName);
|
165
|
+
}
|
166
|
+
}
|
167
|
+
/**
|
168
|
+
* Validates that the lexeme represents a valid alias.
|
169
|
+
*/
|
170
|
+
validateLexemeIsAlias(lexeme) {
|
171
|
+
// Check if lexeme is an identifier (potential alias)
|
172
|
+
if (!(lexeme.type & Lexeme_1.TokenType.Identifier)) {
|
173
|
+
throw new Error(ERROR_MESSAGES.notAnAlias);
|
174
|
+
}
|
175
|
+
}
|
176
|
+
/**
|
177
|
+
* Detects the scope (CTE, subquery, main query) containing the alias.
|
178
|
+
*/
|
179
|
+
detectAliasScope(sql, query, lexeme, scopeType) {
|
180
|
+
if (!lexeme.position) {
|
181
|
+
// Fallback to main query if no position info
|
182
|
+
return {
|
183
|
+
type: 'main',
|
184
|
+
query,
|
185
|
+
startPosition: 0,
|
186
|
+
endPosition: sql.length
|
187
|
+
};
|
188
|
+
}
|
189
|
+
const lexemePosition = lexeme.position.startPosition;
|
190
|
+
// Force specific scope type if requested
|
191
|
+
if (scopeType && scopeType !== 'auto') {
|
192
|
+
return this.createScopeForType(scopeType, sql, query, lexemePosition);
|
193
|
+
}
|
194
|
+
// Auto-detect scope based on position
|
195
|
+
return this.autoDetectScope(sql, query, lexemePosition);
|
196
|
+
}
|
197
|
+
/**
|
198
|
+
* Creates scope for a specific requested type.
|
199
|
+
*/
|
200
|
+
createScopeForType(scopeType, sql, query, position) {
|
201
|
+
switch (scopeType) {
|
202
|
+
case 'cte':
|
203
|
+
return this.detectCTEScope(sql, query, position);
|
204
|
+
case 'subquery':
|
205
|
+
return this.detectSubqueryScope(sql, query, position);
|
206
|
+
case 'main':
|
207
|
+
default:
|
208
|
+
return {
|
209
|
+
type: 'main',
|
210
|
+
query,
|
211
|
+
startPosition: 0,
|
212
|
+
endPosition: sql.length
|
213
|
+
};
|
214
|
+
}
|
215
|
+
}
|
216
|
+
/**
|
217
|
+
* Auto-detects the most appropriate scope based on cursor position.
|
218
|
+
*/
|
219
|
+
autoDetectScope(sql, query, position) {
|
220
|
+
// First check if we're in a CTE
|
221
|
+
const cteScope = this.detectCTEScope(sql, query, position);
|
222
|
+
if (cteScope.type === 'cte') {
|
223
|
+
return cteScope;
|
224
|
+
}
|
225
|
+
// Then check for subqueries (implementation needed)
|
226
|
+
const subqueryScope = this.detectSubqueryScope(sql, query, position);
|
227
|
+
if (subqueryScope.type === 'subquery') {
|
228
|
+
return subqueryScope;
|
229
|
+
}
|
230
|
+
// Default to main query
|
231
|
+
return {
|
232
|
+
type: 'main',
|
233
|
+
query,
|
234
|
+
startPosition: 0,
|
235
|
+
endPosition: sql.length
|
236
|
+
};
|
237
|
+
}
|
238
|
+
/**
|
239
|
+
* Detects if the position is within a CTE and returns appropriate scope.
|
240
|
+
*/
|
241
|
+
detectCTEScope(sql, query, position) {
|
242
|
+
try {
|
243
|
+
// Use CTERegionDetector to analyze cursor position
|
244
|
+
const analysis = CTERegionDetector_1.CTERegionDetector.analyzeCursorPosition(sql, position);
|
245
|
+
if (analysis.isInCTE && analysis.cteRegion) {
|
246
|
+
// Find the corresponding CTE query in the AST
|
247
|
+
const cteQuery = this.findCTEQueryByName(query, analysis.cteRegion.name);
|
248
|
+
return {
|
249
|
+
type: 'cte',
|
250
|
+
name: analysis.cteRegion.name,
|
251
|
+
query: cteQuery || query, // Fallback to main query if CTE not found
|
252
|
+
startPosition: analysis.cteRegion.startPosition,
|
253
|
+
endPosition: analysis.cteRegion.endPosition
|
254
|
+
};
|
255
|
+
}
|
256
|
+
}
|
257
|
+
catch (error) {
|
258
|
+
// If CTE detection fails, fall back to main query
|
259
|
+
console.warn('CTE scope detection failed:', error);
|
260
|
+
}
|
261
|
+
// Not in CTE, return main query scope
|
262
|
+
return {
|
263
|
+
type: 'main',
|
264
|
+
query,
|
265
|
+
startPosition: 0,
|
266
|
+
endPosition: sql.length
|
267
|
+
};
|
268
|
+
}
|
269
|
+
/**
|
270
|
+
* Detects if the position is within a subquery scope.
|
271
|
+
*/
|
272
|
+
detectSubqueryScope(sql, query, position) {
|
273
|
+
// TODO: Implement subquery detection
|
274
|
+
// This would involve traversing the AST to find nested SELECT queries
|
275
|
+
// and determining if the position falls within their boundaries
|
276
|
+
// For now, return main query scope
|
277
|
+
return {
|
278
|
+
type: 'main',
|
279
|
+
query,
|
280
|
+
startPosition: 0,
|
281
|
+
endPosition: sql.length
|
282
|
+
};
|
283
|
+
}
|
284
|
+
/**
|
285
|
+
* Finds a CTE query by name within the parsed AST.
|
286
|
+
*/
|
287
|
+
findCTEQueryByName(query, cteName) {
|
288
|
+
var _a;
|
289
|
+
if (query instanceof SelectQuery_1.SimpleSelectQuery && ((_a = query.withClause) === null || _a === void 0 ? void 0 : _a.tables)) {
|
290
|
+
for (const cte of query.withClause.tables) {
|
291
|
+
if (cte.aliasExpression.table.name === cteName) {
|
292
|
+
return cte.query;
|
293
|
+
}
|
294
|
+
}
|
295
|
+
}
|
296
|
+
else if (query instanceof SelectQuery_1.BinarySelectQuery) {
|
297
|
+
// Check left side first
|
298
|
+
const leftResult = this.findCTEQueryByName(query.left, cteName);
|
299
|
+
if (leftResult)
|
300
|
+
return leftResult;
|
301
|
+
// Then check right side
|
302
|
+
const rightResult = this.findCTEQueryByName(query.right, cteName);
|
303
|
+
if (rightResult)
|
304
|
+
return rightResult;
|
305
|
+
}
|
306
|
+
return null;
|
307
|
+
}
|
308
|
+
/**
|
309
|
+
* Collects all references to the specified alias within the given scope.
|
310
|
+
*/
|
311
|
+
collectAliasReferences(scope, aliasName) {
|
312
|
+
const references = [];
|
313
|
+
try {
|
314
|
+
// Collect table source references (FROM, JOIN clauses)
|
315
|
+
const tableReferences = this.collectTableAliasReferences(scope, aliasName);
|
316
|
+
references.push(...tableReferences);
|
317
|
+
// Collect column references (table_alias.column format)
|
318
|
+
const columnReferences = this.collectColumnAliasReferences(scope, aliasName);
|
319
|
+
references.push(...columnReferences);
|
320
|
+
}
|
321
|
+
catch (error) {
|
322
|
+
console.warn(`Failed to collect alias references for '${aliasName}':`, error);
|
323
|
+
}
|
324
|
+
return references;
|
325
|
+
}
|
326
|
+
/**
|
327
|
+
* Collects table alias references within the scope.
|
328
|
+
*/
|
329
|
+
collectTableAliasReferences(scope, aliasName) {
|
330
|
+
const references = [];
|
331
|
+
try {
|
332
|
+
// Use TableSourceCollector to find all table sources in the scope
|
333
|
+
const collector = new TableSourceCollector_1.TableSourceCollector(true); // selectableOnly=true for proper scope
|
334
|
+
const tableSources = collector.collect(scope.query);
|
335
|
+
for (const tableSource of tableSources) {
|
336
|
+
const sourceName = tableSource.getSourceName();
|
337
|
+
// Check if this table source matches our alias
|
338
|
+
if (sourceName === aliasName) {
|
339
|
+
// This is likely the definition of the alias (FROM users u, JOIN orders o)
|
340
|
+
const lexeme = this.createLexemeFromTableSource(tableSource, aliasName);
|
341
|
+
if (lexeme) {
|
342
|
+
references.push({
|
343
|
+
lexeme,
|
344
|
+
scope,
|
345
|
+
referenceType: 'definition',
|
346
|
+
context: 'table'
|
347
|
+
});
|
348
|
+
}
|
349
|
+
}
|
350
|
+
}
|
351
|
+
}
|
352
|
+
catch (error) {
|
353
|
+
console.warn(`Failed to collect table alias references for '${aliasName}':`, error);
|
354
|
+
}
|
355
|
+
return references;
|
356
|
+
}
|
357
|
+
/**
|
358
|
+
* Collects column alias references (table_alias.column format) within the scope.
|
359
|
+
*/
|
360
|
+
collectColumnAliasReferences(scope, aliasName) {
|
361
|
+
const references = [];
|
362
|
+
try {
|
363
|
+
// Use ColumnReferenceCollector to find all column references
|
364
|
+
const collector = new ColumnReferenceCollector_1.ColumnReferenceCollector();
|
365
|
+
const columnRefs = collector.collect(scope.query);
|
366
|
+
for (const columnRef of columnRefs) {
|
367
|
+
// Check if any namespace in this column reference matches our alias
|
368
|
+
if (columnRef.namespaces && columnRef.namespaces.length > 0) {
|
369
|
+
for (const namespace of columnRef.namespaces) {
|
370
|
+
if (namespace.name === aliasName) {
|
371
|
+
// This is a usage of the alias (u.name, u.id, etc.)
|
372
|
+
const lexeme = this.createLexemeFromNamespace(namespace, aliasName);
|
373
|
+
if (lexeme) {
|
374
|
+
references.push({
|
375
|
+
lexeme,
|
376
|
+
scope,
|
377
|
+
referenceType: 'usage',
|
378
|
+
context: 'column'
|
379
|
+
});
|
380
|
+
}
|
381
|
+
}
|
382
|
+
}
|
383
|
+
}
|
384
|
+
}
|
385
|
+
}
|
386
|
+
catch (error) {
|
387
|
+
console.warn(`Failed to collect column alias references for '${aliasName}':`, error);
|
388
|
+
}
|
389
|
+
return references;
|
390
|
+
}
|
391
|
+
/**
|
392
|
+
* Creates a lexeme representation from a table source for reference tracking.
|
393
|
+
*/
|
394
|
+
createLexemeFromTableSource(tableSource, aliasName) {
|
395
|
+
try {
|
396
|
+
// Try to extract position information from the table source
|
397
|
+
// This is a best-effort approach since TableSource might not have direct lexeme info
|
398
|
+
return {
|
399
|
+
type: Lexeme_1.TokenType.Identifier,
|
400
|
+
value: aliasName,
|
401
|
+
comments: null,
|
402
|
+
position: {
|
403
|
+
startPosition: 0, // TODO: Extract actual position if available
|
404
|
+
endPosition: aliasName.length
|
405
|
+
}
|
406
|
+
};
|
407
|
+
}
|
408
|
+
catch (error) {
|
409
|
+
console.warn('Failed to create lexeme from table source:', error);
|
410
|
+
return null;
|
411
|
+
}
|
412
|
+
}
|
413
|
+
/**
|
414
|
+
* Creates a lexeme representation from a namespace for reference tracking.
|
415
|
+
*/
|
416
|
+
createLexemeFromNamespace(namespace, aliasName) {
|
417
|
+
try {
|
418
|
+
// Try to extract position information from the namespace
|
419
|
+
return {
|
420
|
+
type: Lexeme_1.TokenType.Identifier,
|
421
|
+
value: aliasName,
|
422
|
+
comments: null,
|
423
|
+
position: {
|
424
|
+
startPosition: 0, // TODO: Extract actual position if available
|
425
|
+
endPosition: aliasName.length
|
426
|
+
}
|
427
|
+
};
|
428
|
+
}
|
429
|
+
catch (error) {
|
430
|
+
console.warn('Failed to create lexeme from namespace:', error);
|
431
|
+
return null;
|
432
|
+
}
|
433
|
+
}
|
434
|
+
/**
|
435
|
+
* Checks for naming conflicts when renaming to the new name.
|
436
|
+
*/
|
437
|
+
checkNameConflicts(scope, newName, currentName) {
|
438
|
+
const conflicts = [];
|
439
|
+
if (newName.toLowerCase() === currentName.toLowerCase()) {
|
440
|
+
conflicts.push(ERROR_MESSAGES.sameNames);
|
441
|
+
return conflicts;
|
442
|
+
}
|
443
|
+
try {
|
444
|
+
// Check for conflicts with existing table aliases
|
445
|
+
const tableConflicts = this.checkTableAliasConflicts(scope, newName);
|
446
|
+
conflicts.push(...tableConflicts);
|
447
|
+
// Check for conflicts with SQL keywords (basic check)
|
448
|
+
const keywordConflicts = this.checkKeywordConflicts(newName);
|
449
|
+
conflicts.push(...keywordConflicts);
|
450
|
+
}
|
451
|
+
catch (error) {
|
452
|
+
console.warn(`Error during conflict detection for '${newName}':`, error);
|
453
|
+
conflicts.push(`Unable to verify conflicts for name '${newName}'`);
|
454
|
+
}
|
455
|
+
return conflicts;
|
456
|
+
}
|
457
|
+
/**
|
458
|
+
* Checks for conflicts with existing table aliases and table names in the scope.
|
459
|
+
*/
|
460
|
+
checkTableAliasConflicts(scope, newName) {
|
461
|
+
const conflicts = [];
|
462
|
+
try {
|
463
|
+
// Use TableSourceCollector to get all existing table sources in scope
|
464
|
+
const collector = new TableSourceCollector_1.TableSourceCollector(true);
|
465
|
+
const tableSources = collector.collect(scope.query);
|
466
|
+
for (const tableSource of tableSources) {
|
467
|
+
// Check alias conflicts
|
468
|
+
const aliasName = tableSource.getSourceName();
|
469
|
+
if (aliasName && aliasName.toLowerCase() === newName.toLowerCase()) {
|
470
|
+
conflicts.push(ERROR_MESSAGES.nameConflict(newName));
|
471
|
+
continue; // Avoid duplicate messages
|
472
|
+
}
|
473
|
+
// Check table name conflicts
|
474
|
+
const tableName = this.extractTableName(tableSource);
|
475
|
+
if (tableName && tableName.toLowerCase() === newName.toLowerCase()) {
|
476
|
+
conflicts.push(`'${newName}' conflicts with table name in this scope`);
|
477
|
+
}
|
478
|
+
}
|
479
|
+
}
|
480
|
+
catch (error) {
|
481
|
+
console.warn(`Failed to check table alias conflicts for '${newName}':`, error);
|
482
|
+
}
|
483
|
+
return conflicts;
|
484
|
+
}
|
485
|
+
/**
|
486
|
+
* Extracts the actual table name from a table source (not the alias).
|
487
|
+
*/
|
488
|
+
extractTableName(tableSource) {
|
489
|
+
try {
|
490
|
+
// Try to access the qualified name to get the actual table name
|
491
|
+
if (tableSource.qualifiedName && tableSource.qualifiedName.name) {
|
492
|
+
const name = tableSource.qualifiedName.name;
|
493
|
+
// Handle different name types
|
494
|
+
if (typeof name === 'string') {
|
495
|
+
return name;
|
496
|
+
}
|
497
|
+
else if (name.name && typeof name.name === 'string') {
|
498
|
+
// IdentifierString case
|
499
|
+
return name.name;
|
500
|
+
}
|
501
|
+
else if (name.value && typeof name.value === 'string') {
|
502
|
+
// RawString case
|
503
|
+
return name.value;
|
504
|
+
}
|
505
|
+
}
|
506
|
+
// Fallback: try to get table name from other properties
|
507
|
+
if (tableSource.table && typeof tableSource.table === 'string') {
|
508
|
+
return tableSource.table;
|
509
|
+
}
|
510
|
+
return null;
|
511
|
+
}
|
512
|
+
catch (error) {
|
513
|
+
console.warn('Failed to extract table name from table source:', error);
|
514
|
+
return null;
|
515
|
+
}
|
516
|
+
}
|
517
|
+
/**
|
518
|
+
* Checks if the new name conflicts with SQL keywords using the existing KeywordTrie.
|
519
|
+
*/
|
520
|
+
checkKeywordConflicts(newName) {
|
521
|
+
const conflicts = [];
|
522
|
+
// Use basic check as primary method for now to ensure test reliability
|
523
|
+
if (this.isBasicReservedKeyword(newName)) {
|
524
|
+
conflicts.push(`'${newName}' is a reserved SQL keyword and should not be used as an alias`);
|
525
|
+
return conflicts;
|
526
|
+
}
|
527
|
+
try {
|
528
|
+
// Use the KeywordParser to check if the new name is a reserved keyword
|
529
|
+
const keywordResult = this.keywordParser.parse(newName, 0);
|
530
|
+
if (keywordResult !== null && keywordResult.keyword.toLowerCase() === newName.toLowerCase()) {
|
531
|
+
conflicts.push(`'${newName}' is a reserved SQL keyword and should not be used as an alias`);
|
532
|
+
}
|
533
|
+
}
|
534
|
+
catch (error) {
|
535
|
+
console.warn(`Failed to check keyword conflicts for '${newName}':`, error);
|
536
|
+
}
|
537
|
+
return conflicts;
|
538
|
+
}
|
539
|
+
/**
|
540
|
+
* Fallback method for basic reserved keyword checking.
|
541
|
+
*/
|
542
|
+
isBasicReservedKeyword(name) {
|
543
|
+
const basicKeywords = ['select', 'from', 'where', 'join', 'table', 'null', 'and', 'or'];
|
544
|
+
return basicKeywords.includes(name.toLowerCase());
|
545
|
+
}
|
546
|
+
/**
|
547
|
+
* Prepares change details for the rename operation.
|
548
|
+
*/
|
549
|
+
prepareChanges(references, newName) {
|
550
|
+
return references.map(ref => {
|
551
|
+
var _a;
|
552
|
+
return ({
|
553
|
+
oldName: ref.lexeme.value,
|
554
|
+
newName,
|
555
|
+
position: LexemeCursor_1.LexemeCursor.charOffsetToLineColumn('', // TODO: Get original SQL
|
556
|
+
((_a = ref.lexeme.position) === null || _a === void 0 ? void 0 : _a.startPosition) || 0) || { line: 1, column: 1 },
|
557
|
+
context: ref.context,
|
558
|
+
referenceType: ref.referenceType
|
559
|
+
});
|
560
|
+
});
|
561
|
+
}
|
562
|
+
/**
|
563
|
+
* Enhanced SQL text replacement using lexeme-based approach.
|
564
|
+
* This method re-tokenizes the SQL to get accurate position information.
|
565
|
+
*/
|
566
|
+
performLexemeBasedRename(sql, aliasName, newName, scope) {
|
567
|
+
try {
|
568
|
+
// Get all lexemes with position information
|
569
|
+
const lexemes = LexemeCursor_1.LexemeCursor.getAllLexemesWithPosition(sql);
|
570
|
+
// Filter lexemes within the scope and matching the alias name
|
571
|
+
const targetLexemes = lexemes.filter(lexeme => lexeme.value === aliasName &&
|
572
|
+
lexeme.position &&
|
573
|
+
lexeme.position.startPosition >= scope.startPosition &&
|
574
|
+
lexeme.position.endPosition <= scope.endPosition &&
|
575
|
+
(lexeme.type & Lexeme_1.TokenType.Identifier) // Only rename identifiers
|
576
|
+
);
|
577
|
+
if (targetLexemes.length === 0) {
|
578
|
+
return sql; // No matches found
|
579
|
+
}
|
580
|
+
// Sort by position (descending) for safe replacement
|
581
|
+
targetLexemes.sort((a, b) => b.position.startPosition - a.position.startPosition);
|
582
|
+
let modifiedSql = sql;
|
583
|
+
// Replace each occurrence
|
584
|
+
for (const lexeme of targetLexemes) {
|
585
|
+
const pos = lexeme.position;
|
586
|
+
modifiedSql = modifiedSql.substring(0, pos.startPosition) +
|
587
|
+
newName +
|
588
|
+
modifiedSql.substring(pos.endPosition);
|
589
|
+
}
|
590
|
+
return modifiedSql;
|
591
|
+
}
|
592
|
+
catch (error) {
|
593
|
+
console.error('Failed to perform lexeme-based rename:', error);
|
594
|
+
throw new Error(`Unable to rename alias using lexeme approach: ${error instanceof Error ? error.message : String(error)}`);
|
595
|
+
}
|
596
|
+
}
|
597
|
+
}
|
598
|
+
exports.AliasRenamer = AliasRenamer;
|
599
|
+
//# sourceMappingURL=AliasRenamer.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"AliasRenamer.js","sourceRoot":"","sources":["../../../src/transformers/AliasRenamer.ts"],"names":[],"mappings":"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"}
|
@@ -65,7 +65,7 @@ class CTEBuilder {
|
|
65
65
|
}
|
66
66
|
// Resolve name duplications
|
67
67
|
const resolvedTables = [];
|
68
|
-
for (const [name, tables] of ctesByName.entries()) {
|
68
|
+
for (const [name, tables] of Array.from(ctesByName.entries())) {
|
69
69
|
if (tables.length === 1) {
|
70
70
|
// No duplication
|
71
71
|
resolvedTables.push(tables[0]);
|
@@ -159,7 +159,7 @@ class CTEBuilder {
|
|
159
159
|
visiting.add(tableName);
|
160
160
|
// Process dependencies first (inner CTEs)
|
161
161
|
const deps = dependencies.get(tableName) || new Set();
|
162
|
-
for (const dep of deps) {
|
162
|
+
for (const dep of Array.from(deps)) {
|
163
163
|
visit(dep);
|
164
164
|
}
|
165
165
|
visiting.delete(tableName);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"CTEBuilder.js","sourceRoot":"","sources":["../../../src/transformers/CTEBuilder.ts"],"names":[],"mappings":";;;AAAA,6CAA2D;AAC3D,iDAA8C;AAC9C,iEAA8D;AAC9D,2CAAwC;AAExC;;;GAGG;AACH,MAAa,UAAU;IAKnB;QACI,IAAI,CAAC,eAAe,GAAG,IAAI,2CAAoB,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,YAAY,GAAG,IAAI,2BAAY,EAAE,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;IACrC,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,KAAK,CAAC,YAA2B;QACpC,8BAA8B;QAC9B,QAAQ;QACR,kFAAkF;QAClF,mGAAmG;QACnG,kEAAkE;QAClE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,mBAAU,CACjB,KAAK,EACL,YAAY,CACf,CAAC;QACN,CAAC;QAED,iCAAiC;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;QAEhE,6DAA6D;QAC7D,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;QAE5F,kEAAkE;QAClE,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;QAElG,OAAO,IAAI,mBAAU,CACjB,aAAa,CAAC,IAAI,GAAG,CAAC,EACtB,YAAY,CACf,CAAC;IACN,CAAC;IAED;;;;;;;OAOG;IACK,qBAAqB,CAAC,YAA2B;QACrD,4BAA4B;QAC5B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAC;QACpD,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;YACnD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAClC,CAAC;YACD,UAAU,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,4BAA4B;QAC5B,MAAM,cAAc,GAAkB,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;
|
1
|
+
{"version":3,"file":"CTEBuilder.js","sourceRoot":"","sources":["../../../src/transformers/CTEBuilder.ts"],"names":[],"mappings":"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"}
|