From 7b12c0cd7300d41eb2077667d810a94670591cdc Mon Sep 17 00:00:00 2001 From: xywang Date: Sat, 28 May 2022 13:26:31 +0800 Subject: [PATCH] fix(query): fixed related query error caused by tag mismatch --- src/query/src/qExecutor.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/src/query/src/qExecutor.c b/src/query/src/qExecutor.c index 6156ff9c10..65ca31c6a4 100644 --- a/src/query/src/qExecutor.c +++ b/src/query/src/qExecutor.c @@ -2896,7 +2896,7 @@ static bool overlapWithTimeWindow(SQueryAttr* pQueryAttr, SDataBlockInfo* pBlock return false; } -static int32_t doTSJoinFilter(SQueryRuntimeEnv *pRuntimeEnv, TSKEY key, bool ascQuery) { +static int32_t doTSJoinFilter(SQueryRuntimeEnv *pRuntimeEnv, TSKEY key, tVariant *pTag, bool ascQuery) { STSElem elem = tsBufGetElem(pRuntimeEnv->pTsBuf); #if defined(_DEBUG_VIEW) @@ -2905,6 +2905,10 @@ static int32_t doTSJoinFilter(SQueryRuntimeEnv *pRuntimeEnv, TSKEY key, bool asc pRuntimeEnv->pTsBuf->cur.order, pRuntimeEnv->pTsBuf->cur.tsIndex); #endif + if (pTag && elem.tag && tVariantCompare(pTag, elem.tag) != 0) { + return TS_JOIN_TAG_NOT_EQUALS; + } + if (ascQuery) { if (key < elem.ts) { return TS_JOIN_TS_NOT_EQUALS; @@ -3031,10 +3035,16 @@ void filterRowsInDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SSingleColumnFilterInf if (pRuntimeEnv->pTsBuf != NULL) { SColumnInfoData* pColInfoData = taosArrayGet(pBlock->pDataBlock, 0); + tVariant tag = { .nType = -1 }; + TSKEY* k = (TSKEY*) pColInfoData->pData; for (int32_t i = 0; i < numOfRows; ++i) { - int32_t offset = ascQuery? i:(numOfRows - i - 1); - int32_t ret = doTSJoinFilter(pRuntimeEnv, k[offset], ascQuery); + if (tag.nType == -1) { + tVariantAssign(&tag, &pRuntimeEnv->pTsBuf->block.tag); + } + + int32_t offset = ascQuery? i : (numOfRows - i - 1); + int32_t ret = doTSJoinFilter(pRuntimeEnv, k[offset], &tag, ascQuery); if (ret == TS_JOIN_TAG_NOT_EQUALS) { break; } else if (ret == TS_JOIN_TS_NOT_EQUALS) { @@ -3045,6 +3055,8 @@ void filterRowsInDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SSingleColumnFilterInf p[offset] = true; } + tVariantAssign(&tag, &pRuntimeEnv->pTsBuf->block.tag); + if (!tsBufNextPos(pRuntimeEnv->pTsBuf)) { if (i < (numOfRows - 1)) { all = false; @@ -3077,10 +3089,16 @@ void filterColRowsInDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SSDataBlock* pBlock SColumnInfoData* pColInfoData = taosArrayGet(pBlock->pDataBlock, 0); p = calloc(numOfRows, sizeof(int8_t)); + tVariant tag = { .nType = -1 }; + TSKEY* k = (TSKEY*) pColInfoData->pData; for (int32_t i = 0; i < numOfRows; ++i) { - int32_t offset = ascQuery? i:(numOfRows - i - 1); - int32_t ret = doTSJoinFilter(pRuntimeEnv, k[offset], ascQuery); + if (tag.nType == -1) { + tVariantAssign(&tag, &pRuntimeEnv->pTsBuf->block.tag); + } + + int32_t offset = ascQuery ? i : (numOfRows - i - 1); + int32_t ret = doTSJoinFilter(pRuntimeEnv, k[offset], &tag, ascQuery); if (ret == TS_JOIN_TAG_NOT_EQUALS) { break; } else if (ret == TS_JOIN_TS_NOT_EQUALS) { @@ -3091,6 +3109,8 @@ void filterColRowsInDataBlock(SQueryRuntimeEnv* pRuntimeEnv, SSDataBlock* pBlock p[offset] = true; } + tVariantAssign(&tag, &pRuntimeEnv->pTsBuf->block.tag); + if (!tsBufNextPos(pRuntimeEnv->pTsBuf)) { if (i < (numOfRows - 1)) { all = false; -- GitLab