Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
7ee05df7
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看板
提交
7ee05df7
编写于
6月 08, 2023
作者:
G
Ganlin Zhao
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix lastBlock remain ts not saved
上级
b4c2085d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
30 addition
and
9 deletion
+30
-9
source/libs/executor/src/timesliceoperator.c
source/libs/executor/src/timesliceoperator.c
+30
-9
未找到文件。
source/libs/executor/src/timesliceoperator.c
浏览文件 @
7ee05df7
...
@@ -45,6 +45,7 @@ typedef struct STimeSliceOperatorInfo {
...
@@ -45,6 +45,7 @@ typedef struct STimeSliceOperatorInfo {
SGroupKeys
*
pPrevGroupKey
;
SGroupKeys
*
pPrevGroupKey
;
SSDataBlock
*
pNextGroupRes
;
SSDataBlock
*
pNextGroupRes
;
SSDataBlock
*
pRemainRes
;
// save block unfinished processing
SSDataBlock
*
pRemainRes
;
// save block unfinished processing
int64_t
remainTs
;
// the remaining timestamp in the block to be processed
}
STimeSliceOperatorInfo
;
}
STimeSliceOperatorInfo
;
static
void
destroyTimeSliceOperatorInfo
(
void
*
param
);
static
void
destroyTimeSliceOperatorInfo
(
void
*
param
);
...
@@ -642,11 +643,9 @@ static int32_t resetKeeperInfo(STimeSliceOperatorInfo* pInfo) {
...
@@ -642,11 +643,9 @@ static int32_t resetKeeperInfo(STimeSliceOperatorInfo* pInfo) {
return
TSDB_CODE_SUCCESS
;
return
TSDB_CODE_SUCCESS
;
}
}
static
bool
checkThresholdReached
(
STimeSliceOperatorInfo
*
pSliceInfo
,
SSDataBlock
*
pBlock
,
int32_t
threshold
)
{
static
bool
checkThresholdReached
(
STimeSliceOperatorInfo
*
pSliceInfo
,
int32_t
threshold
)
{
SSDataBlock
*
pResBlock
=
pSliceInfo
->
pRes
;
SSDataBlock
*
pResBlock
=
pSliceInfo
->
pRes
;
if
(
pResBlock
->
info
.
rows
>
threshold
)
{
if
(
pResBlock
->
info
.
rows
>
threshold
)
{
pSliceInfo
->
pRemainRes
=
pBlock
;
return
true
;
return
true
;
}
}
...
@@ -661,6 +660,16 @@ static bool checkWindowBoundReached(STimeSliceOperatorInfo* pSliceInfo) {
...
@@ -661,6 +660,16 @@ static bool checkWindowBoundReached(STimeSliceOperatorInfo* pSliceInfo) {
return
false
;
return
false
;
}
}
static
void
saveBlockStatus
(
STimeSliceOperatorInfo
*
pSliceInfo
,
SSDataBlock
*
pBlock
,
int32_t
curIndex
)
{
SSDataBlock
*
pResBlock
=
pSliceInfo
->
pRes
;
SColumnInfoData
*
pTsCol
=
taosArrayGet
(
pBlock
->
pDataBlock
,
pSliceInfo
->
tsCol
.
slotId
);
if
(
curIndex
<
pBlock
->
info
.
rows
-
1
)
{
pSliceInfo
->
pRemainRes
=
pBlock
;
pSliceInfo
->
remainTs
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
curIndex
+
1
);
}
}
static
void
doTimesliceImpl
(
SOperatorInfo
*
pOperator
,
STimeSliceOperatorInfo
*
pSliceInfo
,
SSDataBlock
*
pBlock
,
static
void
doTimesliceImpl
(
SOperatorInfo
*
pOperator
,
STimeSliceOperatorInfo
*
pSliceInfo
,
SSDataBlock
*
pBlock
,
SExecTaskInfo
*
pTaskInfo
,
bool
ignoreNull
)
{
SExecTaskInfo
*
pTaskInfo
,
bool
ignoreNull
)
{
SSDataBlock
*
pResBlock
=
pSliceInfo
->
pRes
;
SSDataBlock
*
pResBlock
=
pSliceInfo
->
pRes
;
...
@@ -670,6 +679,12 @@ static void doTimesliceImpl(SOperatorInfo* pOperator, STimeSliceOperatorInfo* pS
...
@@ -670,6 +679,12 @@ static void doTimesliceImpl(SOperatorInfo* pOperator, STimeSliceOperatorInfo* pS
for
(
int32_t
i
=
0
;
i
<
pBlock
->
info
.
rows
;
++
i
)
{
for
(
int32_t
i
=
0
;
i
<
pBlock
->
info
.
rows
;
++
i
)
{
int64_t
ts
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
i
);
int64_t
ts
=
*
(
int64_t
*
)
colDataGetData
(
pTsCol
,
i
);
// check if need to resume from the position of last unfinished block
if
(
pSliceInfo
->
pRemainRes
!=
NULL
&&
ts
<
pSliceInfo
->
remainTs
&&
pSliceInfo
->
current
<=
pSliceInfo
->
remainTs
)
{
continue
;
}
// check for duplicate timestamps
// check for duplicate timestamps
if
(
checkDuplicateTimestamps
(
pSliceInfo
,
pTsCol
,
i
,
pBlock
->
info
.
rows
))
{
if
(
checkDuplicateTimestamps
(
pSliceInfo
,
pTsCol
,
i
,
pBlock
->
info
.
rows
))
{
T_LONG_JMP
(
pTaskInfo
->
env
,
TSDB_CODE_FUNC_DUP_TIMESTAMP
);
T_LONG_JMP
(
pTaskInfo
->
env
,
TSDB_CODE_FUNC_DUP_TIMESTAMP
);
...
@@ -681,7 +696,8 @@ static void doTimesliceImpl(SOperatorInfo* pOperator, STimeSliceOperatorInfo* pS
...
@@ -681,7 +696,8 @@ static void doTimesliceImpl(SOperatorInfo* pOperator, STimeSliceOperatorInfo* pS
if
(
checkWindowBoundReached
(
pSliceInfo
))
{
if
(
checkWindowBoundReached
(
pSliceInfo
))
{
break
;
break
;
}
}
if
(
checkThresholdReached
(
pSliceInfo
,
pBlock
,
pOperator
->
resultInfo
.
threshold
))
{
if
(
checkThresholdReached
(
pSliceInfo
,
pOperator
->
resultInfo
.
threshold
))
{
saveBlockStatus
(
pSliceInfo
,
pBlock
,
i
);
return
;
return
;
}
}
...
@@ -697,7 +713,8 @@ static void doTimesliceImpl(SOperatorInfo* pOperator, STimeSliceOperatorInfo* pS
...
@@ -697,7 +713,8 @@ static void doTimesliceImpl(SOperatorInfo* pOperator, STimeSliceOperatorInfo* pS
if
(
checkWindowBoundReached
(
pSliceInfo
))
{
if
(
checkWindowBoundReached
(
pSliceInfo
))
{
break
;
break
;
}
}
if
(
checkThresholdReached
(
pSliceInfo
,
pBlock
,
pOperator
->
resultInfo
.
threshold
))
{
if
(
checkThresholdReached
(
pSliceInfo
,
pOperator
->
resultInfo
.
threshold
))
{
saveBlockStatus
(
pSliceInfo
,
pBlock
,
i
);
return
;
return
;
}
}
}
else
if
(
ts
<
pSliceInfo
->
current
)
{
}
else
if
(
ts
<
pSliceInfo
->
current
)
{
...
@@ -723,7 +740,8 @@ static void doTimesliceImpl(SOperatorInfo* pOperator, STimeSliceOperatorInfo* pS
...
@@ -723,7 +740,8 @@ static void doTimesliceImpl(SOperatorInfo* pOperator, STimeSliceOperatorInfo* pS
if
(
checkWindowBoundReached
(
pSliceInfo
))
{
if
(
checkWindowBoundReached
(
pSliceInfo
))
{
break
;
break
;
}
}
if
(
checkThresholdReached
(
pSliceInfo
,
pBlock
,
pOperator
->
resultInfo
.
threshold
))
{
if
(
checkThresholdReached
(
pSliceInfo
,
pOperator
->
resultInfo
.
threshold
))
{
saveBlockStatus
(
pSliceInfo
,
pBlock
,
i
);
return
;
return
;
}
}
}
else
{
}
else
{
...
@@ -759,7 +777,8 @@ static void doTimesliceImpl(SOperatorInfo* pOperator, STimeSliceOperatorInfo* pS
...
@@ -759,7 +777,8 @@ static void doTimesliceImpl(SOperatorInfo* pOperator, STimeSliceOperatorInfo* pS
if
(
checkWindowBoundReached
(
pSliceInfo
))
{
if
(
checkWindowBoundReached
(
pSliceInfo
))
{
break
;
break
;
}
}
if
(
checkThresholdReached
(
pSliceInfo
,
pBlock
,
pOperator
->
resultInfo
.
threshold
))
{
if
(
checkThresholdReached
(
pSliceInfo
,
pOperator
->
resultInfo
.
threshold
))
{
saveBlockStatus
(
pSliceInfo
,
pBlock
,
i
);
return
;
return
;
}
}
}
}
...
@@ -854,7 +873,7 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
...
@@ -854,7 +873,7 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
while
(
1
)
{
while
(
1
)
{
if
(
pSliceInfo
->
pNextGroupRes
!=
NULL
)
{
if
(
pSliceInfo
->
pNextGroupRes
!=
NULL
)
{
doHandleTimeslice
(
pOperator
,
pSliceInfo
->
pNextGroupRes
);
doHandleTimeslice
(
pOperator
,
pSliceInfo
->
pNextGroupRes
);
if
(
checkThresholdReached
(
pSliceInfo
,
p
SliceInfo
->
pRemainRes
,
p
Operator
->
resultInfo
.
threshold
))
{
if
(
checkThresholdReached
(
pSliceInfo
,
pOperator
->
resultInfo
.
threshold
))
{
doFilter
(
pResBlock
,
pOperator
->
exprSupp
.
pFilterInfo
,
NULL
);
doFilter
(
pResBlock
,
pOperator
->
exprSupp
.
pFilterInfo
,
NULL
);
goto
_finished
;
goto
_finished
;
}
}
...
@@ -879,7 +898,7 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
...
@@ -879,7 +898,7 @@ static SSDataBlock* doTimeslice(SOperatorInfo* pOperator) {
}
}
doHandleTimeslice
(
pOperator
,
pBlock
);
doHandleTimeslice
(
pOperator
,
pBlock
);
if
(
checkThresholdReached
(
pSliceInfo
,
p
SliceInfo
->
pRemainRes
,
p
Operator
->
resultInfo
.
threshold
))
{
if
(
checkThresholdReached
(
pSliceInfo
,
pOperator
->
resultInfo
.
threshold
))
{
doFilter
(
pResBlock
,
pOperator
->
exprSupp
.
pFilterInfo
,
NULL
);
doFilter
(
pResBlock
,
pOperator
->
exprSupp
.
pFilterInfo
,
NULL
);
goto
_finished
;
goto
_finished
;
}
}
...
@@ -943,6 +962,7 @@ SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode
...
@@ -943,6 +962,7 @@ SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode
pInfo
->
tsCol
=
extractColumnFromColumnNode
((
SColumnNode
*
)
pInterpPhyNode
->
pTimeSeries
);
pInfo
->
tsCol
=
extractColumnFromColumnNode
((
SColumnNode
*
)
pInterpPhyNode
->
pTimeSeries
);
pInfo
->
fillType
=
convertFillType
(
pInterpPhyNode
->
fillMode
);
pInfo
->
fillType
=
convertFillType
(
pInterpPhyNode
->
fillMode
);
initResultSizeInfo
(
&
pOperator
->
resultInfo
,
4096
);
initResultSizeInfo
(
&
pOperator
->
resultInfo
,
4096
);
pOperator
->
resultInfo
.
threshold
=
1
;
pInfo
->
pFillColInfo
=
createFillColInfo
(
pExprInfo
,
numOfExprs
,
NULL
,
0
,
(
SNodeListNode
*
)
pInterpPhyNode
->
pFillValues
);
pInfo
->
pFillColInfo
=
createFillColInfo
(
pExprInfo
,
numOfExprs
,
NULL
,
0
,
(
SNodeListNode
*
)
pInterpPhyNode
->
pFillValues
);
pInfo
->
pLinearInfo
=
NULL
;
pInfo
->
pLinearInfo
=
NULL
;
...
@@ -956,6 +976,7 @@ SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode
...
@@ -956,6 +976,7 @@ SOperatorInfo* createTimeSliceOperatorInfo(SOperatorInfo* downstream, SPhysiNode
pInfo
->
pPrevGroupKey
=
NULL
;
pInfo
->
pPrevGroupKey
=
NULL
;
pInfo
->
pNextGroupRes
=
NULL
;
pInfo
->
pNextGroupRes
=
NULL
;
pInfo
->
pRemainRes
=
NULL
;
pInfo
->
pRemainRes
=
NULL
;
pInfo
->
remainTs
=
0
;
if
(
downstream
->
operatorType
==
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
)
{
if
(
downstream
->
operatorType
==
QUERY_NODE_PHYSICAL_PLAN_TABLE_SCAN
)
{
STableScanInfo
*
pScanInfo
=
(
STableScanInfo
*
)
downstream
->
info
;
STableScanInfo
*
pScanInfo
=
(
STableScanInfo
*
)
downstream
->
info
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录