summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/complete/analysis/global/global.cpp
diff options
context:
space:
mode:
authorvitya-smirnov <[email protected]>2025-06-25 18:07:35 +0300
committervitya-smirnov <[email protected]>2025-06-25 18:20:11 +0300
commit84acd92b6733ab01d0c4c2c2d1363bb8bc66ccd3 (patch)
treeae766140f07526027c9a195542c14f778f9220e2 /yql/essentials/sql/v1/complete/analysis/global/global.cpp
parentd938279fd3d2184ca254c4abefc6bad994083876 (diff)
YQL-19747: Support qualified asterisk
Support `SELECT x.* FROM t AS x`. commit_hash:64693f65281f385d6c0d3541fb2874b0153aa88c
Diffstat (limited to 'yql/essentials/sql/v1/complete/analysis/global/global.cpp')
-rw-r--r--yql/essentials/sql/v1/complete/analysis/global/global.cpp37
1 files changed, 30 insertions, 7 deletions
diff --git a/yql/essentials/sql/v1/complete/analysis/global/global.cpp b/yql/essentials/sql/v1/complete/analysis/global/global.cpp
index 555d5283c14..f11447c1f12 100644
--- a/yql/essentials/sql/v1/complete/analysis/global/global.cpp
+++ b/yql/essentials/sql/v1/complete/analysis/global/global.cpp
@@ -19,21 +19,38 @@ namespace NSQLComplete {
return std::tie(lhs.TableAlias, lhs.Name) < std::tie(rhs.TableAlias, rhs.Name);
}
- TVector<TAliased<TTableId>> TColumnContext::TablesWithAlias(TStringBuf alias) const {
- if (alias.empty()) {
- return TVector<TAliased<TTableId>>(Tables.begin(), Tables.end());
+ TColumnContext TColumnContext::ExtractAliased(TMaybe<TStringBuf> alias) {
+ if (alias.Empty()) {
+ return *this;
}
- auto filtered = NFuncTools::Filter([&](const auto& x) { return x.Alias == alias; }, Tables);
- return TVector<TAliased<TTableId>>(filtered.begin(), filtered.end());
+ auto aliasedTables = std::ranges::partition(Tables, [&](const auto& table) {
+ return table.Alias != alias;
+ });
+
+ auto aliasedColumns = std::ranges::partition(Columns, [&](const auto& column) {
+ return column.TableAlias != alias;
+ });
+
+ TVector<TAliased<TTableId>> tables(aliasedTables.begin(), aliasedTables.end());
+ TVector<TColumnId> columns(aliasedColumns.begin(), aliasedColumns.end());
+
+ Tables.erase(aliasedTables.begin(), aliasedTables.end());
+ Columns.erase(aliasedColumns.begin(), aliasedColumns.end());
+
+ return {
+ .Tables = std::move(tables),
+ .Columns = std::move(columns),
+ };
}
bool TColumnContext::IsAsterisk() const {
- return Columns.size() == 1 && Columns[0].Name == "*";
+ return Columns.size() == 1 &&
+ Columns[0].TableAlias.empty() &&
+ Columns[0].Name == "*";
}
TColumnContext TColumnContext::Renamed(TStringBuf alias) && {
- Y_ENSURE(!alias.empty());
for (TAliased<TTableId>& table : Tables) {
table.Alias = alias;
}
@@ -152,6 +169,12 @@ namespace NSQLComplete {
}
}
+ void DebugPrint(TStringBuf query, antlr4::ParserRuleContext* ctx) {
+ Cerr << "= = = = = = " << Endl;
+ Cerr << query << Endl;
+ Cerr << ctx->toStringTree(&Parser_, true) << Endl;
+ }
+
antlr4::ANTLRInputStream Chars_;
G::TLexer Lexer_;
antlr4::CommonTokenStream Tokens_;