Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
ef0365eb
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
ef0365eb
编写于
4月 24, 2022
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feature/qnode
上级
d16a2e27
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
86 addition
and
17 deletion
+86
-17
source/libs/qworker/src/qworkerMsg.c
source/libs/qworker/src/qworkerMsg.c
+1
-1
source/libs/scalar/inc/sclInt.h
source/libs/scalar/inc/sclInt.h
+3
-0
source/libs/scalar/src/scalar.c
source/libs/scalar/src/scalar.c
+82
-16
未找到文件。
source/libs/qworker/src/qworkerMsg.c
浏览文件 @
ef0365eb
...
@@ -339,7 +339,7 @@ int32_t qwRegisterHbBrokenLinkArg(SQWorkerMgmt *mgmt, uint64_t sId, SQWConnInfo
...
@@ -339,7 +339,7 @@ int32_t qwRegisterHbBrokenLinkArg(SQWorkerMgmt *mgmt, uint64_t sId, SQWConnInfo
.
ahandle
=
pConn
->
ahandle
,
.
ahandle
=
pConn
->
ahandle
,
.
msgType
=
TDMT_VND_QUERY_HEARTBEAT
,
.
msgType
=
TDMT_VND_QUERY_HEARTBEAT
,
.
pCont
=
msg
,
.
pCont
=
msg
,
.
contLen
=
sizeof
(
SSchedulerHbReq
)
,
.
contLen
=
msgSize
,
.
code
=
TSDB_CODE_RPC_NETWORK_UNAVAIL
,
.
code
=
TSDB_CODE_RPC_NETWORK_UNAVAIL
,
};
};
...
...
source/libs/scalar/inc/sclInt.h
浏览文件 @
ef0365eb
...
@@ -32,6 +32,9 @@ typedef struct SScalarCtx {
...
@@ -32,6 +32,9 @@ typedef struct SScalarCtx {
#define SCL_DATA_TYPE_DUMMY_HASH 9000
#define SCL_DATA_TYPE_DUMMY_HASH 9000
#define SCL_DEFAULT_OP_NUM 10
#define SCL_DEFAULT_OP_NUM 10
#define SCL_IS_CONST_NODE(_node) ((NULL == (_node)) || (QUERY_NODE_VALUE == (_node)->type))
#define SCL_IS_CONST_CALC(_ctx) (NULL == (_ctx)->pBlockList)
#define sclFatal(...) qFatal(__VA_ARGS__)
#define sclFatal(...) qFatal(__VA_ARGS__)
#define sclError(...) qError(__VA_ARGS__)
#define sclError(...) qError(__VA_ARGS__)
#define sclWarn(...) qWarn(__VA_ARGS__)
#define sclWarn(...) qWarn(__VA_ARGS__)
...
...
source/libs/scalar/src/scalar.c
浏览文件 @
ef0365eb
...
@@ -246,21 +246,53 @@ int32_t sclInitParam(SNode* node, SScalarParam *param, SScalarCtx *ctx, int32_t
...
@@ -246,21 +246,53 @@ int32_t sclInitParam(SNode* node, SScalarParam *param, SScalarCtx *ctx, int32_t
int32_t
sclInitParamList
(
SScalarParam
**
pParams
,
SNodeList
*
pParamList
,
SScalarCtx
*
ctx
,
int32_t
*
rowNum
)
{
int32_t
sclInitParamList
(
SScalarParam
**
pParams
,
SNodeList
*
pParamList
,
SScalarCtx
*
ctx
,
int32_t
*
rowNum
)
{
int32_t
code
=
0
;
int32_t
code
=
0
;
SScalarParam
*
paramList
=
taosMemoryCalloc
(
pParamList
->
length
,
sizeof
(
SScalarParam
));
int32_t
paramNum
=
0
;
if
(
NULL
==
pParamList
)
{
if
(
ctx
->
pBlockList
)
{
SSDataBlock
*
pBlock
=
taosArrayGet
(
ctx
->
pBlockList
,
0
);
*
rowNum
=
pBlock
->
info
.
rows
;
}
else
{
*
rowNum
=
1
;
}
paramNum
=
1
;
}
else
{
paramNum
=
pParamList
->
length
;
}
SScalarParam
*
paramList
=
taosMemoryCalloc
(
paramNum
,
sizeof
(
SScalarParam
));
if
(
NULL
==
paramList
)
{
if
(
NULL
==
paramList
)
{
sclError
(
"calloc %d failed"
,
(
int32_t
)(
p
ParamList
->
length
*
sizeof
(
SScalarParam
)));
sclError
(
"calloc %d failed"
,
(
int32_t
)(
p
aramNum
*
sizeof
(
SScalarParam
)));
SCL_ERR_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
SCL_ERR_RET
(
TSDB_CODE_QRY_OUT_OF_MEMORY
);
}
}
SListCell
*
cell
=
pParamList
->
pHead
;
if
(
pParamList
)
{
for
(
int32_t
i
=
0
;
i
<
pParamList
->
length
;
++
i
)
{
SNode
*
tnode
=
NULL
;
if
(
NULL
==
cell
||
NULL
==
cell
->
pNode
)
{
int32_t
i
=
0
;
sclError
(
"invalid cell, cell:%p, pNode:%p"
,
cell
,
cell
->
pNode
);
if
(
SCL_IS_CONST_CALC
(
ctx
))
{
SCL_ERR_JRET
(
TSDB_CODE_QRY_INVALID_INPUT
);
WHERE_EACH
(
tnode
,
pParamList
)
{
if
(
!
SCL_IS_CONST_NODE
(
tnode
))
{
continue
;
}
else
{
SCL_ERR_JRET
(
sclInitParam
(
tnode
,
&
paramList
[
i
],
ctx
,
rowNum
));
ERASE_NODE
(
pParamList
);
}
}
SCL_ERR_JRET
(
sclInitParam
(
cell
->
pNode
,
&
paramList
[
i
],
ctx
,
rowNum
));
++
i
;
cell
=
cell
->
pNext
;
WHERE_NEXT
;
}
}
else
{
FOREACH
(
tnode
,
pParamList
)
{
SCL_ERR_JRET
(
sclInitParam
(
tnode
,
&
paramList
[
i
],
ctx
,
rowNum
));
++
i
;
}
}
}
else
{
paramList
[
0
].
numOfRows
=
*
rowNum
;
}
if
(
0
==
*
rowNum
)
{
taosMemoryFreeClear
(
paramList
);
}
}
*
pParams
=
paramList
;
*
pParams
=
paramList
;
...
@@ -299,11 +331,6 @@ _return:
...
@@ -299,11 +331,6 @@ _return:
}
}
int32_t
sclExecFunction
(
SFunctionNode
*
node
,
SScalarCtx
*
ctx
,
SScalarParam
*
output
)
{
int32_t
sclExecFunction
(
SFunctionNode
*
node
,
SScalarCtx
*
ctx
,
SScalarParam
*
output
)
{
if
(
NULL
==
node
->
pParameterList
||
node
->
pParameterList
->
length
<=
0
)
{
sclError
(
"invalid function parameter list, list:%p, paramNum:%d"
,
node
->
pParameterList
,
node
->
pParameterList
?
node
->
pParameterList
->
length
:
0
);
SCL_ERR_RET
(
TSDB_CODE_QRY_INVALID_INPUT
);
}
SScalarFuncExecFuncs
ffpSet
=
{
0
};
SScalarFuncExecFuncs
ffpSet
=
{
0
};
int32_t
code
=
fmGetScalarFuncExecFuncs
(
node
->
funcId
,
&
ffpSet
);
int32_t
code
=
fmGetScalarFuncExecFuncs
(
node
->
funcId
,
&
ffpSet
);
if
(
code
)
{
if
(
code
)
{
...
@@ -357,6 +384,10 @@ int32_t sclExecLogic(SLogicConditionNode *node, SScalarCtx *ctx, SScalarParam *o
...
@@ -357,6 +384,10 @@ int32_t sclExecLogic(SLogicConditionNode *node, SScalarCtx *ctx, SScalarParam *o
int32_t
rowNum
=
0
;
int32_t
rowNum
=
0
;
int32_t
code
=
0
;
int32_t
code
=
0
;
SCL_ERR_RET
(
sclInitParamList
(
&
params
,
node
->
pParameterList
,
ctx
,
&
rowNum
));
SCL_ERR_RET
(
sclInitParamList
(
&
params
,
node
->
pParameterList
,
ctx
,
&
rowNum
));
if
(
NULL
==
params
)
{
output
->
numOfRows
=
0
;
return
TSDB_CODE_SUCCESS
;
}
int32_t
type
=
node
->
node
.
resType
.
type
;
int32_t
type
=
node
->
node
.
resType
.
type
;
output
->
numOfRows
=
rowNum
;
output
->
numOfRows
=
rowNum
;
...
@@ -369,14 +400,20 @@ int32_t sclExecLogic(SLogicConditionNode *node, SScalarCtx *ctx, SScalarParam *o
...
@@ -369,14 +400,20 @@ int32_t sclExecLogic(SLogicConditionNode *node, SScalarCtx *ctx, SScalarParam *o
}
}
bool
value
=
false
;
bool
value
=
false
;
bool
complete
=
false
;
for
(
int32_t
i
=
0
;
i
<
rowNum
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
rowNum
;
++
i
)
{
for
(
int32_t
m
=
0
;
m
<
node
->
pParameterList
->
length
;
++
m
)
{
for
(
int32_t
m
=
0
;
m
<
node
->
pParameterList
->
length
;
++
m
)
{
if
(
NULL
==
params
[
m
].
columnData
)
{
continue
;
}
char
*
p
=
colDataGetData
(
params
[
m
].
columnData
,
i
);
char
*
p
=
colDataGetData
(
params
[
m
].
columnData
,
i
);
GET_TYPED_DATA
(
value
,
bool
,
params
[
m
].
columnData
->
info
.
type
,
p
);
GET_TYPED_DATA
(
value
,
bool
,
params
[
m
].
columnData
->
info
.
type
,
p
);
if
(
LOGIC_COND_TYPE_AND
==
node
->
condType
&&
(
false
==
value
))
{
if
(
LOGIC_COND_TYPE_AND
==
node
->
condType
&&
(
false
==
value
))
{
complete
=
true
;
break
;
break
;
}
else
if
(
LOGIC_COND_TYPE_OR
==
node
->
condType
&&
value
)
{
}
else
if
(
LOGIC_COND_TYPE_OR
==
node
->
condType
&&
value
)
{
complete
=
true
;
break
;
break
;
}
else
if
(
LOGIC_COND_TYPE_NOT
==
node
->
condType
)
{
}
else
if
(
LOGIC_COND_TYPE_NOT
==
node
->
condType
)
{
value
=
!
value
;
value
=
!
value
;
...
@@ -386,7 +423,13 @@ int32_t sclExecLogic(SLogicConditionNode *node, SScalarCtx *ctx, SScalarParam *o
...
@@ -386,7 +423,13 @@ int32_t sclExecLogic(SLogicConditionNode *node, SScalarCtx *ctx, SScalarParam *o
colDataAppend
(
output
->
columnData
,
i
,
(
char
*
)
&
value
,
false
);
colDataAppend
(
output
->
columnData
,
i
,
(
char
*
)
&
value
,
false
);
}
}
if
(
SCL_IS_CONST_CALC
(
ctx
)
&&
(
false
==
complete
))
{
sclFreeParam
(
output
);
output
->
numOfRows
=
0
;
}
_return:
_return:
for
(
int32_t
i
=
0
;
i
<
node
->
pParameterList
->
length
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
node
->
pParameterList
->
length
;
++
i
)
{
// sclFreeParamNoData(params + i);
// sclFreeParamNoData(params + i);
}
}
...
@@ -426,6 +469,17 @@ _return:
...
@@ -426,6 +469,17 @@ _return:
EDealRes
sclRewriteFunction
(
SNode
**
pNode
,
SScalarCtx
*
ctx
)
{
EDealRes
sclRewriteFunction
(
SNode
**
pNode
,
SScalarCtx
*
ctx
)
{
SFunctionNode
*
node
=
(
SFunctionNode
*
)
*
pNode
;
SFunctionNode
*
node
=
(
SFunctionNode
*
)
*
pNode
;
SNode
*
tnode
=
NULL
;
if
(
fmIsUserDefinedFunc
(
node
->
funcId
))
{
return
DEAL_RES_CONTINUE
;
}
FOREACH
(
tnode
,
node
->
pParameterList
)
{
if
(
!
SCL_IS_CONST_NODE
(
tnode
))
{
return
DEAL_RES_CONTINUE
;
}
}
SScalarParam
output
=
{
0
};
SScalarParam
output
=
{
0
};
ctx
->
code
=
sclExecFunction
(
node
,
ctx
,
&
output
);
ctx
->
code
=
sclExecFunction
(
node
,
ctx
,
&
output
);
...
@@ -470,6 +524,10 @@ EDealRes sclRewriteLogic(SNode** pNode, SScalarCtx *ctx) {
...
@@ -470,6 +524,10 @@ EDealRes sclRewriteLogic(SNode** pNode, SScalarCtx *ctx) {
return
DEAL_RES_ERROR
;
return
DEAL_RES_ERROR
;
}
}
if
(
0
==
output
.
numOfRows
)
{
return
DEAL_RES_CONTINUE
;
}
SValueNode
*
res
=
(
SValueNode
*
)
nodesMakeNode
(
QUERY_NODE_VALUE
);
SValueNode
*
res
=
(
SValueNode
*
)
nodesMakeNode
(
QUERY_NODE_VALUE
);
if
(
NULL
==
res
)
{
if
(
NULL
==
res
)
{
sclError
(
"make value node failed"
);
sclError
(
"make value node failed"
);
...
@@ -498,6 +556,14 @@ EDealRes sclRewriteLogic(SNode** pNode, SScalarCtx *ctx) {
...
@@ -498,6 +556,14 @@ EDealRes sclRewriteLogic(SNode** pNode, SScalarCtx *ctx) {
EDealRes
sclRewriteOperator
(
SNode
**
pNode
,
SScalarCtx
*
ctx
)
{
EDealRes
sclRewriteOperator
(
SNode
**
pNode
,
SScalarCtx
*
ctx
)
{
SOperatorNode
*
node
=
(
SOperatorNode
*
)
*
pNode
;
SOperatorNode
*
node
=
(
SOperatorNode
*
)
*
pNode
;
if
(
!
SCL_IS_CONST_NODE
(
node
->
pLeft
))
{
return
DEAL_RES_CONTINUE
;
}
if
(
!
SCL_IS_CONST_NODE
(
node
->
pRight
))
{
return
DEAL_RES_CONTINUE
;
}
SScalarParam
output
=
{.
columnData
=
taosMemoryCalloc
(
1
,
sizeof
(
SColumnInfoData
))};
SScalarParam
output
=
{.
columnData
=
taosMemoryCalloc
(
1
,
sizeof
(
SColumnInfoData
))};
ctx
->
code
=
sclExecOperator
(
node
,
ctx
,
&
output
);
ctx
->
code
=
sclExecOperator
(
node
,
ctx
,
&
output
);
if
(
ctx
->
code
)
{
if
(
ctx
->
code
)
{
...
@@ -530,7 +596,7 @@ EDealRes sclRewriteOperator(SNode** pNode, SScalarCtx *ctx) {
...
@@ -530,7 +596,7 @@ EDealRes sclRewriteOperator(SNode** pNode, SScalarCtx *ctx) {
}
}
EDealRes
sclConstantsRewriter
(
SNode
**
pNode
,
void
*
pContext
)
{
EDealRes
sclConstantsRewriter
(
SNode
**
pNode
,
void
*
pContext
)
{
if
(
QUERY_NODE_VALUE
==
nodeType
(
*
pNode
)
||
QUERY_NODE_NODE_LIST
==
nodeType
(
*
pNode
))
{
if
(
QUERY_NODE_VALUE
==
nodeType
(
*
pNode
)
||
QUERY_NODE_
COLUMN
==
nodeType
(
*
pNode
)
||
QUERY_NODE_
NODE_LIST
==
nodeType
(
*
pNode
))
{
return
DEAL_RES_CONTINUE
;
return
DEAL_RES_CONTINUE
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录