Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
62e5ecd6
T
TDengine
项目概览
taosdata
/
TDengine
大约 1 年 前同步成功
通知
1184
Star
22015
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
62e5ecd6
编写于
2月 28, 2022
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feature/qnode
上级
2d58e1fe
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
83 addition
and
33 deletion
+83
-33
source/libs/scalar/src/scalar.c
source/libs/scalar/src/scalar.c
+1
-1
source/libs/scalar/test/scalar/scalarTests.cpp
source/libs/scalar/test/scalar/scalarTests.cpp
+82
-32
未找到文件。
source/libs/scalar/src/scalar.c
浏览文件 @
62e5ecd6
...
...
@@ -183,7 +183,7 @@ int32_t sclInitParam(SNode* node, SScalarParam *param, SScalarCtx *ctx, int32_t
SCL_ERR_RET
(
TSDB_CODE_QRY_INVALID_INPUT
);
}
SSDataBlock
*
block
=
taosArrayGet
(
ctx
->
pBlockList
,
ref
->
tupleId
);
SSDataBlock
*
block
=
*
(
SSDataBlock
**
)
taosArrayGet
(
ctx
->
pBlockList
,
ref
->
tupleId
);
if
(
NULL
==
block
||
ref
->
slotId
>=
taosArrayGetSize
(
block
->
pDataBlock
))
{
sclError
(
"column slotId is too big, slodId:%d, dataBlockSize:%d"
,
ref
->
slotId
,
(
int32_t
)
taosArrayGetSize
(
block
->
pDataBlock
));
...
...
source/libs/scalar/test/scalar/scalarTests.cpp
浏览文件 @
62e5ecd6
...
...
@@ -56,6 +56,35 @@ void scltInitLogFile() {
}
}
void
scltAppendReservedSlot
(
SArray
*
pBlockList
,
int16_t
*
tupleId
,
int16_t
*
slotId
,
bool
newBlock
,
int32_t
rows
,
SColumnInfo
*
colInfo
)
{
if
(
newBlock
)
{
SSDataBlock
*
res
=
(
SSDataBlock
*
)
calloc
(
1
,
sizeof
(
SSDataBlock
));
res
->
info
.
numOfCols
=
1
;
res
->
info
.
rows
=
rows
;
res
->
pDataBlock
=
taosArrayInit
(
1
,
sizeof
(
SColumnInfoData
));
SColumnInfoData
idata
=
{{
0
}};
idata
.
info
=
*
colInfo
;
taosArrayPush
(
res
->
pDataBlock
,
&
idata
);
taosArrayPush
(
pBlockList
,
&
res
);
blockDataEnsureCapacity
(
res
,
rows
);
*
tupleId
=
taosArrayGetSize
(
pBlockList
)
-
1
;
*
slotId
=
0
;
}
else
{
SSDataBlock
*
res
=
*
(
SSDataBlock
**
)
taosArrayGetLast
(
pBlockList
);
res
->
info
.
numOfCols
++
;
SColumnInfoData
idata
=
{{
0
}};
idata
.
info
=
*
colInfo
;
taosArrayPush
(
res
->
pDataBlock
,
&
idata
);
blockDataEnsureCapacity
(
res
,
rows
);
*
tupleId
=
taosArrayGetSize
(
pBlockList
)
-
1
;
*
slotId
=
taosArrayGetSize
(
res
->
pDataBlock
)
-
1
;
}
}
void
scltMakeValueNode
(
SNode
**
pNode
,
int32_t
dataType
,
void
*
value
)
{
SNode
*
node
=
nodesMakeNode
(
QUERY_NODE_VALUE
);
...
...
@@ -74,7 +103,7 @@ void scltMakeValueNode(SNode **pNode, int32_t dataType, void *value) {
*
pNode
=
(
SNode
*
)
vnode
;
}
void
scltMakeCol
Ref
Node
(
SNode
**
pNode
,
SSDataBlock
**
block
,
int32_t
dataType
,
int32_t
dataBytes
,
int32_t
rowNum
,
void
*
value
)
{
void
scltMakeCol
umn
Node
(
SNode
**
pNode
,
SSDataBlock
**
block
,
int32_t
dataType
,
int32_t
dataBytes
,
int32_t
rowNum
,
void
*
value
)
{
SNode
*
node
=
nodesMakeNode
(
QUERY_NODE_COLUMN
);
SColumnNode
*
rnode
=
(
SColumnNode
*
)
node
;
rnode
->
node
.
resType
.
type
=
dataType
;
...
...
@@ -90,7 +119,7 @@ void scltMakeColRefNode(SNode **pNode, SSDataBlock **block, int32_t dataType, in
SColumnInfoData
idata
=
{{
0
}};
idata
.
info
.
type
=
TSDB_DATA_TYPE_NULL
;
idata
.
info
.
bytes
=
10
;
idata
.
info
.
colId
=
0
;
idata
.
info
.
colId
=
i
+
1
;
int32_t
size
=
idata
.
info
.
bytes
*
rowNum
;
idata
.
pData
=
(
char
*
)
calloc
(
1
,
size
);
...
...
@@ -100,7 +129,7 @@ void scltMakeColRefNode(SNode **pNode, SSDataBlock **block, int32_t dataType, in
SColumnInfoData
idata
=
{{
0
}};
idata
.
info
.
type
=
dataType
;
idata
.
info
.
bytes
=
dataBytes
;
idata
.
info
.
colId
=
55
;
idata
.
info
.
colId
=
3
;
idata
.
pData
=
(
char
*
)
value
;
if
(
IS_VAR_DATA_TYPE
(
dataType
))
{
idata
.
varmeta
.
offset
=
(
int32_t
*
)
calloc
(
rowNum
,
sizeof
(
int32_t
));
...
...
@@ -111,7 +140,7 @@ void scltMakeColRefNode(SNode **pNode, SSDataBlock **block, int32_t dataType, in
taosArrayPush
(
res
->
pDataBlock
,
&
idata
);
rnode
->
slotId
=
2
;
rnode
->
colId
=
55
;
rnode
->
colId
=
3
;
*
block
=
res
;
}
else
{
...
...
@@ -121,12 +150,12 @@ void scltMakeColRefNode(SNode **pNode, SSDataBlock **block, int32_t dataType, in
SColumnInfoData
idata
=
{{
0
}};
idata
.
info
.
type
=
dataType
;
idata
.
info
.
bytes
=
dataBytes
;
idata
.
info
.
colId
=
55
+
idx
;
idata
.
info
.
colId
=
1
+
idx
;
idata
.
pData
=
(
char
*
)
value
;
taosArrayPush
(
res
->
pDataBlock
,
&
idata
);
rnode
->
slotId
=
idx
;
rnode
->
colId
=
55
+
idx
;
rnode
->
colId
=
1
+
idx
;
}
*
pNode
=
(
SNode
*
)
rnode
;
...
...
@@ -171,6 +200,17 @@ void scltMakeLogicNode(SNode **pNode, ELogicConditionType opType, SNode **nodeLi
*
pNode
=
(
SNode
*
)
onode
;
}
void
scltMakeTargetNode
(
SNode
**
pNode
,
int16_t
tupleId
,
int16_t
slotId
,
SNode
*
snode
)
{
SNode
*
node
=
nodesMakeNode
(
QUERY_NODE_TARGET
);
STargetNode
*
onode
=
(
STargetNode
*
)
node
;
onode
->
pExpr
=
snode
;
onode
->
tupleId
=
tupleId
;
onode
->
slotId
=
slotId
;
*
pNode
=
(
SNode
*
)
onode
;
}
}
...
...
@@ -802,22 +842,32 @@ TEST(columnTest, smallint_value_add_int_column) {
int16_t
rightv
[
5
]
=
{
0
,
-
5
,
-
4
,
23
,
100
};
double
eRes
[
5
]
=
{
1.0
,
-
4
,
-
3
,
24
,
101
};
SSDataBlock
*
src
=
NULL
;
SScalarParam
res
=
{
0
};
int32_t
rowNum
=
sizeof
(
rightv
)
/
sizeof
(
rightv
[
0
]);
scltMakeValueNode
(
&
pLeft
,
TSDB_DATA_TYPE_INT
,
&
leftv
);
scltMakeCol
Ref
Node
(
&
pRight
,
&
src
,
TSDB_DATA_TYPE_SMALLINT
,
sizeof
(
int16_t
),
rowNum
,
rightv
);
scltMakeCol
umn
Node
(
&
pRight
,
&
src
,
TSDB_DATA_TYPE_SMALLINT
,
sizeof
(
int16_t
),
rowNum
,
rightv
);
scltMakeOpNode
(
&
opNode
,
OP_TYPE_ADD
,
TSDB_DATA_TYPE_DOUBLE
,
pLeft
,
pRight
);
SArray
*
blockList
=
taosArrayInit
(
2
,
POINTER_BYTES
);
taosArrayPush
(
blockList
,
&
src
);
SColumnInfo
colInfo
=
{.
colId
=
1
,
.
type
=
TSDB_DATA_TYPE_DOUBLE
,
.
bytes
=
sizeof
(
double
)};
int16_t
tupleId
=
0
,
slotId
=
0
;
scltAppendReservedSlot
(
blockList
,
&
tupleId
,
&
slotId
,
true
,
rowNum
,
&
colInfo
);
scltMakeTargetNode
(
&
opNode
,
tupleId
,
slotId
,
opNode
);
int32_t
code
=
scalarCalculate
(
opNode
,
src
,
&
res
);
int32_t
code
=
scalarCalculate
(
opNode
,
blockList
,
NULL
);
ASSERT_EQ
(
code
,
0
);
ASSERT_EQ
(
res
.
num
,
rowNum
);
ASSERT_EQ
(
res
.
type
,
TSDB_DATA_TYPE_DOUBLE
);
ASSERT_EQ
(
res
.
bytes
,
tDataTypes
[
TSDB_DATA_TYPE_DOUBLE
].
bytes
);
SSDataBlock
*
res
=
*
(
SSDataBlock
**
)
taosArrayGetLast
(
blockList
);
ASSERT_EQ
(
res
->
info
.
rows
,
rowNum
);
SColumnInfoData
*
column
=
(
SColumnInfoData
*
)
taosArrayGetLast
(
res
->
pDataBlock
);
ASSERT_EQ
(
column
->
info
.
type
,
TSDB_DATA_TYPE_DOUBLE
);
ASSERT_EQ
(
column
->
info
.
bytes
,
tDataTypes
[
TSDB_DATA_TYPE_DOUBLE
].
bytes
);
for
(
int32_t
i
=
0
;
i
<
rowNum
;
++
i
)
{
ASSERT_EQ
(
*
((
double
*
)
res
.
data
+
i
),
eRes
[
i
]);
ASSERT_EQ
(
*
((
double
*
)
colDataGet
(
column
,
i
)
),
eRes
[
i
]);
}
}
#if 0
TEST(columnTest, bigint_column_multi_binary_column) {
SNode *pLeft = NULL, *pRight = NULL, *opNode = NULL;
int64_t leftv[5]= {1, 2, 3, 4, 5};
...
...
@@ -831,8 +881,8 @@ TEST(columnTest, bigint_column_multi_binary_column) {
SSDataBlock *src = NULL;
SScalarParam res = {0};
int32_t rowNum = sizeof(rightv)/sizeof(rightv[0]);
scltMakeCol
Ref
Node
(
&
pLeft
,
&
src
,
TSDB_DATA_TYPE_BIGINT
,
sizeof
(
int64_t
),
rowNum
,
leftv
);
scltMakeCol
Ref
Node
(
&
pRight
,
&
src
,
TSDB_DATA_TYPE_BINARY
,
5
,
rowNum
,
rightv
);
scltMakeCol
umn
Node(&pLeft, &src, TSDB_DATA_TYPE_BIGINT, sizeof(int64_t), rowNum, leftv);
scltMakeCol
umn
Node(&pRight, &src, TSDB_DATA_TYPE_BINARY, 5, rowNum, rightv);
scltMakeOpNode(&opNode, OP_TYPE_MULTI, TSDB_DATA_TYPE_DOUBLE, pLeft, pRight);
int32_t code = scalarCalculate(opNode, src, &res);
...
...
@@ -858,8 +908,8 @@ TEST(columnTest, smallint_column_and_binary_column) {
SSDataBlock *src = NULL;
SScalarParam res = {0};
int32_t rowNum = sizeof(rightv)/sizeof(rightv[0]);
scltMakeCol
Ref
Node
(
&
pLeft
,
&
src
,
TSDB_DATA_TYPE_SMALLINT
,
sizeof
(
int16_t
),
rowNum
,
leftv
);
scltMakeCol
Ref
Node
(
&
pRight
,
&
src
,
TSDB_DATA_TYPE_BINARY
,
5
,
rowNum
,
rightv
);
scltMakeCol
umn
Node(&pLeft, &src, TSDB_DATA_TYPE_SMALLINT, sizeof(int16_t), rowNum, leftv);
scltMakeCol
umn
Node(&pRight, &src, TSDB_DATA_TYPE_BINARY, 5, rowNum, rightv);
scltMakeOpNode(&opNode, OP_TYPE_BIT_AND, TSDB_DATA_TYPE_BIGINT, pLeft, pRight);
int32_t code = scalarCalculate(opNode, src, &res);
...
...
@@ -880,8 +930,8 @@ TEST(columnTest, smallint_column_or_float_column) {
SSDataBlock *src = NULL;
SScalarParam res = {0};
int32_t rowNum = sizeof(rightv)/sizeof(rightv[0]);
scltMakeCol
Ref
Node
(
&
pLeft
,
&
src
,
TSDB_DATA_TYPE_SMALLINT
,
sizeof
(
int16_t
),
rowNum
,
leftv
);
scltMakeCol
Ref
Node
(
&
pRight
,
&
src
,
TSDB_DATA_TYPE_FLOAT
,
sizeof
(
float
),
rowNum
,
rightv
);
scltMakeCol
umn
Node(&pLeft, &src, TSDB_DATA_TYPE_SMALLINT, sizeof(int16_t), rowNum, leftv);
scltMakeCol
umn
Node(&pRight, &src, TSDB_DATA_TYPE_FLOAT, sizeof(float), rowNum, rightv);
scltMakeOpNode(&opNode, OP_TYPE_BIT_OR, TSDB_DATA_TYPE_BIGINT, pLeft, pRight);
int32_t code = scalarCalculate(opNode, src, &res);
...
...
@@ -902,7 +952,7 @@ TEST(columnTest, smallint_column_or_double_value) {
SSDataBlock *src = NULL;
SScalarParam res = {0};
int32_t rowNum = sizeof(leftv)/sizeof(leftv[0]);
scltMakeCol
Ref
Node
(
&
pLeft
,
&
src
,
TSDB_DATA_TYPE_SMALLINT
,
sizeof
(
int16_t
),
rowNum
,
leftv
);
scltMakeCol
umn
Node(&pLeft, &src, TSDB_DATA_TYPE_SMALLINT, sizeof(int16_t), rowNum, leftv);
scltMakeValueNode(&pRight, TSDB_DATA_TYPE_DOUBLE, &rightv);
scltMakeOpNode(&opNode, OP_TYPE_BIT_OR, TSDB_DATA_TYPE_BIGINT, pLeft, pRight);
...
...
@@ -924,7 +974,7 @@ TEST(columnTest, smallint_column_greater_double_value) {
SSDataBlock *src = NULL;
SScalarParam res = {0};
int32_t rowNum = sizeof(leftv)/sizeof(leftv[0]);
scltMakeCol
Ref
Node
(
&
pLeft
,
&
src
,
TSDB_DATA_TYPE_SMALLINT
,
sizeof
(
int16_t
),
rowNum
,
leftv
);
scltMakeCol
umn
Node(&pLeft, &src, TSDB_DATA_TYPE_SMALLINT, sizeof(int16_t), rowNum, leftv);
scltMakeValueNode(&pRight, TSDB_DATA_TYPE_DOUBLE, &rightv);
scltMakeOpNode(&opNode, OP_TYPE_GREATER_THAN, TSDB_DATA_TYPE_BOOL, pLeft, pRight);
...
...
@@ -946,7 +996,7 @@ TEST(columnTest, int_column_in_double_list) {
SSDataBlock *src = NULL;
SScalarParam res = {0};
int32_t rowNum = sizeof(leftv)/sizeof(leftv[0]);
scltMakeCol
Ref
Node
(
&
pLeft
,
&
src
,
TSDB_DATA_TYPE_INT
,
sizeof
(
int32_t
),
rowNum
,
leftv
);
scltMakeCol
umn
Node(&pLeft, &src, TSDB_DATA_TYPE_INT, sizeof(int32_t), rowNum, leftv);
SNodeList* list = nodesMakeList();
scltMakeValueNode(&pRight, TSDB_DATA_TYPE_DOUBLE, &rightv1);
nodesListAppend(list, pRight);
...
...
@@ -994,7 +1044,7 @@ TEST(columnTest, binary_column_in_binary_list) {
}
int32_t rowNum = sizeof(leftv)/sizeof(leftv[0]);
scltMakeCol
Ref
Node
(
&
pLeft
,
&
src
,
TSDB_DATA_TYPE_BINARY
,
3
,
rowNum
,
leftv
);
scltMakeCol
umn
Node(&pLeft, &src, TSDB_DATA_TYPE_BINARY, 3, rowNum, leftv);
SNodeList* list = nodesMakeList();
scltMakeValueNode(&pRight, TSDB_DATA_TYPE_BINARY, rightv[0]);
nodesListAppend(list, pRight);
...
...
@@ -1031,7 +1081,7 @@ TEST(columnTest, binary_column_like_binary) {
}
int32_t rowNum = sizeof(leftv)/sizeof(leftv[0]);
scltMakeCol
Ref
Node
(
&
pLeft
,
&
src
,
TSDB_DATA_TYPE_BINARY
,
3
,
rowNum
,
leftv
);
scltMakeCol
umn
Node(&pLeft, &src, TSDB_DATA_TYPE_BINARY, 3, rowNum, leftv);
sprintf(&rightv[2], "%s", "__0");
varDataSetLen(rightv, strlen(&rightv[2]));
...
...
@@ -1063,7 +1113,7 @@ TEST(columnTest, binary_column_is_true) {
}
int32_t rowNum = sizeof(leftv)/sizeof(leftv[0]);
scltMakeCol
Ref
Node
(
&
pLeft
,
&
src
,
TSDB_DATA_TYPE_BINARY
,
3
,
rowNum
,
leftv
);
scltMakeCol
umn
Node(&pLeft, &src, TSDB_DATA_TYPE_BINARY, 3, rowNum, leftv);
scltMakeOpNode(&opNode, OP_TYPE_IS_TRUE, TSDB_DATA_TYPE_BOOL, pLeft, NULL);
...
...
@@ -1094,7 +1144,7 @@ TEST(columnTest, binary_column_is_null) {
setVardataNull(leftv[4], TSDB_DATA_TYPE_BINARY);
int32_t rowNum = sizeof(leftv)/sizeof(leftv[0]);
scltMakeCol
Ref
Node
(
&
pLeft
,
&
src
,
TSDB_DATA_TYPE_BINARY
,
3
,
rowNum
,
leftv
);
scltMakeCol
umn
Node(&pLeft, &src, TSDB_DATA_TYPE_BINARY, 3, rowNum, leftv);
scltMakeOpNode(&opNode, OP_TYPE_IS_NULL, TSDB_DATA_TYPE_BOOL, pLeft, NULL);
...
...
@@ -1125,7 +1175,7 @@ TEST(columnTest, binary_column_is_not_null) {
setVardataNull(leftv[4], TSDB_DATA_TYPE_BINARY);
int32_t rowNum = sizeof(leftv)/sizeof(leftv[0]);
scltMakeCol
Ref
Node
(
&
pLeft
,
&
src
,
TSDB_DATA_TYPE_BINARY
,
3
,
rowNum
,
leftv
);
scltMakeCol
umn
Node(&pLeft, &src, TSDB_DATA_TYPE_BINARY, 3, rowNum, leftv);
scltMakeOpNode(&opNode, OP_TYPE_IS_NOT_NULL, TSDB_DATA_TYPE_BOOL, pLeft, NULL);
...
...
@@ -1150,11 +1200,11 @@ TEST(columnTest, greater_and_lower) {
SSDataBlock *src = NULL;
SScalarParam res = {0};
int32_t rowNum = sizeof(v1)/sizeof(v1[0]);
scltMakeCol
Ref
Node
(
&
pcol1
,
&
src
,
TSDB_DATA_TYPE_SMALLINT
,
sizeof
(
int16_t
),
rowNum
,
v1
);
scltMakeCol
Ref
Node
(
&
pcol2
,
&
src
,
TSDB_DATA_TYPE_INT
,
sizeof
(
int16_t
),
rowNum
,
v2
);
scltMakeCol
umn
Node(&pcol1, &src, TSDB_DATA_TYPE_SMALLINT, sizeof(int16_t), rowNum, v1);
scltMakeCol
umn
Node(&pcol2, &src, TSDB_DATA_TYPE_INT, sizeof(int16_t), rowNum, v2);
scltMakeOpNode(&opNode1, OP_TYPE_GREATER_THAN, TSDB_DATA_TYPE_BOOL, pcol1, pcol2);
scltMakeCol
Ref
Node
(
&
pcol1
,
&
src
,
TSDB_DATA_TYPE_BIGINT
,
sizeof
(
int16_t
),
rowNum
,
v3
);
scltMakeCol
Ref
Node
(
&
pcol2
,
&
src
,
TSDB_DATA_TYPE_INT
,
sizeof
(
int16_t
),
rowNum
,
v4
);
scltMakeCol
umn
Node(&pcol1, &src, TSDB_DATA_TYPE_BIGINT, sizeof(int16_t), rowNum, v3);
scltMakeCol
umn
Node(&pcol2, &src, TSDB_DATA_TYPE_INT, sizeof(int16_t), rowNum, v4);
scltMakeOpNode(&opNode2, OP_TYPE_LOWER_THAN, TSDB_DATA_TYPE_BOOL, pcol1, pcol2);
list[0] = opNode1;
list[1] = opNode2;
...
...
@@ -1169,7 +1219,7 @@ TEST(columnTest, greater_and_lower) {
ASSERT_EQ(*((bool *)res.data + i), eRes[i]);
}
}
#endif
int
main
(
int
argc
,
char
**
argv
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录