Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
cfa925dd
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,发现更多精彩内容 >>
提交
cfa925dd
编写于
7月 26, 2021
作者:
W
wpan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
support range filter
上级
8ed28fd8
变更
4
展开全部
显示空白变更内容
内联
并排
Showing
4 changed file
with
58 addition
and
2412 deletion
+58
-2412
src/query/inc/qFilter.h
src/query/inc/qFilter.h
+4
-2
src/query/src/qExecutor.c
src/query/src/qExecutor.c
+1
-1
src/query/src/qFilter.c
src/query/src/qFilter.c
+22
-14
tests/script/general/parser/condition.sim
tests/script/general/parser/condition.sim
+31
-2395
未找到文件。
src/query/inc/qFilter.h
浏览文件 @
cfa925dd
...
...
@@ -22,6 +22,7 @@ extern "C" {
#include "texpr.h"
#include "hash.h"
#include "tname.h"
#define FILTER_DEFAULT_GROUP_SIZE 4
#define FILTER_DEFAULT_UNIT_SIZE 4
...
...
@@ -91,14 +92,14 @@ typedef struct SFilterColRange {
SFilterRange
ra
;
}
SFilterColRange
;
typedef
bool
(
*
rangeCompFunc
)
(
const
void
*
,
const
void
*
,
const
void
*
,
const
void
*
,
__compar_fn_t
);
typedef
struct
SFilterRangeCompare
{
int64_t
s
;
int64_t
e
;
rangeCompFunc
func
;
}
SFilterRangeCompare
;
typedef
bool
(
*
rangeCompFunc
)
(
const
void
*
,
const
void
*
,
const
void
*
,
const
void
*
,
__compar_fn_t
);
typedef
struct
SFilterRangeNode
{
struct
SFilterRangeNode
*
prev
;
struct
SFilterRangeNode
*
next
;
...
...
@@ -294,6 +295,7 @@ extern int32_t filterConverNcharColumns(SFilterInfo* pFilterInfo, int32_t rows,
extern
int32_t
filterFreeNcharColumns
(
SFilterInfo
*
pFilterInfo
);
extern
void
filterFreeInfo
(
SFilterInfo
*
info
);
extern
bool
filterIsEmptyRes
(
SFilterInfo
*
info
);
extern
bool
filterRangeExecute
(
SFilterInfo
*
info
,
SDataStatis
*
pDataStatis
,
int32_t
numOfCols
,
int32_t
numOfRows
);
#ifdef __cplusplus
}
...
...
src/query/src/qExecutor.c
浏览文件 @
cfa925dd
...
...
@@ -2402,7 +2402,7 @@ static FORCE_INLINE bool doFilterByBlockStatistics(SQueryRuntimeEnv* pRuntimeEnv
return
true
;
}
return
filterRangeExecute
(
pQueryAttr
->
pFilters
,
pDataStatis
,
numOfRows
);
return
filterRangeExecute
(
pQueryAttr
->
pFilters
,
pDataStatis
,
pQueryAttr
->
numOfCols
,
numOfRows
);
}
static
bool
overlapWithTimeWindow
(
SQueryAttr
*
pQueryAttr
,
SDataBlockInfo
*
pBlockInfo
)
{
...
...
src/query/src/qFilter.c
浏览文件 @
cfa925dd
...
...
@@ -57,28 +57,28 @@ filter_desc_compare_func gDescCompare [FLD_TYPE_MAX] = {
filterFieldValDescCompare
};
bool
filterRangeCompGi
(
const
char
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
bool
filterRangeCompGi
(
const
void
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
return
cfunc
(
maxv
,
minr
)
>=
0
;
}
bool
filterRangeCompGe
(
const
char
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
bool
filterRangeCompGe
(
const
void
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
return
cfunc
(
maxv
,
minr
)
>
0
;
}
bool
filterRangeCompLi
(
const
char
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
bool
filterRangeCompLi
(
const
void
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
return
cfunc
(
minv
,
maxr
)
<=
0
;
}
bool
filterRangeCompLe
(
const
char
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
bool
filterRangeCompLe
(
const
void
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
return
cfunc
(
minv
,
maxr
)
<
0
;
}
bool
filterRangeCompii
(
const
char
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
bool
filterRangeCompii
(
const
void
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
return
cfunc
(
maxv
,
minr
)
>=
0
&&
cfunc
(
minv
,
maxr
)
<=
0
;
}
bool
filterRangeCompee
(
const
char
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
bool
filterRangeCompee
(
const
void
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
return
cfunc
(
maxv
,
minr
)
>
0
&&
cfunc
(
minv
,
maxr
)
<
0
;
}
bool
filterRangeCompei
(
const
char
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
bool
filterRangeCompei
(
const
void
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
return
cfunc
(
maxv
,
minr
)
>
0
&&
cfunc
(
minv
,
maxr
)
<=
0
;
}
bool
filterRangeCompie
(
const
char
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
bool
filterRangeCompie
(
const
void
*
minv
,
const
void
*
maxv
,
const
void
*
minr
,
const
void
*
maxr
,
__compar_fn_t
cfunc
)
{
return
cfunc
(
maxv
,
minr
)
>=
0
&&
cfunc
(
minv
,
maxr
)
<
0
;
}
...
...
@@ -1823,6 +1823,7 @@ int32_t filterRewrite(SFilterInfo *info, SFilterGroupCtx** gRes, int32_t gResNum
}
SFilterInfo
oinfo
=
*
info
;
SArray
*
group
=
taosArrayInit
(
FILTER_DEFAULT_GROUP_SIZE
,
sizeof
(
SFilterGroup
));
SFilterGroupCtx
*
res
=
NULL
;
SFilterColInfo
*
colInfo
=
NULL
;
...
...
@@ -1830,6 +1831,10 @@ int32_t filterRewrite(SFilterInfo *info, SFilterGroupCtx** gRes, int32_t gResNum
uint16_t
uidx
=
0
;
memset
(
info
,
0
,
sizeof
(
*
info
));
info
->
colRangeNum
=
oinfo
.
colRangeNum
;
info
->
colRange
=
oinfo
.
colRange
;
oinfo
.
colRangeNum
=
0
;
oinfo
.
colRange
=
NULL
;
FILTER_SET_FLAG
(
info
->
options
,
FI_OPTION_NEED_UNIQE
);
...
...
@@ -1993,14 +1998,14 @@ int32_t filterPreprocess(SFilterInfo *info) {
return
TSDB_CODE_SUCCESS
;
}
filterRewrite
(
info
,
gRes
,
gResNum
);
filterGenerateColRange
(
info
,
gRes
,
gResNum
);
filterDumpInfoToString
(
info
,
"Final"
,
1
);
filterPostProcessRange
(
info
);
filterRewrite
(
info
,
gRes
,
gResNum
);
return
TSDB_CODE_SUCCESS
;
}
...
...
@@ -2179,7 +2184,7 @@ bool filterRangeExecute(SFilterInfo *info, SDataStatis *pDataStatis, int32_t num
}
// not support pre-filter operation on binary/nchar data type
if
(
!
IS_PREFILTER
_TYPE
(
ctx
->
type
))
{
if
(
FILTER_NO_MERGE_DATA
_TYPE
(
ctx
->
type
))
{
return
true
;
}
...
...
@@ -2200,7 +2205,7 @@ bool filterRangeExecute(SFilterInfo *info, SDataStatis *pDataStatis, int32_t num
SDataStatis
*
pDataBlockst
=
&
pDataStatis
[
index
];
SFilterRangeNode
r
=
ctx
->
rs
;
SFilterRangeNode
*
r
=
ctx
->
rs
;
if
(
ctx
->
type
==
TSDB_DATA_TYPE_FLOAT
)
{
float
minv
=
(
float
)(
*
(
double
*
)(
&
pDataBlockst
->
min
));
...
...
@@ -2215,10 +2220,13 @@ bool filterRangeExecute(SFilterInfo *info, SDataStatis *pDataStatis, int32_t num
while
(
r
)
{
ret
=
r
->
rc
.
func
(
minVal
,
maxVal
,
&
r
->
rc
.
s
,
&
r
->
rc
.
e
,
ctx
->
pCompareFunc
);
CHK_RET
(
!
ret
,
ret
);
if
(
ret
)
{
break
;
}
r
=
r
->
next
;
}
CHK_RET
(
!
ret
,
ret
);
}
return
ret
;
...
...
tests/script/general/parser/condition.sim
浏览文件 @
cfa925dd
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录