Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
61cc72c1
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看板
未验证
提交
61cc72c1
编写于
4月 18, 2023
作者:
X
Xiaoyu Wang
提交者:
GitHub
4月 18, 2023
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #20961 from taosdata/enh/3.0_planner_optimize
feat: the fill value clause supports constant expressions
上级
fdbb9cce
1d2764eb
变更
3
展开全部
显示空白变更内容
内联
并排
Showing
3 changed file
with
678 addition
and
640 deletion
+678
-640
source/libs/parser/inc/sql.y
source/libs/parser/inc/sql.y
+2
-2
source/libs/parser/src/parTranslater.c
source/libs/parser/src/parTranslater.c
+18
-4
source/libs/parser/src/sql.c
source/libs/parser/src/sql.c
+658
-634
未找到文件。
source/libs/parser/inc/sql.y
浏览文件 @
61cc72c1
...
...
@@ -1047,8 +1047,8 @@ sliding_opt(A) ::= SLIDING NK_LP duration_literal(B) NK_RP.
fill_opt(A) ::= . { A = NULL; }
fill_opt(A) ::= FILL NK_LP fill_mode(B) NK_RP. { A = createFillNode(pCxt, B, NULL); }
fill_opt(A) ::= FILL NK_LP VALUE NK_COMMA
literal_list(B) NK_RP. { A = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, B)); }
fill_opt(A) ::= FILL NK_LP VALUE_F NK_COMMA
literal_list(B) NK_RP. { A = createFillNode(pCxt, FILL_MODE_VALUE_F, createNodeListNode(pCxt, B)); }
fill_opt(A) ::= FILL NK_LP VALUE NK_COMMA
expression_list(B) NK_RP. { A = createFillNode(pCxt, FILL_MODE_VALUE, createNodeListNode(pCxt, B)); }
fill_opt(A) ::= FILL NK_LP VALUE_F NK_COMMA
expression_list(B) NK_RP. { A = createFillNode(pCxt, FILL_MODE_VALUE_F, createNodeListNode(pCxt, B)); }
%type fill_mode { EFillMode }
%destructor fill_mode { }
...
...
source/libs/parser/src/parTranslater.c
浏览文件 @
61cc72c1
...
...
@@ -1310,7 +1310,8 @@ static EDealRes translateOperator(STranslateContext* pCxt, SOperatorNode* pOp) {
}
static
EDealRes
haveVectorFunction
(
SNode
*
pNode
,
void
*
pContext
)
{
if
(
isAggFunc
(
pNode
)
||
isIndefiniteRowsFunc
(
pNode
)
||
isWindowPseudoColumnFunc
(
pNode
)
||
isInterpPseudoColumnFunc
(
pNode
))
{
if
(
isAggFunc
(
pNode
)
||
isIndefiniteRowsFunc
(
pNode
)
||
isWindowPseudoColumnFunc
(
pNode
)
||
isInterpPseudoColumnFunc
(
pNode
))
{
*
((
bool
*
)
pContext
)
=
true
;
return
DEAL_RES_END
;
}
...
...
@@ -2930,6 +2931,11 @@ static int32_t convertFillValue(STranslateContext* pCxt, SDataType dt, SNodeList
if
(
TSDB_CODE_SUCCESS
==
code
)
{
code
=
scalarCalculateConstants
(
pCaseFunc
,
&
pCell
->
pNode
);
}
if
(
TSDB_CODE_SUCCESS
==
code
&&
QUERY_NODE_VALUE
!=
nodeType
(
pCell
->
pNode
))
{
code
=
generateSyntaxErrMsgExt
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
,
"Fill value is just a constant"
);
}
else
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
code
=
generateSyntaxErrMsgExt
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
,
"Filled data type mismatch"
);
}
return
code
;
}
...
...
@@ -2946,9 +2952,9 @@ static int32_t checkFillValues(STranslateContext* pCxt, SFillNode* pFill, SNodeL
if
(
fillNo
>=
LIST_LENGTH
(
pFillValues
->
pNodeList
))
{
return
generateSyntaxErrMsgExt
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
,
"Filled values number mismatch"
);
}
i
f
(
TSDB_CODE_SUCCESS
!=
convertFillValue
(
pCxt
,
((
SExprNode
*
)
pProject
)
->
resType
,
pFillValues
->
pNodeList
,
fillNo
)
)
{
return
generateSyntaxErrMsgExt
(
&
pCxt
->
msgBuf
,
TSDB_CODE_PAR_WRONG_VALUE_TYPE
,
"Filled data type mismatch"
)
;
i
nt32_t
code
=
convertFillValue
(
pCxt
,
((
SExprNode
*
)
pProject
)
->
resType
,
pFillValues
->
pNodeList
,
fillNo
);
if
(
TSDB_CODE_SUCCESS
!=
code
)
{
return
code
;
}
++
fillNo
;
}
...
...
@@ -5744,6 +5750,14 @@ static int32_t translateDropCGroup(STranslateContext* pCxt, SDropCGroupStmt* pSt
static
int32_t
translateAlterLocal
(
STranslateContext
*
pCxt
,
SAlterLocalStmt
*
pStmt
)
{
// The statement is executed directly on the client without constructing a message.
if
(
'\0'
!=
pStmt
->
value
[
0
])
{
return
TSDB_CODE_SUCCESS
;
}
char
*
p
=
strchr
(
pStmt
->
config
,
' '
);
if
(
NULL
!=
p
)
{
*
p
=
0
;
strcpy
(
pStmt
->
value
,
p
+
1
);
}
return
TSDB_CODE_SUCCESS
;
}
...
...
source/libs/parser/src/sql.c
浏览文件 @
61cc72c1
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录