diff options
author | Mikhail Surin <[email protected]> | 2022-06-09 20:34:39 +0300 |
---|---|---|
committer | Mikhail Surin <[email protected]> | 2022-06-09 20:34:39 +0300 |
commit | 66aefc6939acaf049ce10d9506310a1b5e05cfa9 (patch) | |
tree | 2a4e806c5761600d646a769c59a7c0c43ac76436 | |
parent | 4258d2388ee66028a2ef9331bdd3ad46673c3a8e (diff) |
revert r9496078
ref:1d130d14ea46c2653f0c41dea1a6f75347451b16
-rw-r--r-- | ydb/core/kqp/ut/kqp_yql_ut.cpp | 26 | ||||
-rw-r--r-- | ydb/library/yql/core/yql_expr_type_annotation.cpp | 18 | ||||
-rw-r--r-- | ydb/library/yql/public/issue/yql_issue_manager.cpp | 30 | ||||
-rw-r--r-- | ydb/library/yql/public/issue/yql_issue_manager.h | 8 | ||||
-rw-r--r-- | ydb/services/ydb/ydb_table_ut.cpp | 1 |
5 files changed, 11 insertions, 72 deletions
diff --git a/ydb/core/kqp/ut/kqp_yql_ut.cpp b/ydb/core/kqp/ut/kqp_yql_ut.cpp index 616fc91aa7f..67b87ea3060 100644 --- a/ydb/core/kqp/ut/kqp_yql_ut.cpp +++ b/ydb/core/kqp/ut/kqp_yql_ut.cpp @@ -309,32 +309,6 @@ Y_UNIT_TEST_SUITE(KqpYql) { [[2u];["Two"]] ])", FormatResultSetYson(result.GetResultSet(0))); } - - Y_UNIT_TEST_NEW_ENGINE(ColumnTypeMismatch) { - TKikimrRunner kikimr; - auto db = kikimr.GetTableClient(); - auto session = db.CreateSession().GetValueSync().GetSession(); - - auto params = TParamsBuilder() - .AddParam("$key").Uint64(1).Build() - .AddParam("$value").Uint64(2).Build() - .Build(); - - TExecDataQuerySettings settings; - auto req = session.ExecuteDataQuery(Q_(R"( - DECLARE $key AS Uint64; - DECLARE $value AS Uint64; - - REPLACE INTO `KeyValue` - (Key, Value) - VALUES - ($key, $value); - )"), TTxControl::BeginTx().CommitTx(), params).ExtractValueSync(); - - req.GetIssues().PrintTo(Cerr); - UNIT_ASSERT_VALUES_EQUAL(req.GetStatus(), EStatus::GENERIC_ERROR); - UNIT_ASSERT_STRING_CONTAINS(req.GetIssues().ToString(), "Failed to convert 'Value': Uint64 to Optional<String>"); - } } } // namespace NKqp diff --git a/ydb/library/yql/core/yql_expr_type_annotation.cpp b/ydb/library/yql/core/yql_expr_type_annotation.cpp index 19da3cdc1ce..f2a0013f5c8 100644 --- a/ydb/library/yql/core/yql_expr_type_annotation.cpp +++ b/ydb/library/yql/core/yql_expr_type_annotation.cpp @@ -385,8 +385,6 @@ IGraphTransformer::TStatus TryConvertToImpl(TExprContext& ctx, TExprNode::TPtr& TExprNode::TPtr field; if (!pos) { if (newField->GetItemType()->GetKind() != ETypeAnnotationKind::Optional) { - ctx.AddError(TIssue(node->Pos(ctx), TStringBuilder() << - "Can't find '" << newField->GetName() << "': " << *newField->GetItemType() << " in " << sourceType)); return IGraphTransformer::TStatus::Error; } @@ -408,8 +406,6 @@ IGraphTransformer::TStatus TryConvertToImpl(TExprContext& ctx, TExprNode::TPtr& YQL_ENSURE(field); auto status = TryConvertToImpl(ctx, field, *oldType->GetItemType(), *newField->GetItemType(), flags); if (status.Level == IGraphTransformer::TStatus::Error) { - ctx.AddError(TIssue(node->Pos(ctx), TStringBuilder() << - "Failed to convert '" << newField->GetName() << "': " << *oldType->GetItemType() << " to " << *newField->GetItemType())); return status; } } @@ -451,8 +447,6 @@ IGraphTransformer::TStatus TryConvertToImpl(TExprContext& ctx, TExprNode::TPtr& .Seal() .Build(); } else { - ctx.AddError(TIssue(node->Pos(ctx), TStringBuilder() << - "Can't find '" << newField->GetName() << ": " << *newField->GetItemType() << "' in " << sourceType)); return IGraphTransformer::TStatus::Error; } } else { @@ -467,8 +461,6 @@ IGraphTransformer::TStatus TryConvertToImpl(TExprContext& ctx, TExprNode::TPtr& auto status = TryConvertToImpl(ctx, field, *oldType->GetItemType(), *newField->GetItemType(), flags); if (status.Level == IGraphTransformer::TStatus::Error) { - ctx.AddError(TIssue(node->Pos(ctx), TStringBuilder() << - "Failed to convert '" << newField->GetName() << "': " << *oldType->GetItemType() << " to " << *newField->GetItemType())); return status; } } @@ -3434,14 +3426,12 @@ IGraphTransformer::TStatus TryConvertTo(TExprNode::TPtr& node, const TTypeAnnota return IGraphTransformer::TStatus::Error; } - TIssueScopeGuard guard(ctx.IssueManager, [&] { - return MakeIntrusive<TIssue>(ctx.GetPosition(node->Pos()), - TStringBuilder() << "Failed to convert type: " << sourceType << " to " << expectedType); - }); auto status = TryConvertToImpl(ctx, node, sourceType, expectedType, flags); - if (status.Level == IGraphTransformer::TStatus::Error) { - guard.RaiseIssueForEmptyScope(); + if (status.Level == IGraphTransformer::TStatus::Error) { + ctx.AddError(TIssue(ctx.GetPosition(node->Pos()), TStringBuilder() << "Failed to convert type: " << + sourceType << " to " << expectedType)); } + return status; } diff --git a/ydb/library/yql/public/issue/yql_issue_manager.cpp b/ydb/library/yql/public/issue/yql_issue_manager.cpp index 08daf0fcdd0..7375d2d30f0 100644 --- a/ydb/library/yql/public/issue/yql_issue_manager.cpp +++ b/ydb/library/yql/public/issue/yql_issue_manager.cpp @@ -69,45 +69,29 @@ void TIssueManager::LeaveScope() { } } -void TIssueManager::RaiseIssueForEmptyScope() { - if (RawIssues_.top().first.Empty()) { - TIssuePtr materialized = RawIssues_.top().second(); - if (auto p = CheckUniqAndLimit(materialized)) { - RawIssues_.top().first = p; - } - } -} - void TIssueManager::LeaveAllScopes() { while (!RawIssues_.empty()) { LeaveScope(); } } -TIssuePtr TIssueManager::CheckUniqAndLimit(TIssuePtr issue) { - const auto severity = issue->GetSeverity(); +TIssuePtr TIssueManager::CheckUniqAndLimit(const TIssue& issue) { + const auto severity = issue.GetSeverity(); if (OverflowIssues_[severity]) { return {}; } - if (UniqueIssues_[severity].contains(issue)) { + TIssuePtr p = MakeIntrusive<TIssue>(issue); + if (UniqueIssues_[severity].contains(p)) { return {}; } if (IssueLimit_ && UniqueIssues_[severity].size() == IssueLimit_) { OverflowIssues_[severity] = MakeIntrusive<TIssue>(TStringBuilder() - << "Too many " << SeverityToString(issue->GetSeverity()) << " issues"); + << "Too many " << SeverityToString(issue.GetSeverity()) << " issues"); OverflowIssues_[severity]->Severity = severity; return {}; } - UniqueIssues_[severity].insert(issue); - return issue; -} - -TIssuePtr TIssueManager::CheckUniqAndLimit(const TIssue& issue) { - const auto severity = issue.GetSeverity(); - if (OverflowIssues_[severity]) { - return {}; - } - return CheckUniqAndLimit(MakeIntrusive<TIssue>(issue)); + UniqueIssues_[severity].insert(p); + return p; } void TIssueManager::RaiseIssue(const TIssue& issue) { diff --git a/ydb/library/yql/public/issue/yql_issue_manager.h b/ydb/library/yql/public/issue/yql_issue_manager.h index d9ab4a2821f..9ad5ac7bb40 100644 --- a/ydb/library/yql/public/issue/yql_issue_manager.h +++ b/ydb/library/yql/public/issue/yql_issue_manager.h @@ -36,11 +36,8 @@ public: IssueLimit_ = limit; } - void RaiseIssueForEmptyScope(); - private: TIssuePtr CheckUniqAndLimit(const TIssue& issue); - TIssuePtr CheckUniqAndLimit(TIssuePtr issue); struct TIssueHash { ui64 operator()(const TIssuePtr& p) { @@ -69,11 +66,6 @@ public: { Manager_.AddScope(fn); } - - void RaiseIssueForEmptyScope() { - Manager_.RaiseIssueForEmptyScope(); - } - ~TIssueScopeGuard() { Manager_.LeaveScope(); diff --git a/ydb/services/ydb/ydb_table_ut.cpp b/ydb/services/ydb/ydb_table_ut.cpp index de43ed56e24..c5854ec7bec 100644 --- a/ydb/services/ydb/ydb_table_ut.cpp +++ b/ydb/services/ydb/ydb_table_ut.cpp @@ -197,7 +197,6 @@ Y_UNIT_TEST_SUITE(YdbYqlClient) { auto ref = R"___(<main>: Error: Type annotation, code: 1030 <main>:2:25: Error: At function: KiWriteTable! <main>:2:43: Error: Failed to convert type: Struct<'Key':String,'Value':String> to Struct<'Key':Uint32?,'Value':String?> - <main>:2:43: Error: Failed to convert 'Key': String to Optional<Uint32> <main>:2:43: Error: Failed to convert input columns types to scheme types, code: 2031 )___"; UNIT_ASSERT_EQUAL(result.GetIssues().Size(), 1); |