Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
cf524be0
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看板
提交
cf524be0
编写于
11月 24, 2021
作者:
S
shenglian zhou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
char_length function implementation
上级
6d0c9211
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
67 addition
and
2 deletion
+67
-2
src/common/inc/texpr.h
src/common/inc/texpr.h
+2
-1
src/common/src/texpr.c
src/common/src/texpr.c
+35
-1
tests/script/general/compute/scalar_str_concat_len.sim
tests/script/general/compute/scalar_str_concat_len.sim
+30
-0
未找到文件。
src/common/inc/texpr.h
浏览文件 @
cf524be0
...
...
@@ -63,7 +63,8 @@ struct SSchema;
#define TSDB_FUNC_SCALAR_CONCAT (TSDB_FUNC_FLAG_SCALAR | 0x000D)
#define TSDB_FUNC_SCALAR_LENGTH (TSDB_FUNC_FLAG_SCALAR | 0x000E)
#define TSDB_FUNC_SCALAR_CONCAT_WS (TSDB_FUNC_FLAG_SCALAR | 0x000F)
#define TSDB_FUNC_SCALAR_MAX_NUM 16
#define TSDB_FUNC_SCALAR_CHAR_LENGTH (TSDB_FUNC_FLAG_SCALAR | 0x0011)
#define TSDB_FUNC_SCALAR_MAX_NUM 17
#define TSDB_FUNC_SCALAR_NAME_MAX_LEN 16
...
...
src/common/src/texpr.c
浏览文件 @
cf524be0
...
...
@@ -55,7 +55,8 @@ int32_t exprTreeValidateFunctionNode(tExprNode *pExpr) {
case
TSDB_FUNC_SCALAR_CONCAT
:
{
return
exprValidateStringConcatNode
(
pExpr
);
}
case
TSDB_FUNC_SCALAR_LENGTH
:
{
case
TSDB_FUNC_SCALAR_LENGTH
:
case
TSDB_FUNC_SCALAR_CHAR_LENGTH
:
{
return
exprValidateStringLengthNode
(
pExpr
);
}
case
TSDB_FUNC_SCALAR_CONCAT_WS
:
{
...
...
@@ -1206,6 +1207,7 @@ void vectorConcatWs(int16_t functionId, tExprOperandInfo* pInputs, int32_t numIn
void
vectorLength
(
int16_t
functionId
,
tExprOperandInfo
*
pInputs
,
int32_t
numInputs
,
tExprOperandInfo
*
pOutput
,
int32_t
order
)
{
assert
(
functionId
==
TSDB_FUNC_SCALAR_LENGTH
&&
numInputs
==
1
&&
order
==
TSDB_ORDER_ASC
);
assert
(
IS_VAR_DATA_TYPE
(
pInputs
[
0
].
type
));
char
*
data0
=
NULL
;
char
*
outputData
=
NULL
;
...
...
@@ -1226,6 +1228,33 @@ void vectorLength(int16_t functionId, tExprOperandInfo *pInputs, int32_t numInpu
}
}
void
vectorCharLength
(
int16_t
functionId
,
tExprOperandInfo
*
pInputs
,
int32_t
numInputs
,
tExprOperandInfo
*
pOutput
,
int32_t
order
)
{
assert
(
functionId
==
TSDB_FUNC_SCALAR_CHAR_LENGTH
&&
numInputs
==
1
&&
order
==
TSDB_ORDER_ASC
);
assert
(
IS_VAR_DATA_TYPE
(
pInputs
[
0
].
type
));
char
*
data0
=
NULL
;
char
*
outputData
=
NULL
;
for
(
int32_t
i
=
0
;
i
<
pOutput
->
numOfRows
;
++
i
)
{
if
(
pInputs
[
0
].
numOfRows
==
1
)
{
data0
=
pInputs
[
0
].
data
;
}
else
{
data0
=
pInputs
[
0
].
data
+
i
*
pInputs
[
0
].
bytes
;
}
outputData
=
pOutput
->
data
+
i
*
pOutput
->
bytes
;
if
(
isNull
(
data0
,
pInputs
[
0
].
type
))
{
setNull
(
outputData
,
pOutput
->
type
,
pOutput
->
bytes
);
}
else
{
int16_t
result
=
varDataLen
(
data0
);
if
(
pInputs
[
0
].
type
==
TSDB_DATA_TYPE_BINARY
)
{
SET_TYPED_DATA
(
outputData
,
pOutput
->
type
,
result
);
}
else
if
(
pInputs
[
0
].
type
==
TSDB_DATA_TYPE_NCHAR
)
{
SET_TYPED_DATA
(
outputData
,
pOutput
->
type
,
result
/
TSDB_NCHAR_SIZE
);
}
}
}
}
void
vectorMathFunc
(
int16_t
functionId
,
tExprOperandInfo
*
pInputs
,
int32_t
numInputs
,
tExprOperandInfo
*
pOutput
,
int32_t
order
)
{
for
(
int
i
=
0
;
i
<
numInputs
;
++
i
)
{
...
...
@@ -1527,5 +1556,10 @@ tScalarFunctionInfo aScalarFunctions[] = {
TSDB_FUNC_SCALAR_CONCAT_WS
,
"concat_ws"
,
vectorConcatWs
},
{
TSDB_FUNC_SCALAR_CHAR_LENGTH
,
"char_length"
,
vectorCharLength
}
};
tests/script/general/compute/scalar_str_concat_len.sim
浏览文件 @
cf524be0
...
...
@@ -145,6 +145,13 @@ if $data00 != 8 then
return -1
endi
print sql select char_length(concat(c2, c3, c4, c5)) from $tb
sql select char_length(concat(c2, c3, c4, c5)) from $tb
print $data00
if $data00 != 8 then
return -1
endi
print sql select length(concat_ws('data',c2,c3,c4,c5)) from $tb
sql select length(concat_ws('data',c2,c3,c4,c5)) from $tb
print $data00
...
...
@@ -152,6 +159,15 @@ print $data00
if $data00 != 20 then
return -1
endi
print sql select char_length(concat_ws('data',c2,c3,c4,c5)) from $tb
sql select char_length(concat_ws('data',c2,c3,c4,c5)) from $tb
print $data00
if $data00 != 20 then
return -1
endi
print sql select length(concat(c6, c7, c8, c9)) from $tb
sql select length(concat(c6, c7, c8, c9)) from $tb
print $data00
...
...
@@ -159,6 +175,13 @@ if $data00 != 32 then
return -1
endi
print sql select char_length(concat(c6, c7, c8, c9)) from $tb
sql select char_length(concat(c6, c7, c8, c9)) from $tb
print $data00
if $data00 != 8 then
return -1
endi
print sql select length(concat_ws('data' ,c6,c7,c8,c9)) from $tb
sql select length(concat_ws('data' ,c6,c7,c8,c9)) from $tb
print $data00
...
...
@@ -167,6 +190,13 @@ if $data00 != 80 then
return -1
endi
print sql select char_length(concat_ws('data', c6,c7,c8,c9)) from $tb
sql select char_length(concat_ws('data', c6, c7, c8, c9)) from $tb
print $data00
if $data00 != 20 then
return -1
endi
print sql_error select concat(c1, c2, c3, c4, c5) from $tb
sql_error select concat(c1, c2, c3, c4, c5) from $tb
print sql_error select concat_ws('data',c1,c2,c3,c4,c5) from $tb
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录