Merge pull request #29570 from taosdata/fix/TS-5900/smaRequired

fix: sma required at string type
This commit is contained in:
Shengliang Guan 2025-01-15 17:21:21 +08:00 committed by GitHub
commit 6abfa0a442
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 69 additions and 0 deletions

View File

@ -771,7 +771,34 @@ bool getSumFuncEnv(SFunctionNode* UNUSED_PARAM(pFunc), SFuncExecEnv* pEnv) {
return true;
}
static bool funcNotSupportStringSma(SFunctionNode* pFunc) {
SNode* pParam;
switch (pFunc->funcType) {
case FUNCTION_TYPE_MAX:
case FUNCTION_TYPE_MIN:
case FUNCTION_TYPE_SUM:
case FUNCTION_TYPE_AVG:
case FUNCTION_TYPE_AVG_PARTIAL:
case FUNCTION_TYPE_PERCENTILE:
case FUNCTION_TYPE_SPREAD:
case FUNCTION_TYPE_SPREAD_PARTIAL:
case FUNCTION_TYPE_SPREAD_MERGE:
case FUNCTION_TYPE_TWA:
pParam = nodesListGetNode(pFunc->pParameterList, 0);
if (pParam && nodesIsExprNode(pParam) && (IS_VAR_DATA_TYPE(((SExprNode*)pParam)->resType.type))) {
return true;
}
break;
default:
break;
}
return false;
}
EFuncDataRequired statisDataRequired(SFunctionNode* pFunc, STimeWindow* pTimeWindow) {
if(funcNotSupportStringSma(pFunc)) {
return FUNC_DATA_REQUIRED_DATA_LOAD;
}
return FUNC_DATA_REQUIRED_SMA_LOAD;
}

View File

@ -75,6 +75,7 @@ class TDTestCase:
tdLog.debug(" LIMIT test_case2 ............ [OK]")
self.test_TD_33336()
self.ts5900()
# stop
def stop(self):
@ -137,6 +138,47 @@ class TDTestCase:
tdLog.debug("INSERT TABLE DATA ............ [OK]")
return
def ts5900query(self):
sql = "select max(c0) from ts5900.tt1"
tdSql.query(sql)
tdSql.checkRows(1)
tdSql.checkData(0, 0, '99.0')
sql = "select min(c0) from ts5900.tt1"
tdSql.query(sql)
tdSql.checkRows(1)
tdSql.checkData(0, 0, '1.0')
def ts5900(self):
tdSql.execute("drop database if exists ts5900;")
tdSql.execute("create database ts5900;")
tdSql.execute("create table ts5900.meters (ts timestamp, c0 varchar(64)) tags(t0 varchar(64));")
sql = "CREATE TABLE ts5900.`tt1` USING ts5900.`meters` TAGS ('t11')"
tdSql.execute(sql)
for i in range(155):
tdSql.query(f"insert into ts5900.tt1 values(now+{i*10}s, '{i+1}.0')")
tdSql.query("insert into ts5900.tt1 values(now, '1.2')")
tdSql.query("insert into ts5900.tt1 values(now+1s, '2.0')")
tdSql.query("insert into ts5900.tt1 values(now+2s, '3.0')")
tdSql.query("insert into ts5900.tt1 values(now+3s, '105.0')")
tdSql.query("insert into ts5900.tt1 values(now+4s, '4.0')")
sql = "select count(*) from ts5900.tt1"
tdSql.query(sql)
tdSql.checkRows(1)
tdSql.checkData(0, 0, '160')
for i in range(10):
tdSql.execute("flush database ts5900")
time.sleep(1)
self.ts5900query()
tdSql.query(f"insert into ts5900.tt1 values(now, '23.0')")
self.ts5900query()
tdLog.info(f"ts5900 test {i} ............ [OK]")
time.sleep(1)
# test case1 base
# def test_case1(self):