[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);
|
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);
|
doLimitOutputNormalColOfGroupby(pInfo->pSqlExpr);
|
||||||
pInfo->visible = false;
|
pInfo->visible = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5533,11 +5533,13 @@ static void tableIntervalProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo) {
|
||||||
TSKEY newStartKey = TSKEY_INITIAL_VAL;
|
TSKEY newStartKey = TSKEY_INITIAL_VAL;
|
||||||
|
|
||||||
// skip blocks without load the actual data block from file if no filter condition present
|
// skip blocks without load the actual data block from file if no filter condition present
|
||||||
|
if (!pRuntimeEnv->groupbyNormalCol) {
|
||||||
skipTimeInterval(pRuntimeEnv, &newStartKey);
|
skipTimeInterval(pRuntimeEnv, &newStartKey);
|
||||||
if (pQuery->limit.offset > 0 && pQuery->numOfFilterCols == 0 && pRuntimeEnv->pFillInfo == NULL) {
|
if (pQuery->limit.offset > 0 && pQuery->numOfFilterCols == 0 && pRuntimeEnv->pFillInfo == NULL) {
|
||||||
setQueryStatus(pQuery, QUERY_COMPLETED);
|
setQueryStatus(pQuery, QUERY_COMPLETED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
tableIntervalProcessImpl(pRuntimeEnv, newStartKey);
|
tableIntervalProcessImpl(pRuntimeEnv, newStartKey);
|
||||||
|
@ -5551,7 +5553,7 @@ static void tableIntervalProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// no result generated, abort
|
// no result generated, abort
|
||||||
if (pQuery->rec.rows == 0) {
|
if (pQuery->rec.rows == 0 || pRuntimeEnv->groupbyNormalCol) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5579,13 +5581,22 @@ static void tableIntervalProcess(SQInfo *pQInfo, STableQueryInfo* pTableInfo) {
|
||||||
|
|
||||||
// all data scanned, the group by normal column can return
|
// all data scanned, the group by normal column can return
|
||||||
if (pRuntimeEnv->groupbyNormalCol) { // todo refactor with merge interval time result
|
if (pRuntimeEnv->groupbyNormalCol) { // todo refactor with merge interval time result
|
||||||
pQInfo->groupIndex = 0;
|
// maxOutput <= 0, means current query does not generate any results
|
||||||
|
int32_t numOfClosed = numOfClosedTimeWindow(&pRuntimeEnv->windowResInfo);
|
||||||
|
|
||||||
|
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;
|
pQuery->rec.rows = 0;
|
||||||
|
pQInfo->groupIndex = 0;
|
||||||
copyFromWindowResToSData(pQInfo, &pRuntimeEnv->windowResInfo);
|
copyFromWindowResToSData(pQInfo, &pRuntimeEnv->windowResInfo);
|
||||||
clearFirstNTimeWindow(pRuntimeEnv, pQInfo->groupIndex);
|
clearFirstNTimeWindow(pRuntimeEnv, pQInfo->groupIndex);
|
||||||
|
|
||||||
|
doSecondaryArithmeticProcess(pQuery);
|
||||||
limitResults(pRuntimeEnv);
|
limitResults(pRuntimeEnv);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tableQueryImpl(SQInfo *pQInfo) {
|
static void tableQueryImpl(SQInfo *pQInfo) {
|
||||||
|
|
|
@ -456,6 +456,11 @@ if $rows != 1 then
|
||||||
return -1
|
return -1
|
||||||
endi
|
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;
|
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
|
if $rows != 10000 then
|
||||||
return -1
|
return -1
|
||||||
|
|
Loading…
Reference in New Issue