diff --git a/src/client/src/tscUtil.c b/src/client/src/tscUtil.c index 1f93d9df7fde19f5f81298bb71a9df47fb1640b3..6015bacd9966eafdaebba2dced4936b76db1fb5d 100644 --- a/src/client/src/tscUtil.c +++ b/src/client/src/tscUtil.c @@ -2067,17 +2067,23 @@ void tscFieldInfoCopy(SFieldInfo* pFieldInfo, const SFieldInfo* pSrc, const SArr SInternalField p = {.visible = pfield->visible, .field = pfield->field}; + bool found = false; int32_t resColId = pfield->pExpr->base.resColId; for(int32_t j = 0; j < numOfExpr; ++j) { SExprInfo* pExpr = taosArrayGetP(pExprList, j); if (pExpr->base.resColId == resColId) { p.pExpr = pExpr; + found = true; break; } } -// p.pExpr = calloc(1, sizeof(SExprInfo)); -// tscExprAssign(p.pExpr, pfield->pExpr); + if (!found) { + assert(pfield->pExpr->pExpr != NULL); + p.pExpr = calloc(1, sizeof(SExprInfo)); + tscExprAssign(p.pExpr, pfield->pExpr); + } + taosArrayPush(pFieldInfo->internalField, &p); } } @@ -2942,6 +2948,7 @@ int32_t tscQueryInfoCopy(SQueryInfo* pQueryInfo, const SQueryInfo* pSrc) { pQueryInfo->bufLen = pSrc->bufLen; pQueryInfo->orderProjectQuery = pSrc->orderProjectQuery; + pQueryInfo->arithmeticOnAgg = pSrc->arithmeticOnAgg; pQueryInfo->buf = malloc(pSrc->bufLen); if (pQueryInfo->buf == NULL) { code = TSDB_CODE_TSC_OUT_OF_MEMORY; @@ -2981,6 +2988,14 @@ int32_t tscQueryInfoCopy(SQueryInfo* pQueryInfo, const SQueryInfo* pSrc) { goto _error; } + if (pQueryInfo->arithmeticOnAgg) { + pQueryInfo->exprList1 = taosArrayInit(4, POINTER_BYTES); + if (tscExprCopyAll(pQueryInfo->exprList1, pSrc->exprList1, true) != 0) { + code = TSDB_CODE_TSC_OUT_OF_MEMORY; + goto _error; + } + } + tscColumnListCopyAll(pQueryInfo->colList, pSrc->colList); tscFieldInfoCopy(&pQueryInfo->fieldsInfo, &pSrc->fieldsInfo, pQueryInfo->exprList);