Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
0526e5a6
T
TDengine
项目概览
taosdata
/
TDengine
接近 2 年 前同步成功
通知
1192
Star
22018
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看板
提交
0526e5a6
编写于
2月 24, 2022
作者:
D
dapan1121
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feature/qnode
上级
fe1b4dcd
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
336 addition
and
7 deletion
+336
-7
source/libs/scalar/src/filter.c
source/libs/scalar/src/filter.c
+7
-1
source/libs/scalar/test/filter/filterTests.cpp
source/libs/scalar/test/filter/filterTests.cpp
+329
-6
未找到文件。
source/libs/scalar/src/filter.c
浏览文件 @
0526e5a6
...
...
@@ -3505,7 +3505,7 @@ EDealRes fltReviseRewriter(SNode** pNode, void* pContext) {
if
(
NULL
==
node
->
pRight
)
{
if
(
scalarGetOperatorParamNum
(
node
->
opType
)
>
1
)
{
fltError
(
"invalid operator, pRight:%p,
type:%d"
,
node
->
pRight
,
nodeType
(
node
)
);
fltError
(
"invalid operator, pRight:%p,
nodeType:%d, opType:%d"
,
node
->
pRight
,
nodeType
(
node
),
node
->
opType
);
stat
->
code
=
TSDB_CODE_QRY_APP_ERROR
;
return
DEAL_RES_ERROR
;
}
...
...
@@ -3514,6 +3514,12 @@ EDealRes fltReviseRewriter(SNode** pNode, void* pContext) {
stat
->
scalarMode
=
true
;
return
DEAL_RES_CONTINUE
;
}
if
(
OP_TYPE_IS_TRUE
==
node
->
opType
||
OP_TYPE_IS_FALSE
==
node
->
opType
||
OP_TYPE_IS_UNKNOWN
==
node
->
opType
||
OP_TYPE_IS_NOT_TRUE
==
node
->
opType
||
OP_TYPE_IS_NOT_FALSE
==
node
->
opType
||
OP_TYPE_IS_NOT_UNKNOWN
==
node
->
opType
)
{
stat
->
scalarMode
=
true
;
return
DEAL_RES_CONTINUE
;
}
}
else
{
if
((
QUERY_NODE_COLUMN_REF
!=
nodeType
(
node
->
pLeft
))
&&
(
QUERY_NODE_VALUE
!=
nodeType
(
node
->
pLeft
)))
{
stat
->
scalarMode
=
true
;
...
...
source/libs/scalar/test/filter/filterTests.cpp
浏览文件 @
0526e5a6
...
...
@@ -135,6 +135,8 @@ void flttMakeColRefNode(SNode **pNode, SSDataBlock **block, int32_t dataType, in
idata
.
info
.
colId
=
55
+
idx
;
idata
.
pData
=
(
char
*
)
value
;
taosArrayPush
(
res
->
pDataBlock
,
&
idata
);
res
->
info
.
numOfCols
++
;
rnode
->
slotId
=
idx
;
rnode
->
columnId
=
55
+
idx
;
...
...
@@ -171,6 +173,17 @@ void flttMakeLogicNode(SNode **pNode, ELogicConditionType opType, SNode **nodeLi
*
pNode
=
(
SNode
*
)
onode
;
}
void
flttMakeLogicNodeFromList
(
SNode
**
pNode
,
ELogicConditionType
opType
,
SNodeList
*
nodeList
)
{
SNode
*
node
=
nodesMakeNode
(
QUERY_NODE_LOGIC_CONDITION
);
SLogicConditionNode
*
onode
=
(
SLogicConditionNode
*
)
node
;
onode
->
condType
=
opType
;
onode
->
node
.
resType
.
type
=
TSDB_DATA_TYPE_BOOL
;
onode
->
node
.
resType
.
bytes
=
sizeof
(
bool
);
onode
->
pParameterList
=
nodeList
;
*
pNode
=
(
SNode
*
)
onode
;
}
void
flttMakeListNode
(
SNode
**
pNode
,
SNodeList
*
list
,
int32_t
resType
)
{
SNode
*
node
=
nodesMakeNode
(
QUERY_NODE_NODE_LIST
);
...
...
@@ -570,8 +583,6 @@ TEST(columnTest, binary_column_is_not_null) {
TEST
(
opTest
,
smallint_column_greater_int_column
)
{
flttInitLogFile
();
SNode
*
pLeft
=
NULL
,
*
pRight
=
NULL
,
*
opNode
=
NULL
;
int16_t
leftv
[
5
]
=
{
1
,
-
6
,
-
2
,
11
,
101
};
int32_t
rightv
[
5
]
=
{
0
,
-
5
,
-
4
,
23
,
100
};
...
...
@@ -830,20 +841,332 @@ TEST(opTest, binary_column_is_true) {
}
}
#if 0
TEST
(
filterModelogicTest
,
diff_columns_and_or_and
)
{
SNode
*
pLeft1
=
NULL
,
*
pRight1
=
NULL
,
*
pLeft2
=
NULL
,
*
pRight2
=
NULL
,
*
opNode1
=
NULL
,
*
opNode2
=
NULL
;
SNode
*
logicNode1
=
NULL
,
*
logicNode2
=
NULL
;
double
leftv1
[
8
]
=
{
1
,
2
,
3
,
4
,
5
,
-
1
,
-
2
,
-
3
},
leftv2
[
8
]
=
{
3.0
,
4
,
2
,
9
,
-
3
,
3.9
,
4.1
,
5.2
};
int32_t
rightv1
=
3
,
rightv2
=
3
;
int8_t
eRes
[
8
]
=
{
1
,
1
,
0
,
0
,
1
,
1
,
1
,
1
};
SSDataBlock
*
src
=
NULL
;
SNodeList
*
list
=
nodesMakeList
();
int32_t
rowNum
=
sizeof
(
leftv1
)
/
sizeof
(
leftv1
[
0
]);
flttMakeColRefNode
(
&
pLeft1
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv1
);
flttMakeValueNode
(
&
pRight1
,
TSDB_DATA_TYPE_INT
,
&
rightv1
);
flttMakeOpNode
(
&
opNode1
,
OP_TYPE_GREATER_THAN
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight1
);
nodesListAppend
(
list
,
opNode1
);
flttMakeColRefNode
(
&
pLeft2
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv2
);
flttMakeValueNode
(
&
pRight2
,
TSDB_DATA_TYPE_INT
,
&
rightv2
);
flttMakeOpNode
(
&
opNode2
,
OP_TYPE_LOWER_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft2
,
pRight2
);
nodesListAppend
(
list
,
opNode2
);
flttMakeLogicNodeFromList
(
&
logicNode1
,
LOGIC_COND_TYPE_AND
,
list
);
list
=
nodesMakeList
();
flttMakeColRefNode
(
&
pLeft1
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv1
);
flttMakeValueNode
(
&
pRight1
,
TSDB_DATA_TYPE_INT
,
&
rightv1
);
flttMakeOpNode
(
&
opNode1
,
OP_TYPE_LOWER_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight1
);
nodesListAppend
(
list
,
opNode1
);
flttMakeColRefNode
(
&
pLeft2
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv2
);
flttMakeValueNode
(
&
pRight2
,
TSDB_DATA_TYPE_INT
,
&
rightv2
);
flttMakeOpNode
(
&
opNode2
,
OP_TYPE_GREATER_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft2
,
pRight2
);
nodesListAppend
(
list
,
opNode2
);
flttMakeLogicNodeFromList
(
&
logicNode2
,
LOGIC_COND_TYPE_AND
,
list
);
list
=
nodesMakeList
();
nodesListAppend
(
list
,
logicNode1
);
nodesListAppend
(
list
,
logicNode2
);
flttMakeLogicNodeFromList
(
&
logicNode1
,
LOGIC_COND_TYPE_OR
,
list
);
SFilterInfo
*
filter
=
NULL
;
int32_t
code
=
filterInitFromNode
(
logicNode1
,
&
filter
,
0
);
ASSERT_EQ
(
code
,
0
);
SColumnDataAgg
stat
=
{
0
};
SFilterColumnParam
param
=
{.
numOfCols
=
src
->
info
.
numOfCols
,
.
pDataBlock
=
src
->
pDataBlock
};
code
=
filterSetDataFromSlotId
(
filter
,
&
param
);
ASSERT_EQ
(
code
,
0
);
stat
.
max
=
5
;
stat
.
min
=
1
;
stat
.
numOfNull
=
0
;
int8_t
*
rowRes
=
NULL
;
bool
keep
=
filterExecute
(
filter
,
src
,
&
rowRes
,
&
stat
,
src
->
info
.
numOfCols
);
ASSERT_EQ
(
keep
,
false
);
for
(
int32_t
i
=
0
;
i
<
rowNum
;
++
i
)
{
ASSERT_EQ
(
*
((
int8_t
*
)
rowRes
+
i
),
eRes
[
i
]);
}
}
TEST
(
filterModelogicTest
,
same_column_and_or_and
)
{
SNode
*
pLeft1
=
NULL
,
*
pRight1
=
NULL
,
*
pLeft2
=
NULL
,
*
pRight2
=
NULL
,
*
opNode1
=
NULL
,
*
opNode2
=
NULL
;
SNode
*
logicNode1
=
NULL
,
*
logicNode2
=
NULL
;
double
leftv1
[
8
]
=
{
1
,
2
,
3
,
4
,
5
,
-
1
,
-
2
,
-
3
};
int32_t
rightv1
=
3
,
rightv2
=
0
,
rightv3
=
2
,
rightv4
=
-
2
;
int8_t
eRes
[
8
]
=
{
1
,
1
,
0
,
0
,
0
,
1
,
1
,
0
};
SSDataBlock
*
src
=
NULL
;
SNodeList
*
list
=
nodesMakeList
();
int32_t
rowNum
=
sizeof
(
leftv1
)
/
sizeof
(
leftv1
[
0
]);
flttMakeColRefNode
(
&
pLeft1
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv1
);
flttMakeValueNode
(
&
pRight1
,
TSDB_DATA_TYPE_INT
,
&
rightv1
);
flttMakeOpNode
(
&
opNode1
,
OP_TYPE_GREATER_THAN
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight1
);
nodesListAppend
(
list
,
opNode1
);
flttMakeValueNode
(
&
pRight2
,
TSDB_DATA_TYPE_INT
,
&
rightv2
);
flttMakeOpNode
(
&
opNode2
,
OP_TYPE_LOWER_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight2
);
nodesListAppend
(
list
,
opNode2
);
flttMakeLogicNodeFromList
(
&
logicNode1
,
LOGIC_COND_TYPE_AND
,
list
);
list
=
nodesMakeList
();
flttMakeValueNode
(
&
pRight1
,
TSDB_DATA_TYPE_INT
,
&
rightv3
);
flttMakeOpNode
(
&
opNode1
,
OP_TYPE_LOWER_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight1
);
nodesListAppend
(
list
,
opNode1
);
flttMakeValueNode
(
&
pRight2
,
TSDB_DATA_TYPE_INT
,
&
rightv4
);
flttMakeOpNode
(
&
opNode2
,
OP_TYPE_GREATER_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight2
);
nodesListAppend
(
list
,
opNode2
);
flttMakeLogicNodeFromList
(
&
logicNode2
,
LOGIC_COND_TYPE_AND
,
list
);
list
=
nodesMakeList
();
nodesListAppend
(
list
,
logicNode1
);
nodesListAppend
(
list
,
logicNode2
);
flttMakeLogicNodeFromList
(
&
logicNode1
,
LOGIC_COND_TYPE_OR
,
list
);
SFilterInfo
*
filter
=
NULL
;
int32_t
code
=
filterInitFromNode
(
logicNode1
,
&
filter
,
0
);
ASSERT_EQ
(
code
,
0
);
SColumnDataAgg
stat
=
{
0
};
SFilterColumnParam
param
=
{.
numOfCols
=
src
->
info
.
numOfCols
,
.
pDataBlock
=
src
->
pDataBlock
};
code
=
filterSetDataFromSlotId
(
filter
,
&
param
);
ASSERT_EQ
(
code
,
0
);
stat
.
max
=
5
;
stat
.
min
=
1
;
stat
.
numOfNull
=
0
;
int8_t
*
rowRes
=
NULL
;
bool
keep
=
filterExecute
(
filter
,
src
,
&
rowRes
,
&
stat
,
src
->
info
.
numOfCols
);
ASSERT_EQ
(
keep
,
false
);
for
(
int32_t
i
=
0
;
i
<
rowNum
;
++
i
)
{
ASSERT_EQ
(
*
((
int8_t
*
)
rowRes
+
i
),
eRes
[
i
]);
}
}
TEST
(
filterModelogicTest
,
diff_columns_or_and_or
)
{
SNode
*
pLeft1
=
NULL
,
*
pRight1
=
NULL
,
*
pLeft2
=
NULL
,
*
pRight2
=
NULL
,
*
opNode1
=
NULL
,
*
opNode2
=
NULL
;
SNode
*
logicNode1
=
NULL
,
*
logicNode2
=
NULL
;
double
leftv1
[
8
]
=
{
1
,
2
,
3
,
4
,
5
,
-
1
,
-
2
,
-
3
},
leftv2
[
8
]
=
{
3.0
,
4
,
2
,
9
,
-
3
,
3.9
,
4.1
,
5.2
};
int32_t
rightv1
=
3
,
rightv2
=
3
;
int8_t
eRes
[
8
]
=
{
1
,
0
,
1
,
1
,
0
,
0
,
0
,
0
};
SSDataBlock
*
src
=
NULL
;
SNodeList
*
list
=
nodesMakeList
();
int32_t
rowNum
=
sizeof
(
leftv1
)
/
sizeof
(
leftv1
[
0
]);
flttMakeColRefNode
(
&
pLeft1
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv1
);
flttMakeValueNode
(
&
pRight1
,
TSDB_DATA_TYPE_INT
,
&
rightv1
);
flttMakeOpNode
(
&
opNode1
,
OP_TYPE_GREATER_THAN
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight1
);
nodesListAppend
(
list
,
opNode1
);
flttMakeColRefNode
(
&
pLeft2
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv2
);
flttMakeValueNode
(
&
pRight2
,
TSDB_DATA_TYPE_INT
,
&
rightv2
);
flttMakeOpNode
(
&
opNode2
,
OP_TYPE_LOWER_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft2
,
pRight2
);
nodesListAppend
(
list
,
opNode2
);
flttMakeLogicNodeFromList
(
&
logicNode1
,
LOGIC_COND_TYPE_OR
,
list
);
list
=
nodesMakeList
();
flttMakeColRefNode
(
&
pLeft1
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv1
);
flttMakeValueNode
(
&
pRight1
,
TSDB_DATA_TYPE_INT
,
&
rightv1
);
flttMakeOpNode
(
&
opNode1
,
OP_TYPE_LOWER_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight1
);
nodesListAppend
(
list
,
opNode1
);
flttMakeColRefNode
(
&
pLeft2
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv2
);
flttMakeValueNode
(
&
pRight2
,
TSDB_DATA_TYPE_INT
,
&
rightv2
);
flttMakeOpNode
(
&
opNode2
,
OP_TYPE_GREATER_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft2
,
pRight2
);
nodesListAppend
(
list
,
opNode2
);
flttMakeLogicNodeFromList
(
&
logicNode2
,
LOGIC_COND_TYPE_OR
,
list
);
list
=
nodesMakeList
();
nodesListAppend
(
list
,
logicNode1
);
nodesListAppend
(
list
,
logicNode2
);
flttMakeLogicNodeFromList
(
&
logicNode1
,
LOGIC_COND_TYPE_AND
,
list
);
TEST(logicTest, and_or_and) {
SFilterInfo
*
filter
=
NULL
;
int32_t
code
=
filterInitFromNode
(
logicNode1
,
&
filter
,
0
);
ASSERT_EQ
(
code
,
0
);
SColumnDataAgg
stat
=
{
0
};
SFilterColumnParam
param
=
{.
numOfCols
=
src
->
info
.
numOfCols
,
.
pDataBlock
=
src
->
pDataBlock
};
code
=
filterSetDataFromSlotId
(
filter
,
&
param
);
ASSERT_EQ
(
code
,
0
);
stat
.
max
=
5
;
stat
.
min
=
1
;
stat
.
numOfNull
=
0
;
int8_t
*
rowRes
=
NULL
;
bool
keep
=
filterExecute
(
filter
,
src
,
&
rowRes
,
&
stat
,
src
->
info
.
numOfCols
);
ASSERT_EQ
(
keep
,
false
);
for
(
int32_t
i
=
0
;
i
<
rowNum
;
++
i
)
{
ASSERT_EQ
(
*
((
int8_t
*
)
rowRes
+
i
),
eRes
[
i
]);
}
}
TEST(logicTest, or_and_or) {
TEST
(
filterModelogicTest
,
same_column_or_and_or
)
{
SNode
*
pLeft1
=
NULL
,
*
pRight1
=
NULL
,
*
pLeft2
=
NULL
,
*
pRight2
=
NULL
,
*
opNode1
=
NULL
,
*
opNode2
=
NULL
;
SNode
*
logicNode1
=
NULL
,
*
logicNode2
=
NULL
;
double
leftv1
[
8
]
=
{
1
,
2
,
3
,
4
,
5
,
-
1
,
-
2
,
-
3
};
int32_t
rightv1
=
3
,
rightv2
=
0
,
rightv3
=
2
,
rightv4
=
-
2
;
int8_t
eRes
[
8
]
=
{
0
,
0
,
0
,
1
,
1
,
1
,
1
,
1
};
SSDataBlock
*
src
=
NULL
;
SNodeList
*
list
=
nodesMakeList
();
int32_t
rowNum
=
sizeof
(
leftv1
)
/
sizeof
(
leftv1
[
0
]);
flttMakeColRefNode
(
&
pLeft1
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv1
);
flttMakeValueNode
(
&
pRight1
,
TSDB_DATA_TYPE_INT
,
&
rightv1
);
flttMakeOpNode
(
&
opNode1
,
OP_TYPE_GREATER_THAN
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight1
);
nodesListAppend
(
list
,
opNode1
);
flttMakeValueNode
(
&
pRight2
,
TSDB_DATA_TYPE_INT
,
&
rightv2
);
flttMakeOpNode
(
&
opNode2
,
OP_TYPE_LOWER_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight2
);
nodesListAppend
(
list
,
opNode2
);
flttMakeLogicNodeFromList
(
&
logicNode1
,
LOGIC_COND_TYPE_OR
,
list
);
list
=
nodesMakeList
();
flttMakeValueNode
(
&
pRight1
,
TSDB_DATA_TYPE_INT
,
&
rightv3
);
flttMakeOpNode
(
&
opNode1
,
OP_TYPE_LOWER_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight1
);
nodesListAppend
(
list
,
opNode1
);
flttMakeValueNode
(
&
pRight2
,
TSDB_DATA_TYPE_INT
,
&
rightv4
);
flttMakeOpNode
(
&
opNode2
,
OP_TYPE_GREATER_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight2
);
nodesListAppend
(
list
,
opNode2
);
flttMakeLogicNodeFromList
(
&
logicNode2
,
LOGIC_COND_TYPE_OR
,
list
);
list
=
nodesMakeList
();
nodesListAppend
(
list
,
logicNode1
);
nodesListAppend
(
list
,
logicNode2
);
flttMakeLogicNodeFromList
(
&
logicNode1
,
LOGIC_COND_TYPE_AND
,
list
);
SFilterInfo
*
filter
=
NULL
;
int32_t
code
=
filterInitFromNode
(
logicNode1
,
&
filter
,
0
);
ASSERT_EQ
(
code
,
0
);
SColumnDataAgg
stat
=
{
0
};
SFilterColumnParam
param
=
{.
numOfCols
=
src
->
info
.
numOfCols
,
.
pDataBlock
=
src
->
pDataBlock
};
code
=
filterSetDataFromSlotId
(
filter
,
&
param
);
ASSERT_EQ
(
code
,
0
);
stat
.
max
=
5
;
stat
.
min
=
1
;
stat
.
numOfNull
=
0
;
int8_t
*
rowRes
=
NULL
;
bool
keep
=
filterExecute
(
filter
,
src
,
&
rowRes
,
&
stat
,
src
->
info
.
numOfCols
);
ASSERT_EQ
(
keep
,
false
);
for
(
int32_t
i
=
0
;
i
<
rowNum
;
++
i
)
{
ASSERT_EQ
(
*
((
int8_t
*
)
rowRes
+
i
),
eRes
[
i
]);
}
}
#endif
TEST
(
scalarModelogicTest
,
diff_columns_or_and_or
)
{
flttInitLogFile
();
SNode
*
pLeft1
=
NULL
,
*
pRight1
=
NULL
,
*
pLeft2
=
NULL
,
*
pRight2
=
NULL
,
*
opNode1
=
NULL
,
*
opNode2
=
NULL
;
SNode
*
logicNode1
=
NULL
,
*
logicNode2
=
NULL
;
double
leftv1
[
8
]
=
{
1
,
2
,
3
,
4
,
5
,
-
1
,
-
2
,
-
3
},
leftv2
[
8
]
=
{
3.0
,
4
,
2
,
9
,
-
3
,
3.9
,
4.1
,
5.2
};
int32_t
rightv1
[
8
]
=
{
5
,
8
,
2
,
-
3
,
9
,
-
7
,
10
,
0
},
rightv2
[
8
]
=
{
-
3
,
5
,
8
,
2
,
-
9
,
11
,
-
4
,
0
};
int8_t
eRes
[
8
]
=
{
0
,
1
,
1
,
0
,
0
,
1
,
0
,
0
};
SSDataBlock
*
src
=
NULL
;
SNodeList
*
list
=
nodesMakeList
();
int32_t
rowNum
=
sizeof
(
leftv1
)
/
sizeof
(
leftv1
[
0
]);
flttMakeColRefNode
(
&
pLeft1
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv1
);
flttMakeColRefNode
(
&
pRight1
,
&
src
,
TSDB_DATA_TYPE_INT
,
sizeof
(
int32_t
),
rowNum
,
rightv1
);
flttMakeOpNode
(
&
opNode1
,
OP_TYPE_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight1
);
nodesListAppend
(
list
,
opNode1
);
flttMakeColRefNode
(
&
pLeft2
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv2
);
flttMakeColRefNode
(
&
pRight2
,
&
src
,
TSDB_DATA_TYPE_INT
,
sizeof
(
int32_t
),
rowNum
,
rightv2
);
flttMakeOpNode
(
&
opNode2
,
OP_TYPE_LOWER_THAN
,
TSDB_DATA_TYPE_BOOL
,
pLeft2
,
pRight2
);
nodesListAppend
(
list
,
opNode2
);
flttMakeLogicNodeFromList
(
&
logicNode1
,
LOGIC_COND_TYPE_OR
,
list
);
list
=
nodesMakeList
();
flttMakeColRefNode
(
&
pLeft1
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv1
);
flttMakeColRefNode
(
&
pRight1
,
&
src
,
TSDB_DATA_TYPE_INT
,
sizeof
(
int32_t
),
rowNum
,
rightv1
);
flttMakeOpNode
(
&
opNode1
,
OP_TYPE_GREATER_THAN
,
TSDB_DATA_TYPE_BOOL
,
pLeft1
,
pRight1
);
nodesListAppend
(
list
,
opNode1
);
flttMakeColRefNode
(
&
pLeft2
,
&
src
,
TSDB_DATA_TYPE_DOUBLE
,
sizeof
(
double
),
rowNum
,
leftv2
);
flttMakeColRefNode
(
&
pRight2
,
&
src
,
TSDB_DATA_TYPE_INT
,
sizeof
(
int32_t
),
rowNum
,
rightv2
);
flttMakeOpNode
(
&
opNode2
,
OP_TYPE_LOWER_EQUAL
,
TSDB_DATA_TYPE_BOOL
,
pLeft2
,
pRight2
);
nodesListAppend
(
list
,
opNode2
);
flttMakeLogicNodeFromList
(
&
logicNode2
,
LOGIC_COND_TYPE_OR
,
list
);
list
=
nodesMakeList
();
nodesListAppend
(
list
,
logicNode1
);
nodesListAppend
(
list
,
logicNode2
);
flttMakeLogicNodeFromList
(
&
logicNode1
,
LOGIC_COND_TYPE_AND
,
list
);
SFilterInfo
*
filter
=
NULL
;
int32_t
code
=
filterInitFromNode
(
logicNode1
,
&
filter
,
0
);
ASSERT_EQ
(
code
,
0
);
SColumnDataAgg
stat
=
{
0
};
SFilterColumnParam
param
=
{.
numOfCols
=
src
->
info
.
numOfCols
,
.
pDataBlock
=
src
->
pDataBlock
};
code
=
filterSetDataFromSlotId
(
filter
,
&
param
);
ASSERT_EQ
(
code
,
0
);
stat
.
max
=
5
;
stat
.
min
=
1
;
stat
.
numOfNull
=
0
;
int8_t
*
rowRes
=
NULL
;
bool
keep
=
filterExecute
(
filter
,
src
,
&
rowRes
,
&
stat
,
src
->
info
.
numOfCols
);
ASSERT_EQ
(
keep
,
false
);
for
(
int32_t
i
=
0
;
i
<
rowNum
;
++
i
)
{
ASSERT_EQ
(
*
((
int8_t
*
)
rowRes
+
i
),
eRes
[
i
]);
}
}
int
main
(
int
argc
,
char
**
argv
)
{
srand
(
time
(
NULL
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录