|
6 | 6 | import 'package:charcode/charcode.dart'; |
7 | 7 | import 'package:sqlparser/sqlparser.dart'; |
8 | 8 |
|
9 | | -class NodeSqlBuilder extends AstVisitor<void, void> { |
| 9 | +base class NodeSqlBuilder extends AstVisitor<void, void> { |
10 | 10 | final StringSink buffer; |
11 | 11 |
|
12 | 12 | /// Whether we need to insert a space before writing the next identifier. |
@@ -822,7 +822,8 @@ class NodeSqlBuilder extends AstVisitor<void, void> { |
822 | 822 | @override |
823 | 823 | void visitFunction(FunctionExpression e, void arg) { |
824 | 824 | if (e.schemaName != null) { |
825 | | - identifier(e.schemaName!, spaceAfter: false); |
| 825 | + identifier(e.schemaName!, |
| 826 | + fromToken: e.schemaNameToken, spaceAfter: false); |
826 | 827 | symbol('.'); |
827 | 828 | } |
828 | 829 | identifier(e.name); |
@@ -1080,25 +1081,30 @@ class NodeSqlBuilder extends AstVisitor<void, void> { |
1080 | 1081 | var didWriteSpaceBefore = false; |
1081 | 1082 |
|
1082 | 1083 | if (e.schemaName != null) { |
1083 | | - identifier(e.schemaName!, spaceAfter: false); |
| 1084 | + identifier(e.schemaName!, |
| 1085 | + fromToken: e.schemaNameToken, spaceAfter: false); |
1084 | 1086 | symbol('.'); |
1085 | 1087 | didWriteSpaceBefore = true; |
1086 | 1088 | } |
1087 | 1089 | if (e.entityName != null) { |
1088 | 1090 | identifier(e.entityName!, |
1089 | | - spaceAfter: false, spaceBefore: !didWriteSpaceBefore); |
| 1091 | + spaceAfter: false, |
| 1092 | + fromToken: e.entityNameToken, |
| 1093 | + spaceBefore: !didWriteSpaceBefore); |
1090 | 1094 | symbol('.'); |
1091 | 1095 | didWriteSpaceBefore = true; |
1092 | 1096 | } |
1093 | 1097 |
|
1094 | 1098 | identifier(e.columnName, |
1095 | | - spaceAfter: true, spaceBefore: !didWriteSpaceBefore); |
| 1099 | + fromToken: e.columnNameToken, |
| 1100 | + spaceAfter: true, |
| 1101 | + spaceBefore: !didWriteSpaceBefore); |
1096 | 1102 | } |
1097 | 1103 |
|
1098 | 1104 | @override |
1099 | 1105 | visitAliasClause(AliasClause e, void arg) { |
1100 | 1106 | keyword(TokenType.as); |
1101 | | - identifier(e.name); |
| 1107 | + identifier(e.name, fromToken: e.nameToken); |
1102 | 1108 | } |
1103 | 1109 |
|
1104 | 1110 | @override |
@@ -1251,10 +1257,12 @@ class NodeSqlBuilder extends AstVisitor<void, void> { |
1251 | 1257 | @override |
1252 | 1258 | void visitTableReference(TableReference e, void arg) { |
1253 | 1259 | if (e.schemaName != null) { |
1254 | | - identifier(e.schemaName!, spaceAfter: false); |
| 1260 | + identifier(e.schemaName!, |
| 1261 | + fromToken: e.schemaNameToken, spaceAfter: false); |
1255 | 1262 | symbol('.'); |
1256 | 1263 | } |
1257 | | - identifier(e.tableName, spaceBefore: e.schemaName == null); |
| 1264 | + identifier(e.tableName, |
| 1265 | + fromToken: e.tableNameToken, spaceBefore: e.schemaName == null); |
1258 | 1266 | visitNullable(e.as, arg); |
1259 | 1267 | } |
1260 | 1268 |
|
@@ -1482,8 +1490,12 @@ class NodeSqlBuilder extends AstVisitor<void, void> { |
1482 | 1490 | } |
1483 | 1491 |
|
1484 | 1492 | /// Writes an identifier, escaping it if necessary. |
1485 | | - void identifier(String identifier, |
1486 | | - {bool spaceBefore = true, bool spaceAfter = true}) { |
| 1493 | + void identifier( |
| 1494 | + String identifier, { |
| 1495 | + IdentifierToken? fromToken, |
| 1496 | + bool spaceBefore = true, |
| 1497 | + bool spaceAfter = true, |
| 1498 | + }) { |
1487 | 1499 | if (isKeyword(identifier) || _notAKeywordRegex.hasMatch(identifier)) { |
1488 | 1500 | identifier = escapeIdentifier(identifier); |
1489 | 1501 | } |
|
0 commit comments