fill plan implement
This commit is contained in:
parent
4ff2ad2c39
commit
3b9e868e2a
|
@ -206,6 +206,12 @@ static SNode* orderByExprNodeCopy(const SOrderByExprNode* pSrc, SOrderByExprNode
|
|||
return (SNode*)pDst;
|
||||
}
|
||||
|
||||
static SNode* nodeListNodeCopy(const SNodeListNode* pSrc, SNodeListNode* pDst) {
|
||||
COPY_ALL_SCALAR_FIELDS;
|
||||
CLONE_NODE_LIST_FIELD(pNodeList);
|
||||
return (SNode*)pDst;
|
||||
}
|
||||
|
||||
static SNode* fillNodeCopy(const SFillNode* pSrc, SFillNode* pDst) {
|
||||
COPY_SCALAR_FIELD(mode);
|
||||
CLONE_NODE_FIELD(pValues);
|
||||
|
@ -360,6 +366,8 @@ SNodeptr nodesCloneNode(const SNodeptr pNode) {
|
|||
return orderByExprNodeCopy((const SOrderByExprNode*)pNode, (SOrderByExprNode*)pDst);
|
||||
case QUERY_NODE_LIMIT:
|
||||
break;
|
||||
case QUERY_NODE_NODE_LIST:
|
||||
return nodeListNodeCopy((const SNodeListNode*)pNode, (SNodeListNode*)pDst);
|
||||
case QUERY_NODE_FILL:
|
||||
return fillNodeCopy((const SFillNode*)pNode, (SFillNode*)pDst);
|
||||
case QUERY_NODE_DATABLOCK_DESC:
|
||||
|
|
|
@ -2015,6 +2015,31 @@ static int32_t jsonToNodeListNode(const SJson* pJson, void* pObj) {
|
|||
return code;
|
||||
}
|
||||
|
||||
static const char* jkFillMode = "Mode";
|
||||
static const char* jkFillValues = "Values";
|
||||
|
||||
static int32_t fillNodeToJson(const void* pObj, SJson* pJson) {
|
||||
const SFillNode* pNode = (const SFillNode*)pObj;
|
||||
|
||||
int32_t code = tjsonAddIntegerToObject(pJson, jkFillMode, pNode->mode);
|
||||
if (TSDB_CODE_SUCCESS == code) {
|
||||
code = tjsonAddObject(pJson, jkFillValues, nodeToJson, pNode->pValues);
|
||||
}
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
static int32_t jsonToFillNode(const SJson* pJson, void* pObj) {
|
||||
SFillNode* pNode = (SFillNode*)pObj;
|
||||
|
||||
int32_t code = tjsonGetNumberValue(pJson, jkFillMode, pNode->mode);
|
||||
if (TSDB_CODE_SUCCESS == code) {
|
||||
code = jsonToNodeObject(pJson, jkFillValues, &pNode->pValues);
|
||||
}
|
||||
|
||||
return code;
|
||||
}
|
||||
|
||||
static const char* jkTargetDataBlockId = "DataBlockId";
|
||||
static const char* jkTargetSlotId = "SlotId";
|
||||
static const char* jkTargetExpr = "Expr";
|
||||
|
@ -2328,6 +2353,7 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
|
|||
case QUERY_NODE_NODE_LIST:
|
||||
return nodeListNodeToJson(pObj, pJson);
|
||||
case QUERY_NODE_FILL:
|
||||
return fillNodeToJson(pObj, pJson);
|
||||
case QUERY_NODE_RAW_EXPR:
|
||||
break;
|
||||
case QUERY_NODE_TARGET:
|
||||
|
@ -2431,7 +2457,8 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
|
|||
return jsonToIntervalWindowNode(pJson, pObj);
|
||||
case QUERY_NODE_NODE_LIST:
|
||||
return jsonToNodeListNode(pJson, pObj);
|
||||
// case QUERY_NODE_FILL:
|
||||
case QUERY_NODE_FILL:
|
||||
return jsonToFillNode(pJson, pObj);
|
||||
case QUERY_NODE_TARGET:
|
||||
return jsonToTargetNode(pJson, pObj);
|
||||
// case QUERY_NODE_RAW_EXPR:
|
||||
|
|
|
@ -176,6 +176,7 @@ static SKeyword keywordTable[] = {
|
|||
{"USER", TK_USER},
|
||||
{"USERS", TK_USERS},
|
||||
{"USING", TK_USING},
|
||||
{"VALUE", TK_VALUE},
|
||||
{"VALUES", TK_VALUES},
|
||||
{"VARCHAR", TK_VARCHAR},
|
||||
{"VARIABLES", TK_VARIABLES},
|
||||
|
|
|
@ -190,10 +190,16 @@ TEST_F(PlannerTest, subquery) {
|
|||
TEST_F(PlannerTest, interval) {
|
||||
setDatabase("root", "test");
|
||||
|
||||
bind("SELECT count(*) FROM t1 interval(10s)");
|
||||
ASSERT_TRUE(run());
|
||||
// bind("SELECT count(*) FROM t1 interval(10s)");
|
||||
// ASSERT_TRUE(run());
|
||||
|
||||
bind("SELECT _wstartts, _wduration, _wendts, count(*) FROM t1 interval(10s)");
|
||||
// bind("SELECT _wstartts, _wduration, _wendts, count(*) FROM t1 interval(10s)");
|
||||
// ASSERT_TRUE(run());
|
||||
|
||||
// bind("SELECT count(*) FROM t1 interval(10s) fill(linear)");
|
||||
// ASSERT_TRUE(run());
|
||||
|
||||
bind("SELECT count(*), sum(c1) FROM t1 interval(10s) fill(value, 10, 20)");
|
||||
ASSERT_TRUE(run());
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue