From 42ed3b4251c5be5723ac0f98a1b7ee1c8c593486 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Wed, 19 Apr 2023 18:07:02 +0800 Subject: [PATCH] fix: support INTERP with boolean type --- src/client/src/tscSQLParser.c | 14 +++++++------- src/common/src/tvariant.c | 16 ++++++++-------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/client/src/tscSQLParser.c b/src/client/src/tscSQLParser.c index 668beeaffd..c69e1a487b 100644 --- a/src/client/src/tscSQLParser.c +++ b/src/client/src/tscSQLParser.c @@ -2661,7 +2661,7 @@ static int32_t setExprInfoForFunctions(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SS } } else if (f == TSDB_FUNC_INTERP) { int32_t t1 = pSchema->type; - if (!IS_NUMERIC_TYPE(t1)) { + if (!IS_NUMERIC_TYPE(t1) && (t1 != TSDB_DATA_TYPE_BOOL)) { invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg1); return -1; } @@ -6875,7 +6875,7 @@ int32_t validateFillNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode* pSqlNo if ((!isTimeWindowQuery(pQueryInfo)) && (!pointInterp)) { return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg5); } - + if (QUERY_IS_JOIN_QUERY(pQueryInfo->type) && (!pointInterp)) { return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg7); } @@ -6891,9 +6891,9 @@ int32_t validateFillNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode* pSqlNo if (pItem->pVar.nType != TSDB_DATA_TYPE_BINARY) { return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg2); } - + size_t numOfFields = tscNumOfFields(pQueryInfo); - + if (pQueryInfo->fillVal == NULL) { pQueryInfo->fillVal = calloc(numOfFields, sizeof(int64_t)); pQueryInfo->numOfFillVal = (int32_t)numOfFields; @@ -6954,7 +6954,7 @@ int32_t validateFillNode(SSqlCmd* pCmd, SQueryInfo* pQueryInfo, SSqlNode* pSqlNo return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg4); } } - + if ((num < numOfFields) || ((num - 1 < numOfFields) && pointInterp)) { tVariantListItem* lastItem = taosArrayGetLast(pFillToken); @@ -6990,13 +6990,13 @@ int32_t validateRangeNode(SSqlObj* pSql, SQueryInfo* pQueryInfo, SSqlNode* pSqlN const char *msg0 = "invalid usage of range clause"; const char* msg1 = "invalid timestamp in range"; SSqlCmd* pCmd = &pSql->cmd; - + bool interpQuery = tscIsPointInterpQuery(pQueryInfo); if ((!interpQuery) && (pSqlNode->pRange.start || pSqlNode->pRange.end)) { return invalidOperationMsg(tscGetErrorMsgPayload(pCmd), msg0); } - + if (pSqlNode->pRange.start == NULL || pSqlNode->pRange.end == NULL) { pQueryInfo->range.skey = INT64_MIN; pQueryInfo->range.ekey = INT64_MIN; diff --git a/src/common/src/tvariant.c b/src/common/src/tvariant.c index 13d67c5552..a3544f49a1 100644 --- a/src/common/src/tvariant.c +++ b/src/common/src/tvariant.c @@ -670,7 +670,7 @@ static int32_t convertToBool(tVariant *pVariant, int64_t *pDest) { if ((ret = convertToBoolImpl(pVariant->pz, pVariant->nLen)) < 0) { return ret; } - + *pDest = ret; } else if (pVariant->nType == TSDB_DATA_TYPE_NCHAR) { int32_t ret = 0; @@ -681,7 +681,7 @@ static int32_t convertToBool(tVariant *pVariant, int64_t *pDest) { } else if (pVariant->nType == TSDB_DATA_TYPE_NULL) { *pDest = TSDB_DATA_BOOL_NULL; } - + assert(*pDest == TSDB_TRUE || *pDest == TSDB_FALSE || *pDest == TSDB_DATA_BOOL_NULL); return 0; } @@ -702,7 +702,7 @@ int32_t tVariantDumpEx(tVariant *pVariant, char *payload, int16_t type, bool inc if (converted) { *converted = false; } - + if (pVariant == NULL || (pVariant->nType != 0 && !isValidDataType(pVariant->nType))) { return -1; } @@ -719,7 +719,7 @@ int32_t tVariantDumpEx(tVariant *pVariant, char *payload, int16_t type, bool inc *(int8_t *)payload = (int8_t)result; break; } - + case TSDB_DATA_TYPE_TINYINT: { if (convertToInteger(pVariant, &result, type, true, false, converted) < 0) { SET_EXT_INFO(converted, result, INT8_MIN + 1, INT8_MAX, extInfo); @@ -730,14 +730,14 @@ int32_t tVariantDumpEx(tVariant *pVariant, char *payload, int16_t type, bool inc } case TSDB_DATA_TYPE_UTINYINT: { - if (convertToInteger(pVariant, &result, type, false, false, converted) < 0) { + if (convertToInteger(pVariant, &result, type, false, false, converted) < 0) { SET_EXT_INFO(converted, result, 0, UINT8_MAX - 1, extInfo); return -1; } *((uint8_t *)payload) = (uint8_t) result; break; } - + case TSDB_DATA_TYPE_SMALLINT: { if (convertToInteger(pVariant, &result, type, true, false, converted) < 0) { SET_EXT_INFO(converted, result, INT16_MIN + 1, INT16_MAX, extInfo); @@ -755,7 +755,7 @@ int32_t tVariantDumpEx(tVariant *pVariant, char *payload, int16_t type, bool inc *((uint16_t *)payload) = (uint16_t)result; break; } - + case TSDB_DATA_TYPE_INT: { if (convertToInteger(pVariant, &result, type, true, false, converted) < 0) { SET_EXT_INFO(converted, result, INT32_MIN + 1, INT32_MAX, extInfo); @@ -773,7 +773,7 @@ int32_t tVariantDumpEx(tVariant *pVariant, char *payload, int16_t type, bool inc *((uint32_t *)payload) = (uint32_t)result; break; } - + case TSDB_DATA_TYPE_BIGINT: { if (convertToInteger(pVariant, &result, type, true, false, converted) < 0) { SET_EXT_INFO(converted, (int64_t)result, INT64_MIN + 1, INT64_MAX, extInfo); -- GitLab