Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
b7345063
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看板
提交
b7345063
编写于
7月 06, 2023
作者:
G
Ganlin Zhao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
enh: add procedures on server for udf/udaf in nested queries where outer query is
constant table
上级
85782bbf
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
54 addition
and
8 deletion
+54
-8
source/libs/executor/src/projectoperator.c
source/libs/executor/src/projectoperator.c
+52
-7
source/libs/scalar/src/scalar.c
source/libs/scalar/src/scalar.c
+2
-1
未找到文件。
source/libs/executor/src/projectoperator.c
浏览文件 @
b7345063
...
...
@@ -630,14 +630,59 @@ SSDataBlock* doGenerateSourceData(SOperatorInfo* pOperator) {
for
(
int32_t
k
=
0
;
k
<
pSup
->
numOfExprs
;
++
k
)
{
int32_t
outputSlotId
=
pExpr
[
k
].
base
.
resSchema
.
slotId
;
ASSERT
(
pExpr
[
k
].
pExpr
->
nodeType
==
QUERY_NODE_VALUE
);
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pRes
->
pDataBlock
,
outputSlotId
);
if
(
pExpr
[
k
].
pExpr
->
nodeType
==
QUERY_NODE_VALUE
)
{
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pRes
->
pDataBlock
,
outputSlotId
);
int32_t
type
=
pExpr
[
k
].
base
.
pParam
[
0
].
param
.
nType
;
if
(
TSDB_DATA_TYPE_NULL
==
type
)
{
colDataSetNNULL
(
pColInfoData
,
0
,
1
);
}
else
{
colDataSetVal
(
pColInfoData
,
0
,
taosVariantGet
(
&
pExpr
[
k
].
base
.
pParam
[
0
].
param
,
type
),
false
);
int32_t
type
=
pExpr
[
k
].
base
.
pParam
[
0
].
param
.
nType
;
if
(
TSDB_DATA_TYPE_NULL
==
type
)
{
colDataSetNNULL
(
pColInfoData
,
0
,
1
);
}
else
{
colDataSetVal
(
pColInfoData
,
0
,
taosVariantGet
(
&
pExpr
[
k
].
base
.
pParam
[
0
].
param
,
type
),
false
);
}
}
else
if
(
pExpr
[
k
].
pExpr
->
nodeType
==
QUERY_NODE_FUNCTION
)
{
SqlFunctionCtx
*
pfCtx
=
&
pSup
->
pCtx
[
k
];
if
(
fmIsAggFunc
(
pfCtx
->
functionId
))
{
// selective value output should be set during corresponding function execution
if
(
fmIsSelectValueFunc
(
pfCtx
->
functionId
))
{
continue
;
}
SColumnInfoData
*
pOutput
=
taosArrayGet
(
pRes
->
pDataBlock
,
outputSlotId
);
int32_t
slotId
=
pfCtx
->
param
[
0
].
pCol
->
slotId
;
// todo handle the json tag
//SColumnInfoData* pInput = taosArrayGet(pSrcBlock->pDataBlock, slotId);
//for (int32_t f = 0; f < pSrcBlock->info.rows; ++f) {
// bool isNull = colDataIsNull_s(pInput, f);
// if (isNull) {
// colDataSetNULL(pOutput, pRes->info.rows + f);
// } else {
// char* data = colDataGetData(pInput, f);
// colDataSetVal(pOutput, pRes->info.rows + f, data, isNull);
// }
//}
}
else
{
SArray
*
pBlockList
=
taosArrayInit
(
4
,
POINTER_BYTES
);
taosArrayPush
(
pBlockList
,
&
pRes
);
SColumnInfoData
*
pResColData
=
taosArrayGet
(
pRes
->
pDataBlock
,
outputSlotId
);
SColumnInfoData
idata
=
{.
info
=
pResColData
->
info
,
.
hasNull
=
true
};
SScalarParam
dest
=
{.
columnData
=
&
idata
};
int32_t
code
=
scalarCalculate
((
SNode
*
)
pExpr
[
k
].
pExpr
->
_function
.
pFunctNode
,
pBlockList
,
&
dest
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
taosArrayDestroy
(
pBlockList
);
return
NULL
;
}
int32_t
startOffset
=
pRes
->
info
.
rows
;
ASSERT
(
pRes
->
info
.
capacity
>
0
);
colDataMergeCol
(
pResColData
,
startOffset
,
(
int32_t
*
)
&
pRes
->
info
.
capacity
,
&
idata
,
dest
.
numOfRows
);
colDataDestroy
(
&
idata
);
taosArrayDestroy
(
pBlockList
);
}
}
}
...
...
source/libs/scalar/src/scalar.c
浏览文件 @
b7345063
...
...
@@ -1694,7 +1694,8 @@ int32_t scalarCalculate(SNode *pNode, SArray *pBlockList, SScalarParam *pDst) {
SCL_ERR_JRET
(
TSDB_CODE_APP_ERROR
);
}
if
(
1
==
res
->
numOfRows
)
{
SSDataBlock
*
pb
=
taosArrayGetP
(
pBlockList
,
0
);
if
(
1
==
res
->
numOfRows
&&
pb
->
info
.
rows
>
0
)
{
SCL_ERR_JRET
(
sclExtendResRows
(
pDst
,
res
,
pBlockList
));
}
else
{
colInfoDataEnsureCapacity
(
pDst
->
columnData
,
res
->
numOfRows
,
true
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录