Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
b3e7dd5a
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1193
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看板
提交
b3e7dd5a
编写于
7月 10, 2023
作者:
H
Hongze Cheng
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.0' of
https://github.com/taosdata/TDengine
into enh/tsdb_optimize
上级
f505993d
65c85b06
变更
5
显示空白变更内容
内联
并排
Showing
5 changed file
with
77 addition
and
16 deletion
+77
-16
docs/en/14-reference/12-config/index.md
docs/en/14-reference/12-config/index.md
+11
-2
docs/zh/14-reference/12-config/index.md
docs/zh/14-reference/12-config/index.md
+12
-2
source/libs/executor/src/projectoperator.c
source/libs/executor/src/projectoperator.c
+47
-11
source/libs/scalar/src/scalar.c
source/libs/scalar/src/scalar.c
+2
-1
tests/system-test/0-others/udfTest.py
tests/system-test/0-others/udfTest.py
+5
-0
未找到文件。
docs/en/14-reference/12-config/index.md
浏览文件 @
b3e7dd5a
...
...
@@ -713,6 +713,14 @@ The charset that takes effect is UTF-8.
| Value Range | 0: disable UDF; 1: enabled UDF |
| Default Value | 1 |
### ttlChangeOnWrite
| Attribute | Description |
| ------------- | ----------------------------------------------------------------------------- |
| Applicable | Server Only |
| Meaning | Whether the ttl expiration time changes with the table modification operation |
| Value Range | 0: not change; 1: change by modification |
| Default Value | 0 |
## 3.0 Parameters
...
...
@@ -770,3 +778,4 @@ The charset that takes effect is UTF-8.
| 52 | charset | Yes | Yes | |
| 53 | udf | Yes | Yes | |
| 54 | enableCoreFile | Yes | Yes | |
| 55 | ttlChangeOnWrite | No | Yes | |
docs/zh/14-reference/12-config/index.md
浏览文件 @
b3e7dd5a
...
...
@@ -717,6 +717,15 @@ charset 的有效值是 UTF-8。
| 取值范围 | 0: 不启动;1:启动 |
| 缺省值 | 1 |
### ttlChangeOnWrite
| 属性 | 说明 |
| -------- | ------------------ |
| 适用范围 | 仅服务端适用 |
| 含义 | ttl 到期时间是否伴随表的修改操作改变 |
| 取值范围 | 0: 不改变;1:改变 |
| 缺省值 | 0 |
## 压缩参数
### compressMsgSize
...
...
@@ -784,6 +793,7 @@ charset 的有效值是 UTF-8。
| 52 | charset | 是 | 是 | |
| 53 | udf | 是 | 是 | |
| 54 | enableCoreFile | 是 | 是 | |
| 55 | ttlChangeOnWrite | 否 | 是 | |
## 2.x->3.0 的废弃参数
...
...
source/libs/executor/src/projectoperator.c
浏览文件 @
b3e7dd5a
...
...
@@ -38,7 +38,7 @@ typedef struct SIndefOperatorInfo {
SSDataBlock
*
pNextGroupRes
;
}
SIndefOperatorInfo
;
static
SSDataBlock
*
doGenerateSourceData
(
SOperatorInfo
*
pOperator
);
static
int32_t
doGenerateSourceData
(
SOperatorInfo
*
pOperator
);
static
SSDataBlock
*
doProjectOperation
(
SOperatorInfo
*
pOperator
);
static
SSDataBlock
*
doApplyIndefinitFunction
(
SOperatorInfo
*
pOperator
);
static
SArray
*
setRowTsColumnOutputInfo
(
SqlFunctionCtx
*
pCtx
,
int32_t
numOfCols
);
...
...
@@ -267,7 +267,12 @@ SSDataBlock* doProjectOperation(SOperatorInfo* pOperator) {
SLimitInfo
*
pLimitInfo
=
&
pProjectInfo
->
limitInfo
;
if
(
downstream
==
NULL
)
{
return
doGenerateSourceData
(
pOperator
);
code
=
doGenerateSourceData
(
pOperator
);
if
(
code
!=
TSDB_CODE_SUCCESS
)
{
T_LONG_JMP
(
pTaskInfo
->
env
,
code
);
}
return
(
pRes
->
info
.
rows
>
0
)
?
pRes
:
NULL
;
}
while
(
1
)
{
...
...
@@ -616,7 +621,7 @@ SArray* setRowTsColumnOutputInfo(SqlFunctionCtx* pCtx, int32_t numOfCols) {
return
pList
;
}
SSDataBlock
*
doGenerateSourceData
(
SOperatorInfo
*
pOperator
)
{
int32_t
doGenerateSourceData
(
SOperatorInfo
*
pOperator
)
{
SProjectOperatorInfo
*
pProjectInfo
=
pOperator
->
info
;
SExprSupp
*
pSup
=
&
pOperator
->
exprSupp
;
...
...
@@ -630,7 +635,7 @@ 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
);
if
(
pExpr
[
k
].
pExpr
->
nodeType
==
QUERY_NODE_VALUE
)
{
SColumnInfoData
*
pColInfoData
=
taosArrayGet
(
pRes
->
pDataBlock
,
outputSlotId
);
int32_t
type
=
pExpr
[
k
].
base
.
pParam
[
0
].
param
.
nType
;
...
...
@@ -639,6 +644,37 @@ SSDataBlock* doGenerateSourceData(SOperatorInfo* pOperator) {
}
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
];
// UDF scalar functions will be calculated here, for example, select foo(n) from (select 1 n).
// UDF aggregate functions will be handled in agg operator.
if
(
fmIsScalarFunc
(
pfCtx
->
functionId
))
{
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
code
;
}
int32_t
startOffset
=
pRes
->
info
.
rows
;
ASSERT
(
pRes
->
info
.
capacity
>
0
);
colDataAssign
(
pResColData
,
&
idata
,
dest
.
numOfRows
,
&
pRes
->
info
);
colDataDestroy
(
&
idata
);
taosArrayDestroy
(
pBlockList
);
}
else
{
return
TSDB_CODE_OPS_NOT_SUPPORT
;
}
}
else
{
return
TSDB_CODE_OPS_NOT_SUPPORT
;
}
}
pRes
->
info
.
rows
=
1
;
...
...
@@ -653,7 +689,7 @@ SSDataBlock* doGenerateSourceData(SOperatorInfo* pOperator) {
pOperator
->
cost
.
openCost
=
(
taosGetTimestampUs
()
-
st
)
/
1000
.
0
;
}
return
(
pRes
->
info
.
rows
>
0
)
?
pRes
:
NULL
;
return
TSDB_CODE_SUCCESS
;
}
static
void
setPseudoOutputColInfo
(
SSDataBlock
*
pResult
,
SqlFunctionCtx
*
pCtx
,
SArray
*
pPseudoList
)
{
...
...
source/libs/scalar/src/scalar.c
浏览文件 @
b3e7dd5a
...
...
@@ -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
);
...
...
tests/system-test/0-others/udfTest.py
浏览文件 @
b3e7dd5a
...
...
@@ -234,6 +234,11 @@ class TDTestCase:
tdSql
.
checkData
(
20
,
6
,
88
)
tdSql
.
checkData
(
20
,
7
,
1
)
tdSql
.
query
(
"select udf1(1) from (select 1)"
)
tdSql
.
checkData
(
0
,
0
,
1
)
tdSql
.
query
(
"select udf1(n) from (select 1 n)"
)
tdSql
.
checkData
(
0
,
0
,
1
)
# aggregate functions
tdSql
.
query
(
"select udf2(num1) ,udf2(num2), udf2(num3) from tb"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录