diff options
author | aneporada <aneporada@ydb.tech> | 2023-10-16 23:21:14 +0300 |
---|---|---|
committer | aneporada <aneporada@ydb.tech> | 2023-10-16 23:44:24 +0300 |
commit | 9639504972ede5c6f841bf6f6fd0d4f0841feb63 (patch) | |
tree | 6f221ddca83e98e7043fb28bdd3ef8bbf78cb5f1 | |
parent | 8fc2cb092687030d0a554c8d695b6e7bab713413 (diff) | |
download | ydb-9639504972ede5c6f841bf6f6fd0d4f0841feb63.tar.gz |
Pass FileAliasPrefix to dependent libraries
-rw-r--r-- | ydb/library/yql/ast/yql_expr.h | 2 | ||||
-rw-r--r-- | ydb/library/yql/core/yql_type_annotation.cpp | 11 | ||||
-rw-r--r-- | ydb/library/yql/core/yql_type_annotation.h | 7 | ||||
-rw-r--r-- | ydb/library/yql/providers/yt/provider/yql_yt_table_desc.cpp | 7 |
4 files changed, 25 insertions, 2 deletions
diff --git a/ydb/library/yql/ast/yql_expr.h b/ydb/library/yql/ast/yql_expr.h index 6c15f727a8..21329b8ab0 100644 --- a/ydb/library/yql/ast/yql_expr.h +++ b/ydb/library/yql/ast/yql_expr.h @@ -2211,6 +2211,8 @@ public: Parent resolver should be alive while using child due to raw data sharing. */ virtual IModuleResolver::TPtr CreateMutableChild() const = 0; + virtual void SetFileAliasPrefix(TString&& prefix) = 0; + virtual TString GetFileAliasPrefix() const = 0; virtual ~IModuleResolver() = default; }; diff --git a/ydb/library/yql/core/yql_type_annotation.cpp b/ydb/library/yql/core/yql_type_annotation.cpp index b55e7989e1..6e39b4ac6a 100644 --- a/ydb/library/yql/core/yql_type_annotation.cpp +++ b/ydb/library/yql/core/yql_type_annotation.cpp @@ -332,6 +332,7 @@ bool TModuleResolver::AddFromMemory(const TString& fullName, const TString& modu settings.Flags = SqlFlags; settings.SyntaxVersion = syntaxVersion; settings.V0Behavior = NSQLTranslation::EV0Behavior::Silent; + settings.FileAliasPrefix = FileAliasPrefix; astRes = SqlToYql(body, settings); if (!astRes.IsOk()) { ctx.AddError(addSubIssues(TIssue(pos, TStringBuilder() << "Failed to parse SQL: " << fullName), astRes.Issues)); @@ -449,7 +450,15 @@ IModuleResolver::TPtr TModuleResolver::CreateMutableChild() const { throw yexception() << "Module resolver should not contain user data and URL loader"; } - return std::make_shared<TModuleResolver>(&Modules, LibsContext.NextUniqueId, ClusterMapping, SqlFlags, OptimizeLibraries, KnownPackages, Libs); + return std::make_shared<TModuleResolver>(&Modules, LibsContext.NextUniqueId, ClusterMapping, SqlFlags, OptimizeLibraries, KnownPackages, Libs, FileAliasPrefix); +} + +void TModuleResolver::SetFileAliasPrefix(TString&& prefix) { + FileAliasPrefix = std::move(prefix); +} + +TString TModuleResolver::GetFileAliasPrefix() const { + return FileAliasPrefix; } TString TModuleResolver::SubstParameters(const TString& str) { diff --git a/ydb/library/yql/core/yql_type_annotation.h b/ydb/library/yql/core/yql_type_annotation.h index b3717833c5..9683480517 100644 --- a/ydb/library/yql/core/yql_type_annotation.h +++ b/ydb/library/yql/core/yql_type_annotation.h @@ -53,7 +53,8 @@ public: } TModuleResolver(const TModulesTable* parentModules, ui64 nextUniqueId, const THashMap<TString, TString>& clusterMapping, - const THashSet<TString>& sqlFlags, bool optimizeLibraries, const TSet<TString>& knownPackages, const THashMap<TString, THashMap<int, TLibraryCohesion>>& libs) + const THashSet<TString>& sqlFlags, bool optimizeLibraries, const TSet<TString>& knownPackages, const THashMap<TString, + THashMap<int, TLibraryCohesion>>& libs, const TString& fileAliasPrefix) : ParentModules(parentModules) , LibsContext(nextUniqueId) , KnownPackages(knownPackages) @@ -61,6 +62,7 @@ public: , ClusterMapping(clusterMapping) , SqlFlags(sqlFlags) , OptimizeLibraries(optimizeLibraries) + , FileAliasPrefix(fileAliasPrefix) { } @@ -93,6 +95,8 @@ public: void UpdateNextUniqueId(TExprContext& ctx) const override; ui64 GetNextUniqueId() const override; IModuleResolver::TPtr CreateMutableChild() const override; + void SetFileAliasPrefix(TString&& prefix) override; + TString GetFileAliasPrefix() const override; private: bool AddFromMemory(const TString& fullName, const TString& moduleName, bool isYql, const TString& body, TExprContext& ctx, ui16 syntaxVersion, ui32 packageVersion, TPosition pos, std::vector<TString>* exports = nullptr, std::vector<TString>* imports = nullptr); @@ -116,6 +120,7 @@ private: const THashSet<TString> SqlFlags; const bool OptimizeLibraries; THolder<TExprContext::TFreezeGuard> FreezeGuard; + TString FileAliasPrefix; }; bool SplitUdfName(TStringBuf name, TStringBuf& moduleName, TStringBuf& funcName); diff --git a/ydb/library/yql/providers/yt/provider/yql_yt_table_desc.cpp b/ydb/library/yql/providers/yt/provider/yql_yt_table_desc.cpp index 609820e173..880cca5c29 100644 --- a/ydb/library/yql/providers/yt/provider/yql_yt_table_desc.cpp +++ b/ydb/library/yql/providers/yt/provider/yql_yt_table_desc.cpp @@ -8,6 +8,8 @@ #include <ydb/library/yql/sql/sql.h> #include <ydb/library/yql/utils/yql_panic.h> +#include <util/generic/scope.h> + namespace NYql { namespace { @@ -163,6 +165,11 @@ TExprNode::TPtr CompileViewSql(const TString& provider, const TString& cluster, return {}; } + TString oldAliasPrefix = moduleResolver->GetFileAliasPrefix(); + moduleResolver->SetFileAliasPrefix(TString{settings.FileAliasPrefix}); + Y_DEFER { + moduleResolver->SetFileAliasPrefix(std::move(oldAliasPrefix)); + }; TExprNode::TPtr exprRoot; if (!CompileExpr(*sqlRes.Root, exprRoot, ctx, moduleResolver, urlListerManager, false, Max<ui32>(), syntaxVersion)) { return {}; |