fix(query): fix invalid write.
This commit is contained in:
parent
38df631629
commit
f6a262eeb1
|
@ -694,10 +694,12 @@ static int32_t doLoadBlockIndex(STsdbReader* pReader, SDataFReader* pFileReader,
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pBlockIdx->uid == pList->tableUidList[j]) {
|
if (pBlockIdx->uid > pList->tableUidList[j]) {
|
||||||
i += 1;
|
|
||||||
j += 1;
|
j += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pBlockIdx->uid == pList->tableUidList[j]) {
|
||||||
// this block belongs to a table that is not queried.
|
// this block belongs to a table that is not queried.
|
||||||
void* p = taosHashGet(pReader->status.pTableMap, &pBlockIdx->uid, sizeof(uint64_t));
|
void* p = taosHashGet(pReader->status.pTableMap, &pBlockIdx->uid, sizeof(uint64_t));
|
||||||
if (p == NULL) {
|
if (p == NULL) {
|
||||||
|
@ -711,9 +713,8 @@ static int32_t doLoadBlockIndex(STsdbReader* pReader, SDataFReader* pFileReader,
|
||||||
}
|
}
|
||||||
|
|
||||||
taosArrayPush(pIndexList, pBlockIdx);
|
taosArrayPush(pIndexList, pBlockIdx);
|
||||||
}
|
|
||||||
|
|
||||||
if (pBlockIdx->uid > pList->tableUidList[j]) {
|
i += 1;
|
||||||
j += 1;
|
j += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,23 +127,29 @@ void initGroupedResultInfo(SGroupResInfo* pGroupResInfo, SSHashObj* pHashmap, in
|
||||||
pGroupResInfo->pRows = taosArrayInit(size, POINTER_BYTES);
|
pGroupResInfo->pRows = taosArrayInit(size, POINTER_BYTES);
|
||||||
|
|
||||||
size_t keyLen = 0;
|
size_t keyLen = 0;
|
||||||
int32_t num = 0, iter = 0, itemSize = 0;
|
int32_t iter = 0;
|
||||||
|
int32_t bufLen = 0, offset = 0;
|
||||||
|
|
||||||
|
// todo move away and record this during create window
|
||||||
|
while ((pData = tSimpleHashIterate(pHashmap, pData, &iter)) != NULL) {
|
||||||
|
/*void* key = */tSimpleHashGetKey(pData, &keyLen);
|
||||||
|
bufLen += keyLen + sizeof(SResultRowPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
pGroupResInfo->pBuf = taosMemoryMalloc(bufLen);
|
||||||
|
|
||||||
|
iter = 0;
|
||||||
while ((pData = tSimpleHashIterate(pHashmap, pData, &iter)) != NULL) {
|
while ((pData = tSimpleHashIterate(pHashmap, pData, &iter)) != NULL) {
|
||||||
void* key = tSimpleHashGetKey(pData, &keyLen);
|
void* key = tSimpleHashGetKey(pData, &keyLen);
|
||||||
|
|
||||||
if (pGroupResInfo->pBuf == NULL) {
|
SResKeyPos* p = (SResKeyPos*) (pGroupResInfo->pBuf + offset);
|
||||||
itemSize = keyLen + sizeof(SResultRowPosition);
|
|
||||||
pGroupResInfo->pBuf = taosMemoryMalloc(size * itemSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
SResKeyPos* p = (SResKeyPos*)(pGroupResInfo->pBuf + num * itemSize);
|
|
||||||
|
|
||||||
p->groupId = *(uint64_t*)key;
|
p->groupId = *(uint64_t*)key;
|
||||||
p->pos = *(SResultRowPosition*)pData;
|
p->pos = *(SResultRowPosition*)pData;
|
||||||
memcpy(p->key, (char*)key + sizeof(uint64_t), keyLen - sizeof(uint64_t));
|
memcpy(p->key, (char*)key + sizeof(uint64_t), keyLen - sizeof(uint64_t));
|
||||||
taosArrayPush(pGroupResInfo->pRows, &p);
|
taosArrayPush(pGroupResInfo->pRows, &p);
|
||||||
num += 1;
|
|
||||||
|
offset += keyLen + sizeof(struct SResultRowPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (order == TSDB_ORDER_ASC || order == TSDB_ORDER_DESC) {
|
if (order == TSDB_ORDER_ASC || order == TSDB_ORDER_DESC) {
|
||||||
|
|
|
@ -165,7 +165,7 @@ if $data00 != 10 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
||||||
sql select last_row(*) from st1 group by a
|
sql select last_row(*) from st1 group by a order by a desc
|
||||||
if $rows != 2 then
|
if $rows != 2 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
endi
|
||||||
|
|
Loading…
Reference in New Issue