fix:error in get table list
This commit is contained in:
parent
4f97d72502
commit
37f6d1195c
|
@ -1065,6 +1065,7 @@ static int metaUpdateTtlIdx(SMeta *pMeta, const SMetaEntry *pME) {
|
||||||
|
|
||||||
static int metaUpdateCtbIdx(SMeta *pMeta, const SMetaEntry *pME) {
|
static int metaUpdateCtbIdx(SMeta *pMeta, const SMetaEntry *pME) {
|
||||||
SCtbIdxKey ctbIdxKey = {.suid = pME->ctbEntry.suid, .uid = pME->uid};
|
SCtbIdxKey ctbIdxKey = {.suid = pME->ctbEntry.suid, .uid = pME->uid};
|
||||||
|
|
||||||
return tdbTbInsert(pMeta->pCtbIdx, &ctbIdxKey, sizeof(ctbIdxKey), pME->ctbEntry.pTags, ((STag*)(pME->ctbEntry.pTags))->len, &pMeta->txn);
|
return tdbTbInsert(pMeta->pCtbIdx, &ctbIdxKey, sizeof(ctbIdxKey), pME->ctbEntry.pTags, ((STag*)(pME->ctbEntry.pTags))->len, &pMeta->txn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -304,18 +304,37 @@ typedef struct tagFilterAssist{
|
||||||
SArray *cInfoList;
|
SArray *cInfoList;
|
||||||
}tagFilterAssist;
|
}tagFilterAssist;
|
||||||
|
|
||||||
static EDealRes getColumn(SNode* pNode, void* pContext) {
|
static EDealRes getColumn(SNode** pNode, void* pContext) {
|
||||||
if (QUERY_NODE_COLUMN == nodeType(pNode)) {
|
SColumnNode* pSColumnNode = NULL;
|
||||||
tagFilterAssist *pData = (tagFilterAssist *)pContext;
|
if (QUERY_NODE_COLUMN == nodeType((*pNode))) {
|
||||||
SColumnNode* pSColumnNode = (SColumnNode*)pNode;
|
pSColumnNode = *(SColumnNode**)pNode;
|
||||||
void *data = taosHashGet(pData->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId));
|
}else if(QUERY_NODE_FUNCTION == nodeType((*pNode))){
|
||||||
if(!data){
|
SFunctionNode* pFuncNode = *(SFunctionNode**)(pNode);
|
||||||
taosHashPut(pData->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId), &pNode, sizeof(pNode));
|
if (pFuncNode->funcType == FUNCTION_TYPE_TBNAME) {
|
||||||
pSColumnNode->slotId = pData->index++;
|
pSColumnNode = (SColumnNode*)nodesMakeNode(QUERY_NODE_COLUMN);
|
||||||
SColumnInfo cInfo = {.colId = pSColumnNode->colId, .type = pSColumnNode->node.resType.type, .bytes = pSColumnNode->node.resType.bytes};
|
if (NULL == pSColumnNode) {
|
||||||
taosArrayPush(pData->cInfoList, &cInfo);
|
return DEAL_RES_ERROR;
|
||||||
|
}
|
||||||
|
pSColumnNode->colId = -1;
|
||||||
|
pSColumnNode->colType = COLUMN_TYPE_TBNAME;
|
||||||
|
pSColumnNode->node.resType.type = TSDB_DATA_TYPE_VARCHAR;
|
||||||
|
pSColumnNode->node.resType.bytes = TSDB_TABLE_FNAME_LEN - 1 + VARSTR_HEADER_SIZE;
|
||||||
|
nodesDestroyNode(*pNode);
|
||||||
|
*pNode = (SNode*)pSColumnNode;
|
||||||
}
|
}
|
||||||
|
}else{
|
||||||
|
return DEAL_RES_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tagFilterAssist *pData = (tagFilterAssist *)pContext;
|
||||||
|
void *data = taosHashGet(pData->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId));
|
||||||
|
if(!data){
|
||||||
|
taosHashPut(pData->colHash, &pSColumnNode->colId, sizeof(pSColumnNode->colId), pNode, sizeof((*pNode)));
|
||||||
|
pSColumnNode->slotId = pData->index++;
|
||||||
|
SColumnInfo cInfo = {.colId = pSColumnNode->colId, .type = pSColumnNode->node.resType.type, .bytes = pSColumnNode->node.resType.bytes};
|
||||||
|
taosArrayPush(pData->cInfoList, &cInfo);
|
||||||
|
}
|
||||||
|
|
||||||
return DEAL_RES_CONTINUE;
|
return DEAL_RES_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,7 +381,8 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray
|
||||||
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
terrno = TSDB_CODE_OUT_OF_MEMORY;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
nodesWalkExprPostOrder(pTagCond, getColumn, (void *)&ctx);
|
|
||||||
|
nodesRewriteExprPostOrder(&pTagCond, getColumn, (void *)&ctx);
|
||||||
|
|
||||||
pResBlock = createDataBlock();
|
pResBlock = createDataBlock();
|
||||||
if (pResBlock == NULL) {
|
if (pResBlock == NULL) {
|
||||||
|
@ -400,20 +420,30 @@ static SColumnInfoData* getColInfoResult(void* metaHandle, uint64_t suid, SArray
|
||||||
int64_t st = taosGetTimestampUs();
|
int64_t st = taosGetTimestampUs();
|
||||||
for (int32_t i = 0; i < rows; i++) {
|
for (int32_t i = 0; i < rows; i++) {
|
||||||
void* tag = taosArrayGetP(tags, i);
|
void* tag = taosArrayGetP(tags, i);
|
||||||
|
int64_t* uid = taosArrayGet(uidList, i);
|
||||||
for(int32_t j = 0; j < taosArrayGetSize(pResBlock->pDataBlock); j++){
|
for(int32_t j = 0; j < taosArrayGetSize(pResBlock->pDataBlock); j++){
|
||||||
SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, j);
|
SColumnInfoData* pColInfo = (SColumnInfoData*)taosArrayGet(pResBlock->pDataBlock, j);
|
||||||
STagVal tagVal = {0};
|
if(pColInfo->info.colId == -1){ // tbname
|
||||||
tagVal.cid = pColInfo->info.colId;
|
char str[TSDB_TABLE_FNAME_LEN + VARSTR_HEADER_SIZE] = {0};
|
||||||
const char* p = metaGetTableTagVal(tag, pColInfo->info.type, &tagVal);
|
metaGetTableNameByUid(metaHandle, *uid, str);
|
||||||
|
colDataAppend(pColInfo, i, str, false);
|
||||||
|
qDebug("tbnameget uid:%ld, tbname:%s", *uid, str+2);
|
||||||
|
}else{
|
||||||
|
STagVal tagVal = {0};
|
||||||
|
tagVal.cid = pColInfo->info.colId;
|
||||||
|
const char* p = metaGetTableTagVal(tag, pColInfo->info.type, &tagVal);
|
||||||
|
|
||||||
if (p == NULL){
|
if (p == NULL){
|
||||||
colDataAppend(pColInfo, i, p, true);
|
colDataAppend(pColInfo, i, p, true);
|
||||||
} else if (IS_VAR_DATA_TYPE(pColInfo->info.type)) {
|
} else if (IS_VAR_DATA_TYPE(pColInfo->info.type)) {
|
||||||
char *tmp = (char*)(tagVal.pData - VARSTR_HEADER_SIZE);
|
char *tmp = taosMemoryMalloc(tagVal.nData + VARSTR_HEADER_SIZE);
|
||||||
varDataSetLen(tmp, tagVal.nData);
|
varDataSetLen(tmp, tagVal.nData);
|
||||||
colDataAppend(pColInfo, i, tmp, p == NULL);
|
memcpy(tmp + VARSTR_HEADER_SIZE, tagVal.pData, tagVal.nData);
|
||||||
} else {
|
colDataAppend(pColInfo, i, tmp, false);
|
||||||
colDataAppend(pColInfo, i, p, false);
|
taosMemoryFree(tmp);
|
||||||
|
} else {
|
||||||
|
colDataAppend(pColInfo, i, (const char*)&tagVal.i64, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -491,14 +521,20 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode,
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t i = 0;
|
int32_t i = 0;
|
||||||
while (i < taosArrayGetSize(res) && pColInfoData) {
|
int32_t j = 0;
|
||||||
void* var = POINTER_SHIFT(pColInfoData->pData, i * pColInfoData->info.bytes);
|
int32_t len = taosArrayGetSize(res);
|
||||||
|
while (i < taosArrayGetSize(res) && j < len && pColInfoData) {
|
||||||
|
void* var = POINTER_SHIFT(pColInfoData->pData, j * pColInfoData->info.bytes);
|
||||||
|
|
||||||
|
int64_t* uid = taosArrayGet(res, i);
|
||||||
|
qDebug("tbnameget get uid:%ld, res:%d", *uid, *(bool*)var);
|
||||||
if (*(bool*)var == false) {
|
if (*(bool*)var == false) {
|
||||||
taosArrayRemove(res, i);
|
taosArrayRemove(res, i);
|
||||||
|
j++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
|
j++;
|
||||||
}
|
}
|
||||||
colDataDestroy(pColInfoData);
|
colDataDestroy(pColInfoData);
|
||||||
taosMemoryFreeClear(pColInfoData);
|
taosMemoryFreeClear(pColInfoData);
|
||||||
|
@ -507,6 +543,7 @@ int32_t getTableList(void* metaHandle, void* pVnode, SScanPhysiNode* pScanNode,
|
||||||
for (int i = 0; i < taosArrayGetSize(res); i++) {
|
for (int i = 0; i < taosArrayGetSize(res); i++) {
|
||||||
STableKeyInfo info = {.uid = *(uint64_t*)taosArrayGet(res, i), .groupId = 0};
|
STableKeyInfo info = {.uid = *(uint64_t*)taosArrayGet(res, i), .groupId = 0};
|
||||||
taosArrayPush(pListInfo->pTableList, &info);
|
taosArrayPush(pListInfo->pTableList, &info);
|
||||||
|
qDebug("tbnameget get uid:%ld", info.uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
taosArrayDestroy(res);
|
taosArrayDestroy(res);
|
||||||
|
|
Loading…
Reference in New Issue