From 2513531eeee7d5a9c88571e835b3b4c1f720cf77 Mon Sep 17 00:00:00 2001 From: factosea <285808407@qq.com> Date: Thu, 25 Jan 2024 10:19:51 +0800 Subject: [PATCH] fix: statecount function checkou arg full equal --- source/libs/function/src/builtins.c | 11 +++++++---- tests/system-test/2-query/statecount.py | 4 ++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/source/libs/function/src/builtins.c b/source/libs/function/src/builtins.c index 6f5b28f366..1ca00456cf 100644 --- a/source/libs/function/src/builtins.c +++ b/source/libs/function/src/builtins.c @@ -1305,10 +1305,13 @@ static bool validateStateOper(const SValueNode* pVal) { if (TSDB_DATA_TYPE_BINARY != pVal->node.resType.type) { return false; } - return ( - 0 == strncasecmp(varDataVal(pVal->datum.p), "GT", 2) || 0 == strncasecmp(varDataVal(pVal->datum.p), "GE", 2) || - 0 == strncasecmp(varDataVal(pVal->datum.p), "LT", 2) || 0 == strncasecmp(varDataVal(pVal->datum.p), "LE", 2) || - 0 == strncasecmp(varDataVal(pVal->datum.p), "EQ", 2) || 0 == strncasecmp(varDataVal(pVal->datum.p), "NE", 2)); + if (strlen(varDataVal(pVal->datum.p)) == 2) { + return ( + 0 == strncasecmp(varDataVal(pVal->datum.p), "GT", 2) || 0 == strncasecmp(varDataVal(pVal->datum.p), "GE", 2) || + 0 == strncasecmp(varDataVal(pVal->datum.p), "LT", 2) || 0 == strncasecmp(varDataVal(pVal->datum.p), "LE", 2) || + 0 == strncasecmp(varDataVal(pVal->datum.p), "EQ", 2) || 0 == strncasecmp(varDataVal(pVal->datum.p), "NE", 2)); + } + return false; } static int32_t translateStateCount(SFunctionNode* pFunc, char* pErrBuf, int32_t len) { diff --git a/tests/system-test/2-query/statecount.py b/tests/system-test/2-query/statecount.py index f76e153014..006215956b 100644 --- a/tests/system-test/2-query/statecount.py +++ b/tests/system-test/2-query/statecount.py @@ -103,6 +103,10 @@ class TDTestCase: f"select statecount(c1 ,'GT',1) , min(c1) from {dbname}.t1", f"select statecount(c1 ,'GT',1) , spread(c1) from {dbname}.t1", f"select statecount(c1 ,'GT',1) , diff(c1) from {dbname}.t1", + f"select statecount(c1 ,'GTA',1) , diff(c1) from {dbname}.t1", + f"select statecount(c1 ,'EQA',1) , diff(c1) from {dbname}.t1", + f"select statecount(c1 ,'',1) , diff(c1) from {dbname}.t1", + f"select statecount(c1 ,'E',1) , diff(c1) from {dbname}.t1", ] for error_sql in error_sql_lists: tdSql.error(error_sql)