aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorvvvv <vvvv@yandex-team.com>2025-02-25 10:14:46 +0300
committervvvv <vvvv@yandex-team.com>2025-02-25 10:32:42 +0300
commitdda9be9e1fde150b4473d9d10ec1a0d3829f7482 (patch)
treebc54250eaed354ffb43f2032fa7f6b0f943fc573
parent417d06292092cc279f26f51a2db2d8e53ad1ea96 (diff)
downloadydb-dda9be9e1fde150b4473d9d10ec1a0d3829f7482.tar.gz
YQL-19626 reexport of symbols, better issues from libraries
commit_hash:051b3854a032e0f7803ad23c03dfbf7f71590cc2
-rw-r--r--yql/essentials/core/yql_type_annotation.cpp23
-rw-r--r--yql/essentials/sql/v1/context.cpp4
-rw-r--r--yql/essentials/tests/sql/suites/library/lib1.sql.txt4
3 files changed, 17 insertions, 14 deletions
diff --git a/yql/essentials/core/yql_type_annotation.cpp b/yql/essentials/core/yql_type_annotation.cpp
index 943267ae46..8934949d3f 100644
--- a/yql/essentials/core/yql_type_annotation.cpp
+++ b/yql/essentials/core/yql_type_annotation.cpp
@@ -504,9 +504,9 @@ bool TModuleResolver::AddFromMemory(const TString& fullName, const TString& modu
QContext.GetWriter()->Put({ModuleResolverComponent, fullName}, query).GetValueSync();
}
- const auto addSubIssues = [&fullName](TIssue&& issue, const TIssues& issues) {
+ const auto addSubIssues = [](TIssue&& issue, const TIssues& issues) {
std::for_each(issues.begin(), issues.end(), [&](const TIssue& i) {
- issue.AddSubIssue(MakeIntrusive<TIssue>(TPosition(i.Position.Column, i.Position.Row, fullName), i.GetMessage()));
+ issue.AddSubIssue(MakeIntrusive<TIssue>(i));
});
return std::move(issue);
};
@@ -514,10 +514,6 @@ bool TModuleResolver::AddFromMemory(const TString& fullName, const TString& modu
TAstParseResult astRes;
if (sExpr) {
astRes = ParseAst(query, nullptr, fullName);
- if (!astRes.IsOk()) {
- ctx.AddError(addSubIssues(TIssue(pos, TStringBuilder() << "Failed to parse YQL: " << fullName), astRes.Issues));
- return false;
- }
} else {
NSQLTranslation::TTranslationSettings settings;
settings.Mode = NSQLTranslation::ESqlMode::LIBRARY;
@@ -528,10 +524,17 @@ bool TModuleResolver::AddFromMemory(const TString& fullName, const TString& modu
settings.V0Behavior = NSQLTranslation::EV0Behavior::Silent;
settings.FileAliasPrefix = FileAliasPrefix;
astRes = SqlToYql(Translators, query, settings);
- if (!astRes.IsOk()) {
- ctx.AddError(addSubIssues(TIssue(pos, TStringBuilder() << "Failed to parse SQL: " << fullName), astRes.Issues));
- return false;
- }
+ }
+
+ if (!astRes.IsOk()) {
+ ctx.AddError(addSubIssues(TIssue(pos, TStringBuilder() << "Failed to parse: " << fullName), astRes.Issues));
+ return false;
+ }
+
+ if (!astRes.Issues.Empty()) {
+ auto issue = TIssue(pos, TStringBuilder() << "Parsing issues for: " << fullName);
+ issue.SetCode(TIssuesIds::INFO, NYql::TSeverityIds::S_INFO);
+ ctx.IssueManager.RaiseIssue(addSubIssues(std::move(issue), astRes.Issues));
}
TLibraryCohesion cohesion;
diff --git a/yql/essentials/sql/v1/context.cpp b/yql/essentials/sql/v1/context.cpp
index 4082757671..9aac807dbc 100644
--- a/yql/essentials/sql/v1/context.cpp
+++ b/yql/essentials/sql/v1/context.cpp
@@ -361,10 +361,6 @@ bool TContext::AddExport(TPosition pos, const TString& name) {
Error(pos) << "Can not export anonymous name " << name;
return false;
}
- if (Exports.contains(name)) {
- Error(pos) << "Duplicate export symbol: " << name;
- return false;
- }
if (!Scoped->LookupNode(name)) {
Error(pos) << "Unable to export unknown symbol: " << name;
return false;
diff --git a/yql/essentials/tests/sql/suites/library/lib1.sql.txt b/yql/essentials/tests/sql/suites/library/lib1.sql.txt
index 0de921bca3..29cad53a7f 100644
--- a/yql/essentials/tests/sql/suites/library/lib1.sql.txt
+++ b/yql/essentials/tests/sql/suites/library/lib1.sql.txt
@@ -1,5 +1,9 @@
import lib2 symbols $mul;
+$sqr = 1;
+
+export $sqr;
+
$sqr = ($x)->{ return $mul($x, $x); };
export $sqr;