From e648583051c64fbb5baa97a8d36ba05dc6ae2909 Mon Sep 17 00:00:00 2001 From: Ganlin Zhao Date: Tue, 8 Feb 2022 14:29:41 +0800 Subject: [PATCH] [TD-11220](query): time related functions --- src/common/inc/texpr.h | 3 ++- src/common/src/texpr.c | 43 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/common/inc/texpr.h b/src/common/inc/texpr.h index 47a848e99d..ca692a2135 100644 --- a/src/common/inc/texpr.h +++ b/src/common/inc/texpr.h @@ -67,7 +67,8 @@ struct SSchema; #define TSDB_FUNC_SCALAR_CAST (TSDB_FUNC_FLAG_SCALAR | 0x0011) #define TSDB_FUNC_SCALAR_NOW (TSDB_FUNC_FLAG_SCALAR | 0x0012) #define TSDB_FUNC_SCALAR_TODAY (TSDB_FUNC_FLAG_SCALAR | 0x0013) -#define TSDB_FUNC_SCALAR_MAX_NUM 20 +#define TSDB_FUNC_SCALAR_TIMEZONE (TSDB_FUNC_FLAG_SCALAR | 0x0014) +#define TSDB_FUNC_SCALAR_MAX_NUM 21 #define TSDB_FUNC_SCALAR_NAME_MAX_LEN 16 diff --git a/src/common/src/texpr.c b/src/common/src/texpr.c index 565c65e850..b57a6fc405 100644 --- a/src/common/src/texpr.c +++ b/src/common/src/texpr.c @@ -23,6 +23,7 @@ #include "tarray.h" #include "tbuffer.h" #include "tcompare.h" +#include "tglobal.h" #include "tsdb.h" #include "tskiplist.h" #include "texpr.h" @@ -78,8 +79,9 @@ int32_t exprTreeValidateFunctionNode(char* msgbuf, tExprNode *pExpr) { case TSDB_FUNC_SCALAR_CONCAT_WS: { return exprValidateStringConcatWsNode(pExpr); } + case TSDB_FUNC_SCALAR_NOW: case TSDB_FUNC_SCALAR_TODAY: - case TSDB_FUNC_SCALAR_NOW: { + case TSDB_FUNC_SCALAR_TIMEZONE: { return exprValidateTimeNode(pExpr); } @@ -1195,6 +1197,40 @@ int32_t exprValidateTimeNode(tExprNode *pExpr) { pExpr->resultBytes = (int16_t)tDataTypes[pExpr->resultType].bytes; break; } + case TSDB_FUNC_SCALAR_TIMEZONE: { + if (pExpr->_func.numChildren != 0 || pExpr->_func.pChildren != NULL) { + return TSDB_CODE_TSC_INVALID_OPERATION; + } + pExpr->_func.numChildren = 1; + pExpr->_func.pChildren = (tExprNode**)tcalloc(1, sizeof(tExprNode*)); + if (!pExpr->_func.pChildren) { + return TSDB_CODE_TSC_OUT_OF_MEMORY; + } + + pExpr->_func.pChildren[0] = (tExprNode*)tcalloc(1, sizeof(tExprNode)); + tExprNode* child = pExpr->_func.pChildren[0]; + if (!child) { + return TSDB_CODE_TSC_OUT_OF_MEMORY; + } + child->nodeType = TSQL_NODE_VALUE; + child->resultType = TSDB_DATA_TYPE_BINARY; + child->resultBytes = TSDB_TIMEZONE_LEN; + + child->pVal = (tVariant *)tcalloc(1, sizeof(tVariant)); + if (!child->pVal) { + return TSDB_CODE_TSC_OUT_OF_MEMORY; + } + child->pVal->nType = TSDB_DATA_TYPE_BINARY; + child->pVal->nLen = TSDB_TIMEZONE_LEN; + child->pVal->pz = tcalloc(TSDB_TIMEZONE_LEN, sizeof(char)); + if (!child->pVal->pz) { + return TSDB_CODE_TSC_OUT_OF_MEMORY; + } + memcpy(child->pVal->pz, tsTimezone, TSDB_TIMEZONE_LEN); + pExpr->resultType = TSDB_DATA_TYPE_BINARY; + pExpr->resultBytes = TSDB_TIMEZONE_LEN; + break; + } default: { assert(false); break; @@ -1827,4 +1863,9 @@ tScalarFunctionInfo aScalarFunctions[] = { "today", vectorTimeFunc }, + { + TSDB_FUNC_SCALAR_TIMEZONE, + "timezone", + vectorTimeFunc + }, }; -- GitLab