Skip to content

Commit e8810cb

Browse files
committed
Expose tokens for TableReference
1 parent 6f88036 commit e8810cb

4 files changed

Lines changed: 19 additions & 19 deletions

File tree

sqlparser/CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
taking an `ParserEntrypoint` enum.
55
- In drift files, allow reading imports and statement metadata from comments.
66
- Make `Queryable` and `TableOrSubquery` sealed classes, remove `Queryable.when`.
7-
- Expose tokens making up a `Reference`.
7+
- Expose tokens making up `Reference`s and `TableReference`s.
88

99
## 0.43.1
1010

sqlparser/lib/src/ast/common/queryables.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class TableReference extends TableOrSubquery
2323
with ReferenceOwner
2424
implements Renamable, ResolvesToResultSet, InExpressionTarget {
2525
final String? schemaName;
26+
Token? schemaNameToken;
2627
final String tableName;
2728
Token? tableNameToken;
2829

sqlparser/lib/src/reader/parser.dart

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1963,10 +1963,7 @@ extension Parser on ParserState {
19631963
}
19641964

19651965
_consume(TokenType.on, 'Expected ON');
1966-
_suggestHint(const TableNameDescription());
1967-
final nameToken = _consumeIdentifier('Expected a table name');
1968-
final tableRef = TableReference(nameToken.identifier)
1969-
..setSpan(nameToken, nameToken);
1966+
final tableRef = _tableReference(allowAlias: false);
19701967

19711968
if (_matchOne(TokenType.$for)) {
19721969
const msg = 'Expected FOR EACH ROW';
@@ -2062,11 +2059,7 @@ extension Parser on ParserState {
20622059
final name = _consumeIdentifier('Expected a name for this index');
20632060

20642061
_consume(TokenType.on, 'Expected ON table');
2065-
_suggestHint(const TableNameDescription());
2066-
final nameToken = _consumeIdentifier('Expected a table name');
2067-
final tableRef = TableReference(nameToken.identifier)
2068-
..setSpan(nameToken, nameToken);
2069-
2062+
final tableRef = _tableReference(allowAlias: false);
20702063
_consume(TokenType.leftParen, 'Expected indexed columns in parentheses');
20712064

20722065
final indexes = _indexedColumns();
@@ -2589,26 +2582,27 @@ extension Parser on ParserState {
25892582
TableReference _tableReference({bool allowAlias = true}) {
25902583
_suggestHint(const TableNameDescription());
25912584

2592-
final first = _consumeIdentifier('Expected table or schema name here');
2593-
IdentifierToken? second;
2585+
var tableName = _consumeIdentifier('Expected table or schema name here');
2586+
2587+
IdentifierToken? schemaName;
25942588
IdentifierToken? as;
25952589
if (_matchOne(TokenType.dot)) {
2596-
second = _consumeIdentifier('Expected a table name here');
2590+
schemaName = tableName;
2591+
tableName = _consumeIdentifier('Expected a table name here');
25972592
}
25982593

25992594
if (allowAlias) {
26002595
as = _as();
26012596
}
26022597

2603-
final tableNameToken = second ?? first;
2604-
26052598
return TableReference(
2606-
tableNameToken.identifier,
2599+
tableName.identifier,
26072600
as: as?.identifier,
2608-
schemaName: second == null ? null : first.identifier,
2601+
schemaName: schemaName?.identifier,
26092602
)
2610-
..setSpan(first, _previous)
2611-
..tableNameToken = tableNameToken;
2603+
..setSpan(schemaName ?? tableName, _previous)
2604+
..schemaNameToken = schemaName
2605+
..tableNameToken = tableName;
26122606
}
26132607

26142608
ForeignKeyClause _foreignKeyClause() {

sqlparser/test/parser/utils.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ void enforceHasSpan(AstNode node) {
9797
checkHasToken(node.entityName, node.entityNameToken, 'entityName');
9898
checkHasToken(node.columnName, node.columnNameToken, 'columnName');
9999
}
100+
101+
if (node is TableReference) {
102+
checkHasToken(node.schemaName, node.schemaNameToken, 'schemaName');
103+
checkHasToken(node.tableName, node.tableNameToken, 'tableName');
104+
}
100105
}
101106

102107
final problematic = [node]

0 commit comments

Comments
 (0)