From 61f91b57fa9ab10bb80b6571d699ffb1f92284f2 Mon Sep 17 00:00:00 2001 From: slzhou Date: Tue, 19 Mar 2024 17:19:14 +0800 Subject: [PATCH] fix: column node and function node util copy/json/msg --- include/libs/nodes/querynodes.h | 2 +- source/libs/nodes/src/nodesCloneFuncs.c | 3 +++ source/libs/nodes/src/nodesCodeFuncs.c | 25 +++++++++++++++++++++---- source/libs/nodes/src/nodesMsgFuncs.c | 25 +++++++++++++++++++++---- 4 files changed, 46 insertions(+), 9 deletions(-) diff --git a/include/libs/nodes/querynodes.h b/include/libs/nodes/querynodes.h index 53e931087e..3a2d0f81eb 100644 --- a/include/libs/nodes/querynodes.h +++ b/include/libs/nodes/querynodes.h @@ -75,7 +75,6 @@ typedef struct SColumnNode { SExprNode node; // QUERY_NODE_COLUMN uint64_t tableId; int8_t tableType; - bool tableHasPk; col_id_t colId; uint16_t projIdx; // the idx in project list, start from 1 EColumnType colType; // column or tag @@ -86,6 +85,7 @@ typedef struct SColumnNode { char colName[TSDB_COL_NAME_LEN]; int16_t dataBlockId; int16_t slotId; + bool tableHasPk; } SColumnNode; typedef struct SColumnRefNode { diff --git a/source/libs/nodes/src/nodesCloneFuncs.c b/source/libs/nodes/src/nodesCloneFuncs.c index 453d927378..1587050d94 100644 --- a/source/libs/nodes/src/nodesCloneFuncs.c +++ b/source/libs/nodes/src/nodesCloneFuncs.c @@ -119,6 +119,7 @@ static int32_t columnNodeCopy(const SColumnNode* pSrc, SColumnNode* pDst) { COPY_CHAR_ARRAY_FIELD(colName); COPY_SCALAR_FIELD(dataBlockId); COPY_SCALAR_FIELD(slotId); + COPY_SCALAR_FIELD(tableHasPk); return TSDB_CODE_SUCCESS; } @@ -208,6 +209,8 @@ static int32_t functionNodeCopy(const SFunctionNode* pSrc, SFunctionNode* pDst) COPY_SCALAR_FIELD(funcType); CLONE_NODE_LIST_FIELD(pParameterList); COPY_SCALAR_FIELD(udfBufSize); + COPY_SCALAR_FIELD(hasPk); + COPY_SCALAR_FIELD(pkBytes); return TSDB_CODE_SUCCESS; } diff --git a/source/libs/nodes/src/nodesCodeFuncs.c b/source/libs/nodes/src/nodesCodeFuncs.c index a131760f44..1685228659 100644 --- a/source/libs/nodes/src/nodesCodeFuncs.c +++ b/source/libs/nodes/src/nodesCodeFuncs.c @@ -3614,6 +3614,7 @@ static const char* jkColumnTableAlias = "TableAlias"; static const char* jkColumnColName = "ColName"; static const char* jkColumnDataBlockId = "DataBlockId"; static const char* jkColumnSlotId = "SlotId"; +static const char* jkColumnTableHasPk = "TableHasPk"; static int32_t columnNodeToJson(const void* pObj, SJson* pJson) { const SColumnNode* pNode = (const SColumnNode*)pObj; @@ -3652,7 +3653,9 @@ static int32_t columnNodeToJson(const void* pObj, SJson* pJson) { if (TSDB_CODE_SUCCESS == code) { code = tjsonAddIntegerToObject(pJson, jkColumnSlotId, pNode->slotId); } - + if (TSDB_CODE_SUCCESS == code) { + code = tjsonAddBoolToObject(pJson, jkColumnTableHasPk, pNode->tableHasPk); + } return code; } @@ -3693,7 +3696,9 @@ static int32_t jsonToColumnNode(const SJson* pJson, void* pObj) { if (TSDB_CODE_SUCCESS == code) { code = tjsonGetSmallIntValue(pJson, jkColumnSlotId, &pNode->slotId); } - + if (TSDB_CODE_SUCCESS == code) { + code = tjsonGetBoolValue(pJson, jkColumnTableHasPk, &pNode->tableHasPk); + } return code; } @@ -4032,6 +4037,8 @@ static const char* jkFunctionId = "Id"; static const char* jkFunctionType = "Type"; static const char* jkFunctionParameter = "Parameters"; static const char* jkFunctionUdfBufSize = "UdfBufSize"; +static const char* jkFunctionHasPk = "HasPk"; +static const char* jkFunctionPkBytes = "PkBytes"; static int32_t functionNodeToJson(const void* pObj, SJson* pJson) { const SFunctionNode* pNode = (const SFunctionNode*)pObj; @@ -4052,7 +4059,12 @@ static int32_t functionNodeToJson(const void* pObj, SJson* pJson) { if (TSDB_CODE_SUCCESS == code) { code = tjsonAddIntegerToObject(pJson, jkFunctionUdfBufSize, pNode->udfBufSize); } - + if (TSDB_CODE_SUCCESS == code) { + code = tjsonAddIntegerToObject(pJson, jkFunctionHasPk, pNode->hasPk); + } + if (TSDB_CODE_SUCCESS == code) { + code = tjsonAddIntegerToObject(pJson, jkFunctionPkBytes, pNode->pkBytes); + } return code; } @@ -4075,7 +4087,12 @@ static int32_t jsonToFunctionNode(const SJson* pJson, void* pObj) { if (TSDB_CODE_SUCCESS == code) { code = tjsonGetIntValue(pJson, jkFunctionUdfBufSize, &pNode->udfBufSize); } - + if (TSDB_CODE_SUCCESS == code) { + code = tjsonGetBoolValue(pJson, jkFunctionHasPk, &pNode->hasPk); + } + if (TSDB_CODE_SUCCESS == code) { + code = tjsonGetIntValue(pJson, jkFunctionPkBytes, &pNode->pkBytes); + } return code; } diff --git a/source/libs/nodes/src/nodesMsgFuncs.c b/source/libs/nodes/src/nodesMsgFuncs.c index 95a5c2f51e..b817b63115 100644 --- a/source/libs/nodes/src/nodesMsgFuncs.c +++ b/source/libs/nodes/src/nodesMsgFuncs.c @@ -725,7 +725,9 @@ static int32_t columnNodeInlineToMsg(const void* pObj, STlvEncoder* pEncoder) { if (TSDB_CODE_SUCCESS == code) { code = tlvEncodeValueI16(pEncoder, pNode->slotId); } - + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeValueBool(pEncoder, pNode->tableHasPk); + } return code; } @@ -767,7 +769,9 @@ static int32_t msgToColumnNodeInline(STlvDecoder* pDecoder, void* pObj) { if (TSDB_CODE_SUCCESS == code) { code = tlvDecodeValueI16(pDecoder, &pNode->slotId); } - + if (TSDB_CODE_SUCCESS == code) { + code = tlvDecodeValueBool(pDecoder, &pNode->tableHasPk); + } return code; } @@ -1091,7 +1095,9 @@ enum { FUNCTION_CODE_FUNCTION_ID, FUNCTION_CODE_FUNCTION_TYPE, FUNCTION_CODE_PARAMETERS, - FUNCTION_CODE_UDF_BUF_SIZE + FUNCTION_CODE_UDF_BUF_SIZE, + FUNCTION_NODE_HAS_PK, + FUNCTION_NODE_PK_BYTES }; static int32_t functionNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { @@ -1113,7 +1119,12 @@ static int32_t functionNodeToMsg(const void* pObj, STlvEncoder* pEncoder) { if (TSDB_CODE_SUCCESS == code) { code = tlvEncodeI32(pEncoder, FUNCTION_CODE_UDF_BUF_SIZE, pNode->udfBufSize); } - + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeBool(pEncoder, FUNCTION_NODE_HAS_PK, pNode->hasPk); + } + if (TSDB_CODE_SUCCESS == code) { + code = tlvEncodeI32(pEncoder, FUNCTION_NODE_PK_BYTES, pNode->pkBytes); + } return code; } @@ -1142,6 +1153,12 @@ static int32_t msgToFunctionNode(STlvDecoder* pDecoder, void* pObj) { case FUNCTION_CODE_UDF_BUF_SIZE: code = tlvDecodeI32(pTlv, &pNode->udfBufSize); break; + case FUNCTION_NODE_HAS_PK: + code = tlvDecodeBool(pTlv, &pNode->hasPk); + break; + case FUNCTION_NODE_PK_BYTES: + code = tlvDecodeI32(pTlv, &pNode->pkBytes); + break; default: break; }