Merge pull request #20072 from taosdata/fix/TD-22647
fix: tag filter crash issue
This commit is contained in:
commit
31615d0ccc
|
@ -869,13 +869,14 @@ static SSDataBlock* createTagValBlockForFilter(SArray* pColList, int32_t numOfTa
|
|||
} else if (pColInfo->info.type == TSDB_DATA_TYPE_JSON) {
|
||||
colDataSetVal(pColInfo, i, p, false);
|
||||
} else if (IS_VAR_DATA_TYPE(pColInfo->info.type)) {
|
||||
char* tmp = alloca(tagVal.nData + VARSTR_HEADER_SIZE + 1);
|
||||
char* tmp = taosMemoryMalloc(tagVal.nData + VARSTR_HEADER_SIZE + 1);
|
||||
varDataSetLen(tmp, tagVal.nData);
|
||||
memcpy(tmp + VARSTR_HEADER_SIZE, tagVal.pData, tagVal.nData);
|
||||
colDataSetVal(pColInfo, i, tmp, false);
|
||||
#if TAG_FILTER_DEBUG
|
||||
qDebug("tagfilter varch:%s", tmp + 2);
|
||||
#endif
|
||||
taosMemoryFree(tmp);
|
||||
} else {
|
||||
colDataSetVal(pColInfo, i, (const char*)&tagVal.i64, false);
|
||||
#if TAG_FILTER_DEBUG
|
||||
|
|
|
@ -2188,6 +2188,9 @@ int tdbBtcMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst) {
|
|||
} else {
|
||||
lidx = lidx + 1;
|
||||
}
|
||||
if (TDB_CELLDECODER_FREE_KEY(&pBtc->coder)) {
|
||||
tdbFree((void*)pTKey);
|
||||
}
|
||||
|
||||
// compare last cell
|
||||
if (lidx <= ridx) {
|
||||
|
@ -2199,6 +2202,9 @@ int tdbBtcMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst) {
|
|||
} else {
|
||||
ridx = ridx - 1;
|
||||
}
|
||||
if (TDB_CELLDECODER_FREE_KEY(&pBtc->coder)) {
|
||||
tdbFree((void*)pTKey);
|
||||
}
|
||||
}
|
||||
|
||||
// binary search
|
||||
|
@ -2209,6 +2215,9 @@ int tdbBtcMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst) {
|
|||
pBtc->idx = (lidx + ridx) >> 1;
|
||||
tdbBtcGet(pBtc, &pTKey, &tkLen, NULL, NULL);
|
||||
c = pBt->kcmpr(pKey, kLen, pTKey, tkLen);
|
||||
if (TDB_CELLDECODER_FREE_KEY(&pBtc->coder)) {
|
||||
tdbFree((void*)pTKey);
|
||||
}
|
||||
if (c < 0) {
|
||||
// pKey < cd.pKey
|
||||
ridx = pBtc->idx - 1;
|
||||
|
|
|
@ -646,6 +646,7 @@
|
|||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/elapsed.py
|
||||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/csum.py
|
||||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/function_diff.py
|
||||
,,y,system-test,./pytest.sh python3 ./test.py -f 2-query/tagFilter.py
|
||||
,,n,system-test,python3 ./test.py -f 2-query/queryQnode.py
|
||||
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode1mnode.py
|
||||
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode2mnode.py -N 5
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
from util.log import *
|
||||
from util.sql import *
|
||||
from util.cases import *
|
||||
from util.dnodes import *
|
||||
|
||||
|
||||
INT_COL = "c1"
|
||||
BINT_COL = "c2"
|
||||
SINT_COL = "c3"
|
||||
TINT_COL = "c4"
|
||||
FLOAT_COL = "c5"
|
||||
DOUBLE_COL = "c6"
|
||||
BOOL_COL = "c7"
|
||||
|
||||
BINARY_COL = "c8"
|
||||
NCHAR_COL = "c9"
|
||||
TS_COL = "c10"
|
||||
|
||||
NUM_COL = [INT_COL, BINT_COL, SINT_COL, TINT_COL, FLOAT_COL, DOUBLE_COL, ]
|
||||
UN_NUM_COL = [BOOL_COL, BINARY_COL, NCHAR_COL, ]
|
||||
TS_TYPE_COL = [TS_COL]
|
||||
|
||||
DBNAME = "db"
|
||||
|
||||
class TDTestCase:
|
||||
|
||||
def init(self, conn, logSql, replicaVar=1):
|
||||
self.replicaVar = int(replicaVar)
|
||||
tdLog.debug(f"start to excute {__file__}")
|
||||
tdSql.init(conn.cursor())
|
||||
tdSql.execute(f'drop database if exists db')
|
||||
tdSql.execute(f'create database if not exists db vgroups 1')
|
||||
|
||||
def __create_tb(self, dbname="db"):
|
||||
create_stb_sql = f'''create table {dbname}.stb1(
|
||||
ts timestamp, f1 int
|
||||
) tags (tag1 binary(16300))
|
||||
'''
|
||||
tdSql.execute(create_stb_sql)
|
||||
|
||||
tag_value = 'a'
|
||||
for i in range(1200):
|
||||
tag_value = tag_value + 'a'
|
||||
|
||||
for i in range(8000):
|
||||
tdSql.execute(f"create table {dbname}.ct{i+1} using {dbname}.stb1 tags ( '{tag_value}' )")
|
||||
|
||||
def __query_data(self, rows, dbname="db"):
|
||||
tdSql.execute(
|
||||
f'''select count(*) from {dbname}.stb1 where tag1 like '%a'
|
||||
'''
|
||||
)
|
||||
tdSql.checkRows(0)
|
||||
|
||||
def run(self):
|
||||
tdLog.printNoPrefix("==========step1:create table")
|
||||
self.__create_tb()
|
||||
|
||||
tdLog.printNoPrefix("==========step2:query data")
|
||||
self.__query_data(10)
|
||||
|
||||
def stop(self):
|
||||
tdSql.close()
|
||||
tdLog.success(f"{__file__} successfully executed")
|
||||
|
||||
tdCases.addLinux(__file__, TDTestCase())
|
||||
tdCases.addWindows(__file__, TDTestCase())
|
Loading…
Reference in New Issue