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) {
|
} else if (pColInfo->info.type == TSDB_DATA_TYPE_JSON) {
|
||||||
colDataSetVal(pColInfo, i, p, false);
|
colDataSetVal(pColInfo, i, p, false);
|
||||||
} else if (IS_VAR_DATA_TYPE(pColInfo->info.type)) {
|
} 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);
|
varDataSetLen(tmp, tagVal.nData);
|
||||||
memcpy(tmp + VARSTR_HEADER_SIZE, tagVal.pData, tagVal.nData);
|
memcpy(tmp + VARSTR_HEADER_SIZE, tagVal.pData, tagVal.nData);
|
||||||
colDataSetVal(pColInfo, i, tmp, false);
|
colDataSetVal(pColInfo, i, tmp, false);
|
||||||
#if TAG_FILTER_DEBUG
|
#if TAG_FILTER_DEBUG
|
||||||
qDebug("tagfilter varch:%s", tmp + 2);
|
qDebug("tagfilter varch:%s", tmp + 2);
|
||||||
#endif
|
#endif
|
||||||
|
taosMemoryFree(tmp);
|
||||||
} else {
|
} else {
|
||||||
colDataSetVal(pColInfo, i, (const char*)&tagVal.i64, false);
|
colDataSetVal(pColInfo, i, (const char*)&tagVal.i64, false);
|
||||||
#if TAG_FILTER_DEBUG
|
#if TAG_FILTER_DEBUG
|
||||||
|
|
|
@ -2188,6 +2188,9 @@ int tdbBtcMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst) {
|
||||||
} else {
|
} else {
|
||||||
lidx = lidx + 1;
|
lidx = lidx + 1;
|
||||||
}
|
}
|
||||||
|
if (TDB_CELLDECODER_FREE_KEY(&pBtc->coder)) {
|
||||||
|
tdbFree((void*)pTKey);
|
||||||
|
}
|
||||||
|
|
||||||
// compare last cell
|
// compare last cell
|
||||||
if (lidx <= ridx) {
|
if (lidx <= ridx) {
|
||||||
|
@ -2199,6 +2202,9 @@ int tdbBtcMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst) {
|
||||||
} else {
|
} else {
|
||||||
ridx = ridx - 1;
|
ridx = ridx - 1;
|
||||||
}
|
}
|
||||||
|
if (TDB_CELLDECODER_FREE_KEY(&pBtc->coder)) {
|
||||||
|
tdbFree((void*)pTKey);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// binary search
|
// binary search
|
||||||
|
@ -2209,6 +2215,9 @@ int tdbBtcMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst) {
|
||||||
pBtc->idx = (lidx + ridx) >> 1;
|
pBtc->idx = (lidx + ridx) >> 1;
|
||||||
tdbBtcGet(pBtc, &pTKey, &tkLen, NULL, NULL);
|
tdbBtcGet(pBtc, &pTKey, &tkLen, NULL, NULL);
|
||||||
c = pBt->kcmpr(pKey, kLen, pTKey, tkLen);
|
c = pBt->kcmpr(pKey, kLen, pTKey, tkLen);
|
||||||
|
if (TDB_CELLDECODER_FREE_KEY(&pBtc->coder)) {
|
||||||
|
tdbFree((void*)pTKey);
|
||||||
|
}
|
||||||
if (c < 0) {
|
if (c < 0) {
|
||||||
// pKey < cd.pKey
|
// pKey < cd.pKey
|
||||||
ridx = pBtc->idx - 1;
|
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/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/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/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
|
,,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/5dnode1mnode.py
|
||||||
,,y,system-test,./pytest.sh python3 ./test.py -f 6-cluster/5dnode2mnode.py -N 5
|
,,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