aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzverevgeny <zverevgeny@ydb.tech>2023-08-10 10:16:49 +0300
committerzverevgeny <zverevgeny@ydb.tech>2023-08-10 11:21:27 +0300
commit28701169b2d4ec7688af3de345c99333bb433546 (patch)
tree1520d475207ba3b0c76d89071b6481589a808c22
parentd019bbe8efd9dfd0d588a2bf09ba8b0dbfd7ddb7 (diff)
downloadydb-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.cpp12
-rw-r--r--ydb/library/yql/sql/v1/sql_select.cpp6
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);