diff options
author | zverevgeny <zverevgeny@ydb.tech> | 2023-08-23 12:42:45 +0300 |
---|---|---|
committer | zverevgeny <zverevgeny@ydb.tech> | 2023-08-23 13:15:17 +0300 |
commit | 53e610978e3e45c943e3961729871a6cc45f6618 (patch) | |
tree | aa958de32ffdd0b5d8d363b9ce4d8c6cda23bff5 | |
parent | 27556246478039b14cf407d8a412a6cd58c29aab (diff) | |
download | ydb-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.cpp | 38 |
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()); |