diff --git a/include/libs/nodes/querynodes.h b/include/libs/nodes/querynodes.h index 3a2d0f81eb..cdbeda0012 100644 --- a/include/libs/nodes/querynodes.h +++ b/include/libs/nodes/querynodes.h @@ -86,6 +86,7 @@ typedef struct SColumnNode { int16_t dataBlockId; int16_t slotId; bool tableHasPk; + bool isPk; } SColumnNode; typedef struct SColumnRefNode { diff --git a/source/libs/executor/inc/executil.h b/source/libs/executor/inc/executil.h index 92de5c4364..1c70fd8bb6 100644 --- a/source/libs/executor/inc/executil.h +++ b/source/libs/executor/inc/executil.h @@ -83,6 +83,7 @@ typedef struct SColMatchItem { bool needOutput; SDataType dataType; int32_t funcType; + bool isPk; } SColMatchItem; typedef struct SColMatchInfo { diff --git a/source/libs/executor/src/executil.c b/source/libs/executor/src/executil.c index bb89fb587b..5e11cd1115 100644 --- a/source/libs/executor/src/executil.c +++ b/source/libs/executor/src/executil.c @@ -1339,6 +1339,7 @@ int32_t extractColMatchInfo(SNodeList* pNodeList, SDataBlockDescNode* pOutputNod c.colId = pColNode->colId; c.srcSlotId = pColNode->slotId; c.dstSlotId = pNode->slotId; + c.isPk = pColNode->isPk; taosArrayPush(pList, &c); } } diff --git a/source/libs/nodes/src/nodesCloneFuncs.c b/source/libs/nodes/src/nodesCloneFuncs.c index 1587050d94..3e4b3cad31 100644 --- a/source/libs/nodes/src/nodesCloneFuncs.c +++ b/source/libs/nodes/src/nodesCloneFuncs.c @@ -120,6 +120,7 @@ static int32_t columnNodeCopy(const SColumnNode* pSrc, SColumnNode* pDst) { COPY_SCALAR_FIELD(dataBlockId); COPY_SCALAR_FIELD(slotId); COPY_SCALAR_FIELD(tableHasPk); + COPY_SCALAR_FIELD(isPk); return TSDB_CODE_SUCCESS; } diff --git a/source/libs/nodes/src/nodesCodeFuncs.c b/source/libs/nodes/src/nodesCodeFuncs.c index 1685228659..362a37dd39 100644 --- a/source/libs/nodes/src/nodesCodeFuncs.c +++ b/source/libs/nodes/src/nodesCodeFuncs.c @@ -3615,6 +3615,7 @@ static const char* jkColumnColName = "ColName"; static const char* jkColumnDataBlockId = "DataBlockId"; static const char* jkColumnSlotId = "SlotId"; static const char* jkColumnTableHasPk = "TableHasPk"; +static const char* jkColumnIsPk = "IsPk"; static int32_t columnNodeToJson(const void* pObj, SJson* pJson) { const SColumnNode* pNode = (const SColumnNode*)pObj; @@ -3656,6 +3657,9 @@ static int32_t columnNodeToJson(const void* pObj, SJson* pJson) { if (TSDB_CODE_SUCCESS == code) { code = tjsonAddBoolToObject(pJson, jkColumnTableHasPk, pNode->tableHasPk); } + if (TSDB_CODE_SUCCESS == code) { + code = tjsonAddBoolToObject(pJson, jkColumnIsPk, pNode->isPk); + } return code; } @@ -3698,7 +3702,10 @@ static int32_t jsonToColumnNode(const SJson* pJson, void* pObj) { } if (TSDB_CODE_SUCCESS == code) { code = tjsonGetBoolValue(pJson, jkColumnTableHasPk, &pNode->tableHasPk); - } + } + if (TSDB_CODE_SUCCESS == code) { + code = tjsonGetBoolValue(pJson, jkColumnIsPk, &pNode->isPk); + } return code; } diff --git a/source/libs/nodes/src/nodesMsgFuncs.c b/source/libs/nodes/src/nodesMsgFuncs.c index b817b63115..0639a161bd 100644 --- a/source/libs/nodes/src/nodesMsgFuncs.c +++ b/source/libs/nodes/src/nodesMsgFuncs.c @@ -728,6 +728,9 @@ static int32_t columnNodeInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { if (TSDB_CODE_SUCCESS == code) { code = tlvEncodeValueBool(pEncoder, pNode->tableHasPk); } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueBool(pEncoder, pNode->isPk); + } return code; } @@ -772,6 +775,9 @@ static int32_t msgToColumnNodeInline(STlvDecoder* pDecoder, void* pObj) { if (TSDB_CODE_SUCCESS == code) { code = tlvDecodeValueBool(pDecoder, &pNode->tableHasPk); } + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueBool(pDecoder, &pNode->isPk); + } return code; } diff --git a/source/libs/parser/src/parTranslater.c b/source/libs/parser/src/parTranslater.c index 462e14c287..bc444ca042 100644 --- a/source/libs/parser/src/parTranslater.c +++ b/source/libs/parser/src/parTranslater.c @@ -938,7 +938,6 @@ static void setColumnInfoBySchema(const SRealTableNode* pTable, const SSchema* p } pCol->tableId = pTable->pMeta->uid; pCol->tableType = pTable->pMeta->tableType; - pCol->tableHasPk = hasPkInTable(pTable->pMeta); pCol->colId = pColSchema->colId; pCol->colType = (tagFlag >= 0 ? COLUMN_TYPE_TAG : COLUMN_TYPE_COLUMN); pCol->hasIndex = (pColSchema != NULL && IS_IDX_ON(pColSchema)); @@ -947,6 +946,8 @@ static void setColumnInfoBySchema(const SRealTableNode* pTable, const SSchema* p if (TSDB_DATA_TYPE_TIMESTAMP == pCol->node.resType.type) { pCol->node.resType.precision = pTable->pMeta->tableInfo.precision; } + pCol->tableHasPk = hasPkInTable(pTable->pMeta); + pCol->isPk = (pCol->tableHasPk) && (pColSchema->flags & COL_IS_KEY); } static void setColumnInfoByExpr(STempTableNode* pTable, SExprNode* pExpr, SColumnNode** pColRef) {