未验证 提交 12a92a15 编写于 作者: S Shengliang Guan 提交者: GitHub

Merge pull request #3412 from taosdata/hotfix/1.6_query

[td-225] fix the taosd crashed by too many empty table with group by …
...@@ -162,7 +162,7 @@ void disableFunctForSuppleScan(STableQuerySupportObj* pSupporter, int32_t ord ...@@ -162,7 +162,7 @@ void disableFunctForSuppleScan(STableQuerySupportObj* pSupporter, int32_t ord
void enableFunctForMasterScan(SQueryRuntimeEnv* pRuntimeEnv, int32_t order); void enableFunctForMasterScan(SQueryRuntimeEnv* pRuntimeEnv, int32_t order);
int32_t mergeMetersResultToOneGroups(STableQuerySupportObj* pSupporter); int32_t mergeMetersResultToOneGroups(STableQuerySupportObj* pSupporter);
void copyFromWindowResToSData(SQInfo* pQInfo, SWindowResult* result); void copyFromWindowResToSData(SQInfo* pQInfo, SWindowResult* result, int32_t numOfWindowRes);
SBlockInfo getBlockInfo(SQueryRuntimeEnv *pRuntimeEnv); SBlockInfo getBlockInfo(SQueryRuntimeEnv *pRuntimeEnv);
SBlockInfo getBlockBasicInfo(SQueryRuntimeEnv *pRuntimeEnv, void* pBlock, int32_t type); SBlockInfo getBlockBasicInfo(SQueryRuntimeEnv *pRuntimeEnv, void* pBlock, int32_t type);
......
...@@ -7698,7 +7698,7 @@ static int32_t getNumOfSubset(STableQuerySupportObj *pSupporter) { ...@@ -7698,7 +7698,7 @@ static int32_t getNumOfSubset(STableQuerySupportObj *pSupporter) {
return totalSubset; return totalSubset;
} }
static int32_t doCopyToSData(STableQuerySupportObj *pSupporter, SWindowResult *result, int32_t orderType) { static int32_t doCopyToSData(STableQuerySupportObj *pSupporter, SWindowResult *result, int32_t numOfWindowRes, int32_t orderType) {
SQueryRuntimeEnv *pRuntimeEnv = &pSupporter->runtimeEnv; SQueryRuntimeEnv *pRuntimeEnv = &pSupporter->runtimeEnv;
SQuery * pQuery = pRuntimeEnv->pQuery; SQuery * pQuery = pRuntimeEnv->pQuery;
...@@ -7717,7 +7717,7 @@ static int32_t doCopyToSData(STableQuerySupportObj *pSupporter, SWindowResult *r ...@@ -7717,7 +7717,7 @@ static int32_t doCopyToSData(STableQuerySupportObj *pSupporter, SWindowResult *r
step = -1; step = -1;
} }
for (int32_t i = startIdx; (i < totalSubset) && (i >= 0); i += step) { for (int32_t i = startIdx; (i < totalSubset && i < numOfWindowRes) && (i >= 0); i += step) {
if (result[i].numOfRows == 0) { if (result[i].numOfRows == 0) {
pSupporter->offset = 0; pSupporter->offset = 0;
pSupporter->subgroupIdx += 1; pSupporter->subgroupIdx += 1;
...@@ -7772,12 +7772,12 @@ static int32_t doCopyToSData(STableQuerySupportObj *pSupporter, SWindowResult *r ...@@ -7772,12 +7772,12 @@ static int32_t doCopyToSData(STableQuerySupportObj *pSupporter, SWindowResult *r
* @param pQInfo * @param pQInfo
* @param result * @param result
*/ */
void copyFromWindowResToSData(SQInfo *pQInfo, SWindowResult *result) { void copyFromWindowResToSData(SQInfo *pQInfo, SWindowResult *result, int32_t numOfWindowRes) {
SQuery * pQuery = &pQInfo->query; SQuery * pQuery = &pQInfo->query;
STableQuerySupportObj *pSupporter = pQInfo->pTableQuerySupporter; STableQuerySupportObj *pSupporter = pQInfo->pTableQuerySupporter;
int32_t orderType = (pQuery->pGroupbyExpr != NULL) ? pQuery->pGroupbyExpr->orderType : TSQL_SO_ASC; int32_t orderType = (pQuery->pGroupbyExpr != NULL) ? pQuery->pGroupbyExpr->orderType : TSQL_SO_ASC;
int32_t numOfResult = doCopyToSData(pSupporter, result, orderType); int32_t numOfResult = doCopyToSData(pSupporter, result, numOfWindowRes, orderType);
pQuery->pointsRead += numOfResult; pQuery->pointsRead += numOfResult;
assert(pQuery->pointsRead <= pQuery->pointsToRead); assert(pQuery->pointsRead <= pQuery->pointsToRead);
......
...@@ -664,7 +664,7 @@ static void vnodeSTableSeqProcessor(SQInfo *pQInfo) { ...@@ -664,7 +664,7 @@ static void vnodeSTableSeqProcessor(SQInfo *pQInfo) {
* we need to return it to client in the first place. * we need to return it to client in the first place.
*/ */
if (pSupporter->subgroupIdx > 0) { if (pSupporter->subgroupIdx > 0) {
copyFromWindowResToSData(pQInfo, pRuntimeEnv->windowResInfo.pResult); copyFromWindowResToSData(pQInfo, pRuntimeEnv->windowResInfo.pResult, pRuntimeEnv->windowResInfo.size);
pQInfo->pointsRead += pQuery->pointsRead; pQInfo->pointsRead += pQuery->pointsRead;
if (pQuery->pointsRead > 0) { if (pQuery->pointsRead > 0) {
...@@ -815,7 +815,7 @@ static void vnodeSTableSeqProcessor(SQInfo *pQInfo) { ...@@ -815,7 +815,7 @@ static void vnodeSTableSeqProcessor(SQInfo *pQInfo) {
pQInfo->pTableQuerySupporter->subgroupIdx = 0; pQInfo->pTableQuerySupporter->subgroupIdx = 0;
pQuery->pointsRead = 0; pQuery->pointsRead = 0;
copyFromWindowResToSData(pQInfo, pWindowResInfo->pResult); copyFromWindowResToSData(pQInfo, pWindowResInfo->pResult, pWindowResInfo->size);
} }
pQInfo->pointsRead += pQuery->pointsRead; pQInfo->pointsRead += pQuery->pointsRead;
...@@ -917,7 +917,7 @@ static void vnodeMultiMeterQueryProcessor(SQInfo *pQInfo) { ...@@ -917,7 +917,7 @@ static void vnodeMultiMeterQueryProcessor(SQInfo *pQInfo) {
displayInterResult(pQuery->sdata, pQuery, pQuery->sdata[0]->len); displayInterResult(pQuery->sdata, pQuery, pQuery->sdata[0]->len);
#endif #endif
} else { } else {
copyFromWindowResToSData(pQInfo, pRuntimeEnv->windowResInfo.pResult); copyFromWindowResToSData(pQInfo, pRuntimeEnv->windowResInfo.pResult, pRuntimeEnv->windowResInfo.size);
} }
pQInfo->pointsRead += pQuery->pointsRead; pQInfo->pointsRead += pQuery->pointsRead;
...@@ -975,7 +975,7 @@ static void vnodeMultiMeterQueryProcessor(SQInfo *pQInfo) { ...@@ -975,7 +975,7 @@ static void vnodeMultiMeterQueryProcessor(SQInfo *pQInfo) {
#endif #endif
} }
} else { // not a interval query } else { // not a interval query
copyFromWindowResToSData(pQInfo, pRuntimeEnv->windowResInfo.pResult); copyFromWindowResToSData(pQInfo, pRuntimeEnv->windowResInfo.pResult, pRuntimeEnv->windowResInfo.size);
} }
// handle the limitation of output buffer // handle the limitation of output buffer
...@@ -1136,7 +1136,7 @@ static void vnodeSingleTableIntervalProcessor(SQInfo *pQInfo) { ...@@ -1136,7 +1136,7 @@ static void vnodeSingleTableIntervalProcessor(SQInfo *pQInfo) {
if (pQuery->intervalTime > 0) { if (pQuery->intervalTime > 0) {
pSupporter->subgroupIdx = 0; // always start from 0 pSupporter->subgroupIdx = 0; // always start from 0
pQuery->pointsRead = 0; pQuery->pointsRead = 0;
copyFromWindowResToSData(pQInfo, pRuntimeEnv->windowResInfo.pResult); copyFromWindowResToSData(pQInfo, pRuntimeEnv->windowResInfo.pResult, pRuntimeEnv->windowResInfo.size);
clearFirstNTimeWindow(pRuntimeEnv, pSupporter->subgroupIdx); clearFirstNTimeWindow(pRuntimeEnv, pSupporter->subgroupIdx);
} }
...@@ -1172,7 +1172,7 @@ static void vnodeSingleTableIntervalProcessor(SQInfo *pQInfo) { ...@@ -1172,7 +1172,7 @@ static void vnodeSingleTableIntervalProcessor(SQInfo *pQInfo) {
if (isGroupbyNormalCol(pQuery->pGroupbyExpr)) {//todo refactor with merge interval time result if (isGroupbyNormalCol(pQuery->pGroupbyExpr)) {//todo refactor with merge interval time result
pSupporter->subgroupIdx = 0; pSupporter->subgroupIdx = 0;
pQuery->pointsRead = 0; pQuery->pointsRead = 0;
copyFromWindowResToSData(pQInfo, pRuntimeEnv->windowResInfo.pResult); copyFromWindowResToSData(pQInfo, pRuntimeEnv->windowResInfo.pResult, pRuntimeEnv->windowResInfo.size);
clearFirstNTimeWindow(pRuntimeEnv, pSupporter->subgroupIdx); clearFirstNTimeWindow(pRuntimeEnv, pSupporter->subgroupIdx);
} }
...@@ -1249,7 +1249,7 @@ void vnodeSingleTableQuery(SSchedMsg *pMsg) { ...@@ -1249,7 +1249,7 @@ void vnodeSingleTableQuery(SSchedMsg *pMsg) {
pSupporter->subgroupIdx = 0; // always start from 0 pSupporter->subgroupIdx = 0; // always start from 0
if (pRuntimeEnv->windowResInfo.size > 0) { if (pRuntimeEnv->windowResInfo.size > 0) {
copyFromWindowResToSData(pQInfo, pRuntimeEnv->windowResInfo.pResult); copyFromWindowResToSData(pQInfo, pRuntimeEnv->windowResInfo.pResult, pRuntimeEnv->windowResInfo.size);
pQInfo->pointsRead += pQuery->pointsRead; pQInfo->pointsRead += pQuery->pointsRead;
clearFirstNTimeWindow(pRuntimeEnv, pSupporter->subgroupIdx); clearFirstNTimeWindow(pRuntimeEnv, pSupporter->subgroupIdx);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册