diff options
author | fedor-miron <fedor-miron@yandex-team.com> | 2023-11-02 15:43:05 +0300 |
---|---|---|
committer | fedor-miron <fedor-miron@yandex-team.com> | 2023-11-02 17:06:07 +0300 |
commit | 899516dc464fc1e5f2ea8239f425fabac94e33c4 (patch) | |
tree | e0844c96c85f2f97c1088fc40991242c28e2b443 | |
parent | 42266add2eaf5777d921fe4e7fd19eef4de73b04 (diff) | |
download | ydb-899516dc464fc1e5f2ea8239f425fabac94e33c4.tar.gz |
YQL-17025: fix crash on unknown cluster in drop table stmt
-rw-r--r-- | ydb/library/yql/sql/pg/pg_sql.cpp | 3 | ||||
-rw-r--r-- | ydb/library/yql/sql/pg/pg_sql_ut.cpp | 9 |
2 files changed, 12 insertions, 0 deletions
diff --git a/ydb/library/yql/sql/pg/pg_sql.cpp b/ydb/library/yql/sql/pg/pg_sql.cpp index 19dd471cef..e52781ab37 100644 --- a/ydb/library/yql/sql/pg/pg_sql.cpp +++ b/ydb/library/yql/sql/pg/pg_sql.cpp @@ -1886,6 +1886,9 @@ public: /* isSink */ true, /* isScheme */ true ); + if (sink == nullptr) { + return nullptr; + } TString mode = (value->missing_ok) ? "drop_if_exists" : "drop"; Statements.push_back(L( diff --git a/ydb/library/yql/sql/pg/pg_sql_ut.cpp b/ydb/library/yql/sql/pg/pg_sql_ut.cpp index 5f58af8743..db7ec4db36 100644 --- a/ydb/library/yql/sql/pg/pg_sql_ut.cpp +++ b/ydb/library/yql/sql/pg/pg_sql_ut.cpp @@ -360,6 +360,15 @@ Y_UNIT_TEST_SUITE(PgSqlParsingOnly) { UNIT_ASSERT_STRINGS_EQUAL(res.Root->ToString(), expectedAst.Root->ToString()); } + Y_UNIT_TEST(DropTableUnknownClusterStmt) { + auto res = PgSqlToYql("drop table if exists public.t"); + UNIT_ASSERT(!res.IsOk()); + UNIT_ASSERT_EQUAL(res.Issues.Size(), 1); + + auto issue = *(res.Issues.begin()); + UNIT_ASSERT_C(issue.GetMessage().find("Unknown cluster: public") != TString::npos, res.Issues.ToString()); + } + Y_UNIT_TEST(UpdateStmt) { auto res = PgSqlToYql("UPDATE plato.Input SET kind = 'test' where kind = 'testtest'"); Cerr << res.Root->ToString(); |