aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Uzhakov <uzhastik@gmail.com>2022-05-14 00:00:47 +0300
committerSergey Uzhakov <uzhastik@gmail.com>2022-05-14 00:00:47 +0300
commite5ffe7fe05e7f9d1fd1825a902f5bbbed331d817 (patch)
treea21099ba1cc07f226f4b4dd7b0c603214c11bede
parent63555ac272579916270285d89325cf2d5d2314b3 (diff)
downloadydb-e5ffe7fe05e7f9d1fd1825a902f5bbbed331d817.tar.gz
YQL-14830: support IS NULL in pg syntax
ref:91ccf3153fe8d75b01c7c9fe9eb5eb7fb98d368e
-rw-r--r--ydb/library/yql/sql/pg/pg_sql.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/ydb/library/yql/sql/pg/pg_sql.cpp b/ydb/library/yql/sql/pg/pg_sql.cpp
index e04beea527b..427cdf7b942 100644
--- a/ydb/library/yql/sql/pg/pg_sql.cpp
+++ b/ydb/library/yql/sql/pg/pg_sql.cpp
@@ -938,6 +938,19 @@ public:
return { ParseSelectStmt(CAST_NODE(SelectStmt, value->subquery), true), alias, colnames, false };
}
+ TAstNode* ParseNullTestExpr(const NullTest* value, const TExprSettings& settings) {
+ if (value->argisrow) {
+ AddError("NullTest: unsupported argisrow");
+ return nullptr;
+ }
+ auto arg = ParseExpr((const Node*)value->arg, settings);
+ auto result = L(A("Exists"), arg);
+ if (value->nulltesttype == IS_NULL) {
+ result = L(A("Not"), result);
+ }
+ return L(A("ToPg"), result);
+ }
+
TAstNode* ParseExpr(const Node* node, const TExprSettings& settings) {
switch (NodeTag(node)) {
case T_A_Const: {
@@ -960,6 +973,9 @@ public:
case T_BoolExpr: {
return ParseBoolExpr(CAST_NODE(BoolExpr, node), settings);
}
+ case T_NullTest: {
+ return ParseNullTestExpr(CAST_NODE(NullTest, node), settings);
+ }
case T_FuncCall: {
return ParseFuncCall(CAST_NODE(FuncCall, node), settings);
}