提交 e6485830 编写于 作者: G Ganlin Zhao

[TD-11220]<feature>(query): time related functions

上级 d0bb521a
...@@ -67,7 +67,8 @@ struct SSchema; ...@@ -67,7 +67,8 @@ struct SSchema;
#define TSDB_FUNC_SCALAR_CAST (TSDB_FUNC_FLAG_SCALAR | 0x0011) #define TSDB_FUNC_SCALAR_CAST (TSDB_FUNC_FLAG_SCALAR | 0x0011)
#define TSDB_FUNC_SCALAR_NOW (TSDB_FUNC_FLAG_SCALAR | 0x0012) #define TSDB_FUNC_SCALAR_NOW (TSDB_FUNC_FLAG_SCALAR | 0x0012)
#define TSDB_FUNC_SCALAR_TODAY (TSDB_FUNC_FLAG_SCALAR | 0x0013) #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 #define TSDB_FUNC_SCALAR_NAME_MAX_LEN 16
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "tarray.h" #include "tarray.h"
#include "tbuffer.h" #include "tbuffer.h"
#include "tcompare.h" #include "tcompare.h"
#include "tglobal.h"
#include "tsdb.h" #include "tsdb.h"
#include "tskiplist.h" #include "tskiplist.h"
#include "texpr.h" #include "texpr.h"
...@@ -78,8 +79,9 @@ int32_t exprTreeValidateFunctionNode(char* msgbuf, tExprNode *pExpr) { ...@@ -78,8 +79,9 @@ int32_t exprTreeValidateFunctionNode(char* msgbuf, tExprNode *pExpr) {
case TSDB_FUNC_SCALAR_CONCAT_WS: { case TSDB_FUNC_SCALAR_CONCAT_WS: {
return exprValidateStringConcatWsNode(pExpr); return exprValidateStringConcatWsNode(pExpr);
} }
case TSDB_FUNC_SCALAR_NOW:
case TSDB_FUNC_SCALAR_TODAY: case TSDB_FUNC_SCALAR_TODAY:
case TSDB_FUNC_SCALAR_NOW: { case TSDB_FUNC_SCALAR_TIMEZONE: {
return exprValidateTimeNode(pExpr); return exprValidateTimeNode(pExpr);
} }
...@@ -1195,6 +1197,40 @@ int32_t exprValidateTimeNode(tExprNode *pExpr) { ...@@ -1195,6 +1197,40 @@ int32_t exprValidateTimeNode(tExprNode *pExpr) {
pExpr->resultBytes = (int16_t)tDataTypes[pExpr->resultType].bytes; pExpr->resultBytes = (int16_t)tDataTypes[pExpr->resultType].bytes;
break; 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: { default: {
assert(false); assert(false);
break; break;
...@@ -1827,4 +1863,9 @@ tScalarFunctionInfo aScalarFunctions[] = { ...@@ -1827,4 +1863,9 @@ tScalarFunctionInfo aScalarFunctions[] = {
"today", "today",
vectorTimeFunc vectorTimeFunc
}, },
{
TSDB_FUNC_SCALAR_TIMEZONE,
"timezone",
vectorTimeFunc
},
}; };
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册