diff options
author | vitya-smirnov <[email protected]> | 2025-06-24 15:50:39 +0300 |
---|---|---|
committer | vitya-smirnov <[email protected]> | 2025-06-24 16:06:46 +0300 |
commit | 573dadf304e5729bdad2dc02fd7c4ad2cb7a0524 (patch) | |
tree | ed72d28bb7b17af07d1364abd08360829533792d /yql/essentials/sql/v1/complete/sql_complete.cpp | |
parent | 7ad54f585b44a26b4c619ab33dcfe06fd0add315 (diff) |
YQL-19747: Synthesise subquery columns
commit_hash:40a2de243a67135e44505619fb766954ba24e2e8
Diffstat (limited to 'yql/essentials/sql/v1/complete/sql_complete.cpp')
-rw-r--r-- | yql/essentials/sql/v1/complete/sql_complete.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/yql/essentials/sql/v1/complete/sql_complete.cpp b/yql/essentials/sql/v1/complete/sql_complete.cpp index 8b732bd3913..2cb88c714a7 100644 --- a/yql/essentials/sql/v1/complete/sql_complete.cpp +++ b/yql/essentials/sql/v1/complete/sql_complete.cpp @@ -2,8 +2,11 @@ #include <yql/essentials/sql/v1/complete/syntax/grammar.h> #include <yql/essentials/sql/v1/complete/text/word.h> +#include <yql/essentials/sql/v1/complete/name/object/simple/static/schema.h> #include <yql/essentials/sql/v1/complete/name/service/ranking/dummy.h> #include <yql/essentials/sql/v1/complete/name/service/binding/name_service.h> +#include <yql/essentials/sql/v1/complete/name/service/column/name_service.h> +#include <yql/essentials/sql/v1/complete/name/service/schema/name_service.h> #include <yql/essentials/sql/v1/complete/name/service/static/name_service.h> #include <yql/essentials/sql/v1/complete/name/service/union/name_service.h> #include <yql/essentials/sql/v1/complete/syntax/format.h> @@ -61,7 +64,13 @@ namespace NSQLComplete { } TVector<INameService::TPtr> children; + children.emplace_back(MakeBindingNameService(std::move(global.Names))); + + if (!context.Binding && global.Column) { + children.emplace_back(MakeColumnNameService(std::move(global.Column->Columns))); + } + if (!context.Binding) { children.emplace_back(Names_); } @@ -300,7 +309,11 @@ namespace NSQLComplete { } if constexpr (std::is_base_of_v<TColumnName, T>) { - const TString& alias = aliasByTable.at(name.Table); + TString alias = name.Table.Path; + if (auto it = aliasByTable.find(name.Table); it != end(aliasByTable)) { + alias = it->second; + } + if (context.Column->Table.empty() && !alias.empty()) { name.Indentifier.prepend('.'); name.Indentifier.prepend(alias); |