From ee0f7a4d38c20f27323904013781405ac9f8ea0b Mon Sep 17 00:00:00 2001 From: wangmm0220 Date: Mon, 24 Feb 2025 17:45:07 +0800 Subject: [PATCH] feat:[TS-5613]support bool in cast --- source/libs/parser/inc/sql.y | 4 ++-- tests/system-test/2-query/test_ts4467.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/source/libs/parser/inc/sql.y b/source/libs/parser/inc/sql.y index ca0a806037..818ef6cf2c 100755 --- a/source/libs/parser/inc/sql.y +++ b/source/libs/parser/inc/sql.y @@ -1454,13 +1454,13 @@ boolean_value_expression(A) ::= NOT(C) boolean_primary(B). A = createRawExprNodeExt(pCxt, &C, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_NOT, releaseRawExprNode(pCxt, B), NULL)); } boolean_value_expression(A) ::= - boolean_value_expression(B) OR boolean_value_expression(C). { + expr_or_subquery(B) OR expr_or_subquery(C). { SToken s = getTokenFromRawExprNode(pCxt, B); SToken e = getTokenFromRawExprNode(pCxt, C); A = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_OR, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C))); } boolean_value_expression(A) ::= - boolean_value_expression(B) AND boolean_value_expression(C). { + expr_or_subquery(B) AND expr_or_subquery(C). { SToken s = getTokenFromRawExprNode(pCxt, B); SToken e = getTokenFromRawExprNode(pCxt, C); A = createRawExprNodeExt(pCxt, &s, &e, createLogicConditionNode(pCxt, LOGIC_COND_TYPE_AND, releaseRawExprNode(pCxt, B), releaseRawExprNode(pCxt, C))); diff --git a/tests/system-test/2-query/test_ts4467.py b/tests/system-test/2-query/test_ts4467.py index b596c117fd..02ee2f0bbc 100644 --- a/tests/system-test/2-query/test_ts4467.py +++ b/tests/system-test/2-query/test_ts4467.py @@ -60,6 +60,18 @@ class TDTestCase: tdSql.query(sql) tdSql.checkData(0,0,1) + sql = "select cast(2 not in(3) as int) from t" + tdSql.query(sql) + tdSql.checkData(0,0,1) + + sql = "select cast(2 is NULL as int) from t" + tdSql.query(sql) + tdSql.checkData(0,0,0) + + sql = "select cast(2 and 1 as int) from t" + tdSql.query(sql) + tdSql.checkData(0,0,1) + def stop(self): tdSql.close() tdLog.success("%s successfully executed" % __file__)