aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfedor-miron <fedor-miron@yandex-team.com>2023-11-02 15:43:05 +0300
committerfedor-miron <fedor-miron@yandex-team.com>2023-11-02 17:06:07 +0300
commit899516dc464fc1e5f2ea8239f425fabac94e33c4 (patch)
treee0844c96c85f2f97c1088fc40991242c28e2b443
parent42266add2eaf5777d921fe4e7fd19eef4de73b04 (diff)
downloadydb-899516dc464fc1e5f2ea8239f425fabac94e33c4.tar.gz
YQL-17025: fix crash on unknown cluster in drop table stmt
-rw-r--r--ydb/library/yql/sql/pg/pg_sql.cpp3
-rw-r--r--ydb/library/yql/sql/pg/pg_sql_ut.cpp9
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();