fix(query): update the uid list when tablemap is changed.
This commit is contained in:
parent
30b4023e24
commit
5ea4c0a7c8
|
@ -1887,7 +1887,7 @@ static bool hasDataInLastBlock(SLastBlockReader* pLastBlockReader) {
|
||||||
if (*pLastBlockReader->rowIndex == ALL_ROWS_CHECKED_INDEX) {
|
if (*pLastBlockReader->rowIndex == ALL_ROWS_CHECKED_INDEX) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(pLastBlockReader->lastBlockData.nRow > 0);
|
ASSERT(pLastBlockReader->lastBlockData.nRow > 0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1912,7 +1912,7 @@ int32_t mergeRowsInFileBlocks(SBlockData* pBlockData, STableBlockScanInfo* pBloc
|
||||||
tRowMergerClear(&merge);
|
tRowMergerClear(&merge);
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TSDB_CODE_SUCCESS;
|
return TSDB_CODE_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1980,7 +1980,7 @@ static int32_t buildComposedDataBlock(STsdbReader* pReader) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hasBlockLData = hasDataInLastBlock(pLastBlockReader);
|
bool hasBlockLData = hasDataInLastBlock(pLastBlockReader);
|
||||||
|
|
||||||
// no data in last block and block, no need to proceed.
|
// no data in last block and block, no need to proceed.
|
||||||
|
@ -2313,6 +2313,20 @@ static int32_t uidComparFunc(const void* p1, const void* p2) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void extractOrderedTableUidList(SUidOrderCheckInfo *pOrderCheckInfo, SReaderStatus* pStatus) {
|
||||||
|
int32_t index = 0;
|
||||||
|
int32_t total = taosHashGetSize(pStatus->pTableMap);
|
||||||
|
|
||||||
|
void* p = taosHashIterate(pStatus->pTableMap, NULL);
|
||||||
|
while(p != NULL) {
|
||||||
|
STableBlockScanInfo* pScanInfo = p;
|
||||||
|
pOrderCheckInfo->tableUidList[index++] = pScanInfo->uid;
|
||||||
|
p = taosHashIterate(pStatus->pTableMap, p);
|
||||||
|
}
|
||||||
|
|
||||||
|
taosSort(pOrderCheckInfo->tableUidList, total, sizeof(uint64_t), uidComparFunc);
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t initOrderCheckInfo(SUidOrderCheckInfo* pOrderCheckInfo, SReaderStatus* pStatus) {
|
static int32_t initOrderCheckInfo(SUidOrderCheckInfo* pOrderCheckInfo, SReaderStatus* pStatus) {
|
||||||
if (pOrderCheckInfo->tableUidList == NULL) {
|
if (pOrderCheckInfo->tableUidList == NULL) {
|
||||||
int32_t total = taosHashGetSize(pStatus->pTableMap);
|
int32_t total = taosHashGetSize(pStatus->pTableMap);
|
||||||
|
@ -2323,25 +2337,31 @@ static int32_t initOrderCheckInfo(SUidOrderCheckInfo* pOrderCheckInfo, SReaderSt
|
||||||
return TSDB_CODE_OUT_OF_MEMORY;
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t index = 0;
|
extractOrderedTableUidList(pOrderCheckInfo, pStatus);
|
||||||
void* p = taosHashIterate(pStatus->pTableMap, NULL);
|
|
||||||
while(p != NULL) {
|
|
||||||
STableBlockScanInfo* pScanInfo = p;
|
|
||||||
pOrderCheckInfo->tableUidList[index++] = pScanInfo->uid;
|
|
||||||
p = taosHashIterate(pStatus->pTableMap, p);
|
|
||||||
}
|
|
||||||
|
|
||||||
taosSort(pOrderCheckInfo->tableUidList, total, sizeof(uint64_t), uidComparFunc);
|
|
||||||
|
|
||||||
uint64_t uid = pOrderCheckInfo->tableUidList[0];
|
uint64_t uid = pOrderCheckInfo->tableUidList[0];
|
||||||
pStatus->pTableIter = taosHashGet(pStatus->pTableMap, &uid, sizeof(uid));
|
pStatus->pTableIter = taosHashGet(pStatus->pTableMap, &uid, sizeof(uid));
|
||||||
} else {
|
} else {
|
||||||
if (pStatus->pTableIter == NULL) { // it is the last block of a new file
|
if (pStatus->pTableIter == NULL) { // it is the last block of a new file
|
||||||
ASSERT(pOrderCheckInfo->currentIndex == taosHashGetSize(pStatus->pTableMap));
|
// ASSERT(pOrderCheckInfo->currentIndex == taosHashGetSize(pStatus->pTableMap));
|
||||||
|
|
||||||
pOrderCheckInfo->currentIndex = 0;
|
pOrderCheckInfo->currentIndex = 0;
|
||||||
uint64_t uid = pOrderCheckInfo->tableUidList[pOrderCheckInfo->currentIndex];
|
uint64_t uid = pOrderCheckInfo->tableUidList[pOrderCheckInfo->currentIndex];
|
||||||
pStatus->pTableIter = taosHashGet(pStatus->pTableMap, &uid, sizeof(uid));
|
pStatus->pTableIter = taosHashGet(pStatus->pTableMap, &uid, sizeof(uid));
|
||||||
|
|
||||||
|
// the tableMap has already updated
|
||||||
|
if (pStatus->pTableIter == NULL) {
|
||||||
|
void* p = taosMemoryRealloc(pOrderCheckInfo->tableUidList, taosHashGetSize(pStatus->pTableMap)*sizeof(uint64_t));
|
||||||
|
if (p == NULL) {
|
||||||
|
return TSDB_CODE_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
|
||||||
|
pOrderCheckInfo->tableUidList = p;
|
||||||
|
extractOrderedTableUidList(pOrderCheckInfo, pStatus);
|
||||||
|
|
||||||
|
uid = pOrderCheckInfo->tableUidList[0];
|
||||||
|
pStatus->pTableIter = taosHashGet(pStatus->pTableMap, &uid, sizeof(uid));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -338,7 +338,7 @@ class TDTestCase:
|
||||||
tdSql.query(f"select * from {dbname}.jsons1 where jtag->'tag1' between 1 and 30")
|
tdSql.query(f"select * from {dbname}.jsons1 where jtag->'tag1' between 1 and 30")
|
||||||
tdSql.checkRows(3)
|
tdSql.checkRows(3)
|
||||||
tdSql.query(f"select * from {dbname}.jsons1 where jtag->'tag1' between 'femail' and 'beijing'")
|
tdSql.query(f"select * from {dbname}.jsons1 where jtag->'tag1' between 'femail' and 'beijing'")
|
||||||
tdSql.checkRows(2)
|
tdSql.checkRows(0)
|
||||||
|
|
||||||
# test with tbname/normal column
|
# test with tbname/normal column
|
||||||
tdSql.query(f"select * from {dbname}.jsons1 where tbname = 'jsons1_1'")
|
tdSql.query(f"select * from {dbname}.jsons1 where tbname = 'jsons1_1'")
|
||||||
|
|
Loading…
Reference in New Issue