diff options
author | zverevgeny <zverevgeny@ydb.tech> | 2023-08-10 10:16:49 +0300 |
---|---|---|
committer | zverevgeny <zverevgeny@ydb.tech> | 2023-08-10 11:21:27 +0300 |
commit | 28701169b2d4ec7688af3de345c99333bb433546 (patch) | |
tree | 1520d475207ba3b0c76d89071b6481589a808c22 | |
parent | d019bbe8efd9dfd0d588a2bf09ba8b0dbfd7ddb7 (diff) | |
download | ydb-28701169b2d4ec7688af3de345c99333bb433546.tar.gz |
YQL-16186 Both MATCH_RECOGNIZE and SAMPLE are not allowed
-rw-r--r-- | ydb/library/yql/sql/v1/sql_match_recognize_ut.cpp | 12 | ||||
-rw-r--r-- | ydb/library/yql/sql/v1/sql_select.cpp | 6 |
2 files changed, 18 insertions, 0 deletions
diff --git a/ydb/library/yql/sql/v1/sql_match_recognize_ut.cpp b/ydb/library/yql/sql/v1/sql_match_recognize_ut.cpp index ec123cd5669..2909bd90ea1 100644 --- a/ydb/library/yql/sql/v1/sql_match_recognize_ut.cpp +++ b/ydb/library/yql/sql/v1/sql_match_recognize_ut.cpp @@ -56,6 +56,18 @@ FROM Input MATCH_RECOGNIZE( UNIT_ASSERT(input->IsAtom() && input->GetContent() == "core"); } + Y_UNIT_TEST(MatchRecognizeAndSample) { + auto matchRecognizeAndSample = R"( +USE plato; +SELECT * +FROM Input MATCH_RECOGNIZE( + PATTERN ( A ) + DEFINE A as A + ) TABLESAMPLE BERNOULLI(1.0) +)"; + UNIT_ASSERT(not MatchRecognizeSqlToYql(matchRecognizeAndSample).IsOk()); + } + Y_UNIT_TEST(NoPartitionBy) { auto r = MatchRecognizeSqlToYql(minValidMatchRecognizeSql); UNIT_ASSERT(r.IsOk()); diff --git a/ydb/library/yql/sql/v1/sql_select.cpp b/ydb/library/yql/sql/v1/sql_select.cpp index 81a4eb8be84..887ddf25eca 100644 --- a/ydb/library/yql/sql/v1/sql_select.cpp +++ b/ydb/library/yql/sql/v1/sql_select.cpp @@ -522,6 +522,12 @@ TSourcePtr TSqlSelect::NamedSingleSource(const TRule_named_single_source& node, return nullptr; } if (node.HasBlock2()) { + if (node.HasBlock4()) { + //CAN/CSA-ISO/IEC 9075-2:18 7.6 <table reference> + //4) TF shall not simply contain both a <sample clause> and a <row pattern recognition clause and name>. + Ctx.Error() << "Source shall not simply contain both a sample clause and a row pattern recognition clause"; + return {}; + } auto matchRecognizeClause = TSqlMatchRecognizeClause(Ctx, Mode); auto matchRecognize = matchRecognizeClause.CreateBuilder(node.GetBlock2().GetRule_row_pattern_recognition_clause1()); singleSource->SetMatchRecognize(matchRecognize); |