aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzverevgeny <zverevgeny@ydb.tech>2023-08-23 12:42:45 +0300
committerzverevgeny <zverevgeny@ydb.tech>2023-08-23 13:15:17 +0300
commit53e610978e3e45c943e3961729871a6cc45f6618 (patch)
treeaa958de32ffdd0b5d8d363b9ce4d8c6cda23bff5
parent27556246478039b14cf407d8a412a6cd58c29aab (diff)
downloadydb-53e610978e3e45c943e3961729871a6cc45f6618.tar.gz
YQL-16375 Backward compatibility tests, limit set of tokens forbidden in 'without' and 'in' statements
-rw-r--r--ydb/library/yql/sql/v1/sql_ut.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/ydb/library/yql/sql/v1/sql_ut.cpp b/ydb/library/yql/sql/v1/sql_ut.cpp
index 5e51cf21e66..92553b48639 100644
--- a/ydb/library/yql/sql/v1/sql_ut.cpp
+++ b/ydb/library/yql/sql/v1/sql_ut.cpp
@@ -56,6 +56,25 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) {
UNIT_ASSERT_VALUES_EQUAL(failed, TVector<TString>{});
}
+ Y_UNIT_TEST(TokensAsWithoutColumnName) { //id_without
+ auto failed = ValidateTokens({
+ "ALL", "AS", "ASSUME", "AUTOMAP", "BETWEEN", "BITCAST",
+ "CALLABLE", "CASE", "CAST", "CUBE", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP",
+ "DICT", "DISTINCT", "EMPTY_ACTION", "ENUM", "EXCEPT", "EXISTS", "FALSE", "FLOW", "FROM", "FULL", "GLOBAL",
+ "HAVING", "HOP", "INTERSECT", "JSON_EXISTS", "JSON_QUERY", "JSON_VALUE", "LIMIT", "LIST", "LOCAL",
+ "NOT", "NULL", "OPTIONAL", "PROCESS", "REDUCE", "REPEATABLE", "RESOURCE", "RETURN", "ROLLUP",
+ "SELECT", "SET", "STRUCT", "TAGGED", "TRUE", "TUPLE", "UNBOUNDED", "UNION", "VARIANT",
+ "WHEN", "WHERE", "WINDOW", "WITHOUT"
+ },
+ [](const TString& token){
+ TStringBuilder req;
+ req << "SELECT * WITHOUT " << token << " FROM Plato.Input";
+ return req;
+ }
+ );
+ UNIT_ASSERT_VALUES_EQUAL(failed, TVector<TString>{});
+ }
+
Y_UNIT_TEST(TokensAsColumnNameInAddColumn) {
auto failed = ValidateTokens({ //id_schema
"ANY", "AUTOMAP", "CALLABLE", "COLUMN", "DICT", "ENUM", "ERASE", "FALSE", "FLOW",
@@ -127,6 +146,25 @@ Y_UNIT_TEST_SUITE(SqlParsingOnly) {
UNIT_ASSERT_VALUES_EQUAL(failed, TVector<TString>{});
}
+ Y_UNIT_TEST(TokensAsIdExprIn) { //id_expr_in
+ auto failed = ValidateTokens({
+ "ALL", "ANY", "AS", "ASSUME", "AUTOMAP", "BETWEEN", "BITCAST",
+ "CALLABLE", "CASE", "CAST", "COMPACT", "CUBE", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP",
+ "DICT", "DISTINCT", "ENUM", "ERASE", "EXCEPT", "EXISTS", "FLOW", "FROM", "FULL", "GLOBAL",
+ "HAVING", "HOP", "INTERSECT", "JSON_EXISTS", "JSON_QUERY", "JSON_VALUE", "LIMIT", "LIST", "LOCAL",
+ "NOT", "OPTIONAL", "PROCESS", "REDUCE", "REPEATABLE", "RESOURCE", "RETURN", "ROLLUP",
+ "SELECT", "SET", "STREAM", "STRUCT", "TAGGED", "TUPLE", "UNBOUNDED", "UNION", "VARIANT",
+ "WHEN", "WHERE", "WINDOW", "WITHOUT"
+ },
+ [](const TString& token){
+ TStringBuilder req;
+ req << "SELECT * FROM Plato.Input WHERE q IN " << token;
+ return req;
+ }
+ );
+ UNIT_ASSERT_VALUES_EQUAL(failed, TVector<TString>{});
+ }
+
Y_UNIT_TEST(TableHints) {
UNIT_ASSERT(SqlToYql("SELECT * FROM plato.Input WITH INFER_SCHEMA").IsOk());
UNIT_ASSERT(SqlToYql("SELECT * FROM plato.Input WITH (INFER_SCHEMA)").IsOk());