Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
d4a509e5
TDengine
项目概览
taosdata
/
TDengine
1 年多 前同步成功
通知
1185
Star
22016
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看板
提交
d4a509e5
编写于
1月 17, 2022
作者:
S
shenglian zhou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
(query):code prototyping, histogram function
上级
fa94faeb
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
116 addition
and
0 deletion
+116
-0
src/query/inc/qAggMain.h
src/query/inc/qAggMain.h
+1
-0
src/query/src/qAggMain.c
src/query/src/qAggMain.c
+115
-0
未找到文件。
src/query/inc/qAggMain.h
浏览文件 @
d4a509e5
...
...
@@ -77,6 +77,7 @@ extern "C" {
#define TSDB_FUNC_BLKINFO 36
#define TSDB_FUNC_ELAPSED 37
#define TSDB_FUNC_HISTOGRAM 38
///////////////////////////////////////////
// the following functions is not implemented.
...
...
src/query/src/qAggMain.c
浏览文件 @
d4a509e5
...
...
@@ -210,6 +210,17 @@ typedef struct {
};
}
SDiffFuncInfo
;
typedef
struct
{
double
lower
;
// >lower
double
upper
;
// <=upper
int64_t
count
;
}
SHistogramFuncBin
;
typedef
struct
{
int32_t
numOfBins
;
SHistogramFuncBin
*
orderedBins
;
}
SHistogramFuncInfo
;
int32_t
getResultDataInfo
(
int32_t
dataType
,
int32_t
dataBytes
,
int32_t
functionId
,
int32_t
param
,
int16_t
*
type
,
int32_t
*
bytes
,
int32_t
*
interBytes
,
int16_t
extLength
,
bool
isSuperTable
,
SUdfInfo
*
pUdfInfo
)
{
if
(
!
isValidDataType
(
dataType
))
{
...
...
@@ -4802,6 +4813,9 @@ static void sample_func_finalizer(SQLFunctionCtx *pCtx) {
doFinalizer
(
pCtx
);
}
//////////////////////////////////////////////////////////////////////////////////
// elapsed function
static
SElapsedInfo
*
getSElapsedInfo
(
SQLFunctionCtx
*
pCtx
)
{
if
(
pCtx
->
stableQuery
&&
pCtx
->
currentStage
!=
MERGE_STAGE
)
{
return
(
SElapsedInfo
*
)
pCtx
->
pOutput
;
...
...
@@ -4917,6 +4931,96 @@ static void elapsedFinalizer(SQLFunctionCtx *pCtx) {
doFinalizer
(
pCtx
);
}
//////////////////////////////////////////////////////////////////////////////////
// histogram function
static
SHistogramFuncInfo
*
getHistogramFuncOutputInfo
(
SQLFunctionCtx
*
pCtx
)
{
SResultRowCellInfo
*
pResInfo
=
GET_RES_INFO
(
pCtx
);
// only the first_stage stable is directly written data into final output buffer
if
(
pCtx
->
stableQuery
&&
pCtx
->
currentStage
!=
MERGE_STAGE
)
{
return
(
SHistogramFuncInfo
*
)
pCtx
->
pOutput
;
}
else
{
// during normal table query and super table at the secondary_stage, result is written to intermediate buffer
return
GET_ROWCELL_INTERBUF
(
pResInfo
);
}
}
static
bool
histogram_function_setup
(
SQLFunctionCtx
*
pCtx
,
SResultRowCellInfo
*
pResInfo
)
{
if
(
!
function_setup
(
pCtx
,
pResInfo
))
{
return
false
;
}
SHistogramFuncInfo
*
pRes
=
getHistogramFuncOutputInfo
(
pCtx
);
if
(
!
pRes
)
{
return
false
;
}
double
*
listBin
=
(
double
*
)
pCtx
->
param
[
0
].
pz
;
int32_t
numOfBins
=
pCtx
->
param
[
0
].
nLen
/
sizeof
(
double
)
-
1
;
pRes
->
orderedBins
=
(
SHistogramFuncBin
*
)((
char
*
)
pRes
+
sizeof
(
SHistogramFuncInfo
));
for
(
int32_t
i
=
0
;
i
<
numOfBins
;
++
i
)
{
pRes
->
orderedBins
[
i
].
lower
=
listBin
[
i
];
pRes
->
orderedBins
[
i
].
upper
=
listBin
[
i
+
1
];
pRes
->
orderedBins
[
i
].
count
=
0
;
}
return
true
;
}
static
void
histogram_function
(
SQLFunctionCtx
*
pCtx
)
{
SResultRowCellInfo
*
pResInfo
=
GET_RES_INFO
(
pCtx
);
SHistogramFuncInfo
*
pRes
=
getHistogramFuncOutputInfo
(
pCtx
);
if
(
pRes
->
orderedBins
!=
(
SHistogramFuncBin
*
)((
char
*
)
pRes
+
sizeof
(
SHistogramFuncInfo
)))
{
pRes
->
orderedBins
=
(
SHistogramFuncBin
*
)((
char
*
)
pRes
+
sizeof
(
SHistogramFuncInfo
));
}
int32_t
notNullElems
=
0
;
for
(
int32_t
i
=
0
;
i
<
pCtx
->
size
;
++
i
)
{
char
*
data
=
GET_INPUT_DATA
(
pCtx
,
i
);
if
(
pCtx
->
hasNull
&&
isNull
(
data
,
pCtx
->
inputType
))
{
continue
;
}
notNullElems
++
;
double
v
;
GET_TYPED_DATA
(
v
,
double
,
pCtx
->
inputType
,
data
);
for
(
int32_t
b
=
0
;
b
<
pRes
->
numOfBins
;
++
b
)
{
if
(
v
>
pRes
->
orderedBins
[
b
].
lower
&&
v
<=
pRes
->
orderedBins
[
b
].
upper
)
{
pRes
->
orderedBins
[
b
].
count
++
;
}
}
}
// treat the result as only one result
SET_VAL
(
pCtx
,
notNullElems
,
1
);
if
(
notNullElems
>
0
)
{
pResInfo
->
hasResult
=
DATA_SET_FLAG
;
}
}
static
void
histogram_func_merge
(
SQLFunctionCtx
*
pCtx
)
{
SHistogramFuncInfo
*
pInput
=
(
SHistogramFuncInfo
*
)
GET_INPUT_DATA_LIST
(
pCtx
);
SHistogramFuncInfo
*
pRes
=
getHistogramFuncOutputInfo
(
pCtx
);
for
(
int32_t
i
=
0
;
i
<
pInput
->
numOfBins
;
++
i
)
{
pRes
->
orderedBins
[
i
].
count
+=
pInput
->
orderedBins
[
i
].
count
;
}
SResultRowCellInfo
*
pResInfo
=
GET_RES_INFO
(
pCtx
);
pResInfo
->
hasResult
=
DATA_SET_FLAG
;
}
static
void
histogram_func_finalizer
(
SQLFunctionCtx
*
pCtx
)
{
SResultRowCellInfo
*
pResInfo
=
GET_RES_INFO
(
pCtx
);
SHistogramFuncInfo
*
pRes
=
GET_ROWCELL_INTERBUF
(
pResInfo
);
if
(
!
pRes
)
{
return
;
}
doFinalizer
(
pCtx
);
}
/////////////////////////////////////////////////////////////////////////////////////////////
/*
* function compatible list.
...
...
@@ -5399,5 +5503,16 @@ SAggFunctionInfo aAggs[40] = {{
elapsedFinalizer
,
elapsedMerge
,
elapsedRequired
,
},
{
"histogram"
,
TSDB_FUNC_HISTOGRAM
,
TSDB_FUNC_HISTOGRAM
,
TSDB_FUNCSTATE_MO
|
TSDB_FUNCSTATE_STABLE
,
histogram_function_setup
,
histogram_function
,
histogram_func_finalizer
,
histogram_func_merge
,
dataBlockRequired
,
}
};
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录