[TD-2159]
This commit is contained in:
parent
ec8c6d0c16
commit
4a7fc101a0
|
@ -5509,7 +5509,9 @@ void doAddGroupColumnForSubquery(SQueryInfo* pQueryInfo, int32_t tagIndex) {
|
|||
|
||||
tscAddSpecialColumnForSelect(pQueryInfo, (int32_t)size, TSDB_FUNC_PRJ, &colIndex, pSchema, TSDB_COL_NORMAL);
|
||||
|
||||
SInternalField* pInfo = tscFieldInfoGetInternalField(&pQueryInfo->fieldsInfo, (int32_t)size);
|
||||
int32_t numOfFields = tscNumOfFields(pQueryInfo);
|
||||
SInternalField* pInfo = tscFieldInfoGetInternalField(&pQueryInfo->fieldsInfo, numOfFields - 1);
|
||||
|
||||
doLimitOutputNormalColOfGroupby(pInfo->pSqlExpr);
|
||||
pInfo->visible = false;
|
||||
}
|
||||
|
|
|
@ -5533,10 +5533,12 @@ static void tableIntervalProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo) {
|
|||
TSKEY newStartKey = TSKEY_INITIAL_VAL;
|
||||
|
||||
// skip blocks without load the actual data block from file if no filter condition present
|
||||
skipTimeInterval(pRuntimeEnv, &newStartKey);
|
||||
if (pQuery->limit.offset > 0 && pQuery->numOfFilterCols == 0 && pRuntimeEnv->pFillInfo == NULL) {
|
||||
setQueryStatus(pQuery, QUERY_COMPLETED);
|
||||
return;
|
||||
if (!pRuntimeEnv->groupbyNormalCol) {
|
||||
skipTimeInterval(pRuntimeEnv, &newStartKey);
|
||||
if (pQuery->limit.offset > 0 && pQuery->numOfFilterCols == 0 && pRuntimeEnv->pFillInfo == NULL) {
|
||||
setQueryStatus(pQuery, QUERY_COMPLETED);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
while (1) {
|
||||
|
@ -5551,7 +5553,7 @@ static void tableIntervalProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo) {
|
|||
}
|
||||
|
||||
// no result generated, abort
|
||||
if (pQuery->rec.rows == 0) {
|
||||
if (pQuery->rec.rows == 0 || pRuntimeEnv->groupbyNormalCol) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -5579,12 +5581,21 @@ static void tableIntervalProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo) {
|
|||
|
||||
// all data scanned, the group by normal column can return
|
||||
if (pRuntimeEnv->groupbyNormalCol) { // todo refactor with merge interval time result
|
||||
pQInfo->groupIndex = 0;
|
||||
pQuery->rec.rows = 0;
|
||||
copyFromWindowResToSData(pQInfo, &pRuntimeEnv->windowResInfo);
|
||||
clearFirstNTimeWindow(pRuntimeEnv, pQInfo->groupIndex);
|
||||
// maxOutput <= 0, means current query does not generate any results
|
||||
int32_t numOfClosed = numOfClosedTimeWindow(&pRuntimeEnv->windowResInfo);
|
||||
|
||||
limitResults(pRuntimeEnv);
|
||||
if ((pQuery->limit.offset > 0 && pQuery->limit.offset < numOfClosed) || pQuery->limit.offset == 0) {
|
||||
// skip offset result rows
|
||||
clearFirstNTimeWindow(pRuntimeEnv, pQuery->limit.offset);
|
||||
|
||||
pQuery->rec.rows = 0;
|
||||
pQInfo->groupIndex = 0;
|
||||
copyFromWindowResToSData(pQInfo, &pRuntimeEnv->windowResInfo);
|
||||
clearFirstNTimeWindow(pRuntimeEnv, pQInfo->groupIndex);
|
||||
|
||||
doSecondaryArithmeticProcess(pQuery);
|
||||
limitResults(pRuntimeEnv);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -456,6 +456,11 @@ if $rows != 1 then
|
|||
return -1
|
||||
endi
|
||||
|
||||
sql select count(*),first(ts),last(ts),min(c3) from group_tb1 group by c4 limit 20 offset 9990;
|
||||
if $rows != 10 then
|
||||
return -1
|
||||
endi
|
||||
|
||||
sql select count(*),first(ts),last(ts),min(c3),max(c3),sum(c3),avg(c3),sum(c4)/count(c4) from group_tb1 group by c8;
|
||||
if $rows != 10000 then
|
||||
return -1
|
||||
|
|
Loading…
Reference in New Issue