diff --git a/src/client/src/tscSubquery.c b/src/client/src/tscSubquery.c index 9309f70d140b6d5cebcfa9fdf572c464b05c8df6..3014b874feb58da4ba9e40e835d85a833048d6a6 100644 --- a/src/client/src/tscSubquery.c +++ b/src/client/src/tscSubquery.c @@ -2293,7 +2293,15 @@ void tscFirstRoundRetrieveCallback(void* param, TAOS_RES* tres, int numOfRows) { if (row[i] == NULL) { setNull(p + offset, pExpr->base.resType, pExpr->base.resBytes); } else { - memcpy(p + offset, row[i], length[i]); + if(pExpr->base.resType == TSDB_DATA_TYPE_NCHAR){ + int32_t output = 0; + bool ret = taosMbsToUcs4(row[i], length[i], p + offset, pExpr->base.resBytes, &output); + if (!ret) { + tscError("stddev convert tag error:%d", ret); + } + }else{ + memcpy(p + offset, row[i], length[i]); + } } offset += pExpr->base.resBytes; } diff --git a/tests/pytest/functions/function_stddev.py b/tests/pytest/functions/function_stddev.py index 3ff2b82bf6b326ed4d07a5a51027c9e266c2fd72..b9eadeb3443127c927b29fbb16bda4c12378e71a 100644 --- a/tests/pytest/functions/function_stddev.py +++ b/tests/pytest/functions/function_stddev.py @@ -123,8 +123,33 @@ class TDTestCase: tdSql.execute("insert into t1 values(now, 1, 'abc');") tdLog.info("select stddev(k) from t1 where b <> 'abc' interval(1s);") tdSql.query("select stddev(k) from t1 where b <> 'abc' interval(1s);") - - + + tdSql.execute("create table stdtable(ts timestamp, col1 int) tags(loc nchar(64))") + tdSql.execute("create table std1 using stdtable tags('beijing')") + tdSql.execute("create table std2 using stdtable tags('shanghai')") + tdSql.execute("create table std3 using stdtable tags('河南')") + tdSql.execute("insert into std1 values(now + 1s, 1)") + tdSql.execute("insert into std1 values(now + 2s, 2);") + tdSql.execute("insert into std2 values(now + 3s, 1);") + tdSql.execute("insert into std2 values(now + 4s, 2);") + tdSql.execute("insert into std3 values(now + 5s, 4);") + tdSql.execute("insert into std3 values(now + 6s, 8);") + tdSql.query("select stddev(col1) from stdtable group by loc;") + tdSql.checkData(0, 0, 2.0) + tdSql.checkData(1, 0, 0.5) + tdSql.checkData(2, 0, 0.5) + + tdSql.execute("create table stdtableint(ts timestamp, col1 int) tags(num int)") + tdSql.execute("create table stdint1 using stdtableint tags(1)") + tdSql.execute("create table stdint2 using stdtableint tags(2)") + tdSql.execute("insert into stdint1 values(now + 1s, 1)") + tdSql.execute("insert into stdint1 values(now + 2s, 2);") + tdSql.execute("insert into stdint2 values(now + 3s, 1);") + tdSql.execute("insert into stdint2 values(now + 4s, 2);") + tdSql.query("select stddev(col1) from stdtableint group by num") + tdSql.checkData(0, 0, 0.5) + tdSql.checkData(1, 0, 0.5) + def stop(self): tdSql.close() tdLog.success("%s successfully executed" % __file__)