Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
ada9d8bd
T
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
ada9d8bd
编写于
3月 25, 2022
作者:
X
Xiaoyu Wang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
bugfix
上级
4ebc3234
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
57 addition
and
4 deletion
+57
-4
source/libs/nodes/src/nodesCloneFuncs.c
source/libs/nodes/src/nodesCloneFuncs.c
+2
-2
source/libs/nodes/src/nodesCodeFuncs.c
source/libs/nodes/src/nodesCodeFuncs.c
+43
-2
source/libs/planner/test/plannerTest.cpp
source/libs/planner/test/plannerTest.cpp
+12
-0
未找到文件。
source/libs/nodes/src/nodesCloneFuncs.c
浏览文件 @
ada9d8bd
...
...
@@ -141,12 +141,12 @@ static SNode* valueNodeCopy(const SValueNode* pSrc, SValueNode* pDst) {
case
TSDB_DATA_TYPE_NCHAR
:
case
TSDB_DATA_TYPE_VARCHAR
:
case
TSDB_DATA_TYPE_VARBINARY
:
pDst
->
datum
.
p
=
malloc
(
pSrc
->
node
.
resType
.
bytes
+
VARSTR_HEADER_SIZE
);
pDst
->
datum
.
p
=
malloc
(
pSrc
->
node
.
resType
.
bytes
+
VARSTR_HEADER_SIZE
+
1
);
if
(
NULL
==
pDst
->
datum
.
p
)
{
nodesDestroyNode
(
pDst
);
return
NULL
;
}
memcpy
(
pDst
->
datum
.
p
,
pSrc
->
datum
.
p
,
pSrc
->
node
.
resType
.
bytes
+
VARSTR_HEADER_SIZE
);
memcpy
(
pDst
->
datum
.
p
,
pSrc
->
datum
.
p
,
pSrc
->
node
.
resType
.
bytes
+
VARSTR_HEADER_SIZE
+
1
);
break
;
case
TSDB_DATA_TYPE_JSON
:
case
TSDB_DATA_TYPE_DECIMAL
:
...
...
source/libs/nodes/src/nodesCodeFuncs.c
浏览文件 @
ada9d8bd
...
...
@@ -1807,6 +1807,45 @@ static int32_t groupingSetNodeToJson(const void* pObj, SJson* pJson) {
return
code
;
}
static
const
char
*
jkIntervalWindowInterval
=
"Interval"
;
static
const
char
*
jkIntervalWindowOffset
=
"Offset"
;
static
const
char
*
jkIntervalWindowSliding
=
"Sliding"
;
static
const
char
*
jkIntervalWindowFill
=
"Fill"
;
static
int32_t
intervalWindowNodeToJson
(
const
void
*
pObj
,
SJson
*
pJson
)
{
const
SIntervalWindowNode
*
pNode
=
(
const
SIntervalWindowNode
*
)
pObj
;
int32_t
code
=
tjsonAddObject
(
pJson
,
jkIntervalWindowInterval
,
nodeToJson
,
pNode
->
pInterval
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonAddObject
(
pJson
,
jkIntervalWindowOffset
,
nodeToJson
,
pNode
->
pOffset
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonAddObject
(
pJson
,
jkIntervalWindowSliding
,
nodeToJson
,
pNode
->
pSliding
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
tjsonAddObject
(
pJson
,
jkIntervalWindowFill
,
nodeToJson
,
pNode
->
pFill
);
}
return
code
;
}
static
int32_t
jsonToIntervalWindowNode
(
const
SJson
*
pJson
,
void
*
pObj
)
{
SIntervalWindowNode
*
pNode
=
(
SIntervalWindowNode
*
)
pObj
;
int32_t
code
=
jsonToNodeObject
(
pJson
,
jkIntervalWindowInterval
,
&
pNode
->
pInterval
);
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
jsonToNodeObject
(
pJson
,
jkIntervalWindowOffset
,
&
pNode
->
pOffset
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
jsonToNodeObject
(
pJson
,
jkIntervalWindowSliding
,
&
pNode
->
pSliding
);
}
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
jsonToNodeObject
(
pJson
,
jkIntervalWindowFill
,
&
pNode
->
pFill
);
}
return
code
;
}
static
const
char
*
jkNodeListDataType
=
"DataType"
;
static
const
char
*
jkNodeListNodeList
=
"NodeList"
;
...
...
@@ -2119,8 +2158,9 @@ static int32_t specificNodeToJson(const void* pObj, SJson* pJson) {
case
QUERY_NODE_LIMIT
:
case
QUERY_NODE_STATE_WINDOW
:
case
QUERY_NODE_SESSION_WINDOW
:
case
QUERY_NODE_INTERVAL_WINDOW
:
break
;
case
QUERY_NODE_INTERVAL_WINDOW
:
return
intervalWindowNodeToJson
(
pObj
,
pJson
);
case
QUERY_NODE_NODE_LIST
:
return
nodeListNodeToJson
(
pObj
,
pJson
);
case
QUERY_NODE_FILL
:
...
...
@@ -2222,7 +2262,8 @@ static int32_t jsonToSpecificNode(const SJson* pJson, void* pObj) {
// case QUERY_NODE_LIMIT:
// case QUERY_NODE_STATE_WINDOW:
// case QUERY_NODE_SESSION_WINDOW:
// case QUERY_NODE_INTERVAL_WINDOW:
case
QUERY_NODE_INTERVAL_WINDOW
:
return
jsonToIntervalWindowNode
(
pJson
,
pObj
);
case
QUERY_NODE_NODE_LIST
:
return
jsonToNodeListNode
(
pJson
,
pObj
);
// case QUERY_NODE_FILL:
...
...
source/libs/planner/test/plannerTest.cpp
浏览文件 @
ada9d8bd
...
...
@@ -112,6 +112,11 @@ private:
if
(
QUERY_NODE_CREATE_TOPIC_STMT
==
nodeType
(
pQuery
->
pRoot
))
{
pCxt
->
pAstRoot
=
((
SCreateTopicStmt
*
)
pQuery
->
pRoot
)
->
pQuery
;
pCxt
->
topicQuery
=
true
;
}
else
if
(
QUERY_NODE_CREATE_INDEX_STMT
==
nodeType
(
pQuery
->
pRoot
))
{
SMCreateSmaReq
req
=
{
0
};
tDeserializeSMCreateSmaReq
(
pQuery
->
pCmdMsg
->
pMsg
,
pQuery
->
pCmdMsg
->
msgLen
,
&
req
);
nodesStringToNode
(
req
.
ast
,
&
pCxt
->
pAstRoot
);
pCxt
->
streamQuery
=
true
;
}
else
{
pCxt
->
pAstRoot
=
pQuery
->
pRoot
;
}
...
...
@@ -215,3 +220,10 @@ TEST_F(PlannerTest, stream) {
bind
(
"SELECT sum(c1) FROM st1"
);
ASSERT_TRUE
(
run
(
true
));
}
TEST_F
(
PlannerTest
,
createSmaIndex
)
{
setDatabase
(
"root"
,
"test"
);
bind
(
"create sma index index1 on t1 function(max(c1), min(c3 + 10), sum(c4)) INTERVAL(10s)"
);
ASSERT_TRUE
(
run
());
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录