aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraneporada <aneporada@ydb.tech>2023-10-16 23:21:14 +0300
committeraneporada <aneporada@ydb.tech>2023-10-16 23:44:24 +0300
commit9639504972ede5c6f841bf6f6fd0d4f0841feb63 (patch)
tree6f221ddca83e98e7043fb28bdd3ef8bbf78cb5f1
parent8fc2cb092687030d0a554c8d695b6e7bab713413 (diff)
downloadydb-9639504972ede5c6f841bf6f6fd0d4f0841feb63.tar.gz
Pass FileAliasPrefix to dependent libraries
-rw-r--r--ydb/library/yql/ast/yql_expr.h2
-rw-r--r--ydb/library/yql/core/yql_type_annotation.cpp11
-rw-r--r--ydb/library/yql/core/yql_type_annotation.h7
-rw-r--r--ydb/library/yql/providers/yt/provider/yql_yt_table_desc.cpp7
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 {};