未验证 提交 57b9eee4 编写于 作者: H Hui Li 提交者: GitHub

Merge pull request #16139 from taosdata/szhou/fixbugs

fix: source ts column error
...@@ -1467,6 +1467,10 @@ void tsdbCalcColDataSMA(SColData *pColData, SColumnDataAgg *pColAgg) { ...@@ -1467,6 +1467,10 @@ void tsdbCalcColDataSMA(SColData *pColData, SColumnDataAgg *pColAgg) {
SColVal colVal; SColVal colVal;
SColVal *pColVal = &colVal; SColVal *pColVal = &colVal;
memset(pColAgg, 0, sizeof(*pColAgg));
bool minAssigned = false;
bool maxAssigned = false;
*pColAgg = (SColumnDataAgg){.colId = pColData->cid}; *pColAgg = (SColumnDataAgg){.colId = pColData->cid};
for (int32_t iVal = 0; iVal < pColData->nVal; iVal++) { for (int32_t iVal = 0; iVal < pColData->nVal; iVal++) {
tColDataGetValue(pColData, iVal, pColVal); tColDataGetValue(pColData, iVal, pColVal);
...@@ -1481,72 +1485,86 @@ void tsdbCalcColDataSMA(SColData *pColData, SColumnDataAgg *pColAgg) { ...@@ -1481,72 +1485,86 @@ void tsdbCalcColDataSMA(SColData *pColData, SColumnDataAgg *pColAgg) {
break; break;
case TSDB_DATA_TYPE_TINYINT: { case TSDB_DATA_TYPE_TINYINT: {
pColAgg->sum += colVal.value.i8; pColAgg->sum += colVal.value.i8;
if (pColAgg->min > colVal.value.i8) { if (!minAssigned || pColAgg->min > colVal.value.i8) {
pColAgg->min = colVal.value.i8; pColAgg->min = colVal.value.i8;
minAssigned = true;
} }
if (pColAgg->max < colVal.value.i8) { if (!maxAssigned || pColAgg->max < colVal.value.i8) {
pColAgg->max = colVal.value.i8; pColAgg->max = colVal.value.i8;
maxAssigned = true;
} }
break; break;
} }
case TSDB_DATA_TYPE_SMALLINT: { case TSDB_DATA_TYPE_SMALLINT: {
pColAgg->sum += colVal.value.i16; pColAgg->sum += colVal.value.i16;
if (pColAgg->min > colVal.value.i16) { if (!minAssigned || pColAgg->min > colVal.value.i16) {
pColAgg->min = colVal.value.i16; pColAgg->min = colVal.value.i16;
minAssigned = true;
} }
if (pColAgg->max < colVal.value.i16) { if (!maxAssigned || pColAgg->max < colVal.value.i16) {
pColAgg->max = colVal.value.i16; pColAgg->max = colVal.value.i16;
maxAssigned = true;
} }
break; break;
} }
case TSDB_DATA_TYPE_INT: { case TSDB_DATA_TYPE_INT: {
pColAgg->sum += colVal.value.i32; pColAgg->sum += colVal.value.i32;
if (pColAgg->min > colVal.value.i32) { if (!minAssigned || pColAgg->min > colVal.value.i32) {
pColAgg->min = colVal.value.i32; pColAgg->min = colVal.value.i32;
minAssigned = true;
} }
if (pColAgg->max < colVal.value.i32) { if (!maxAssigned || pColAgg->max < colVal.value.i32) {
pColAgg->max = colVal.value.i32; pColAgg->max = colVal.value.i32;
maxAssigned = true;
} }
break; break;
} }
case TSDB_DATA_TYPE_BIGINT: { case TSDB_DATA_TYPE_BIGINT: {
pColAgg->sum += colVal.value.i64; pColAgg->sum += colVal.value.i64;
if (pColAgg->min > colVal.value.i64) { if (!minAssigned || pColAgg->min > colVal.value.i64) {
pColAgg->min = colVal.value.i64; pColAgg->min = colVal.value.i64;
minAssigned = true;
} }
if (pColAgg->max < colVal.value.i64) { if (!maxAssigned || pColAgg->max < colVal.value.i64) {
pColAgg->max = colVal.value.i64; pColAgg->max = colVal.value.i64;
maxAssigned = true;
} }
break; break;
} }
case TSDB_DATA_TYPE_FLOAT: { case TSDB_DATA_TYPE_FLOAT: {
*(double*)(&pColAgg->sum) += colVal.value.f; *(double*)(&pColAgg->sum) += colVal.value.f;
if (*(double*)(&pColAgg->min) > colVal.value.f) { if (!minAssigned || *(double*)(&pColAgg->min) > colVal.value.f) {
*(double*)(&pColAgg->min) = colVal.value.f; *(double*)(&pColAgg->min) = colVal.value.f;
minAssigned = true;
} }
if (*(double*)(&pColAgg->max) < colVal.value.f) { if (!maxAssigned || *(double*)(&pColAgg->max) < colVal.value.f) {
*(double*)(&pColAgg->max) = colVal.value.f; *(double*)(&pColAgg->max) = colVal.value.f;
maxAssigned = true;
} }
break; break;
} }
case TSDB_DATA_TYPE_DOUBLE: { case TSDB_DATA_TYPE_DOUBLE: {
*(double*)(&pColAgg->sum) += colVal.value.d; *(double*)(&pColAgg->sum) += colVal.value.d;
if (*(double*)(&pColAgg->min) > colVal.value.d) { if (!minAssigned || *(double*)(&pColAgg->min) > colVal.value.d) {
*(double*)(&pColAgg->min) = colVal.value.d; *(double*)(&pColAgg->min) = colVal.value.d;
minAssigned = true;
} }
if (*(double*)(&pColAgg->max) < colVal.value.d) { if (!maxAssigned || *(double*)(&pColAgg->max) < colVal.value.d) {
*(double*)(&pColAgg->max) = colVal.value.d; *(double*)(&pColAgg->max) = colVal.value.d;
maxAssigned = true;
} }
break; break;
} }
case TSDB_DATA_TYPE_VARCHAR: case TSDB_DATA_TYPE_VARCHAR:
break; break;
case TSDB_DATA_TYPE_TIMESTAMP: { case TSDB_DATA_TYPE_TIMESTAMP: {
if (pColAgg->min > colVal.value.i64) { if (!minAssigned || pColAgg->min > colVal.value.i64) {
pColAgg->min = colVal.value.i64; pColAgg->min = colVal.value.i64;
minAssigned = true;
} }
if (pColAgg->max < colVal.value.i64) { if (!maxAssigned || pColAgg->max < colVal.value.i64) {
pColAgg->max = colVal.value.i64; pColAgg->max = colVal.value.i64;
maxAssigned = true;
} }
break; break;
} }
...@@ -1554,41 +1572,49 @@ void tsdbCalcColDataSMA(SColData *pColData, SColumnDataAgg *pColAgg) { ...@@ -1554,41 +1572,49 @@ void tsdbCalcColDataSMA(SColData *pColData, SColumnDataAgg *pColAgg) {
break; break;
case TSDB_DATA_TYPE_UTINYINT: { case TSDB_DATA_TYPE_UTINYINT: {
pColAgg->sum += colVal.value.u8; pColAgg->sum += colVal.value.u8;
if (pColAgg->min > colVal.value.u8) { if (!minAssigned || pColAgg->min > colVal.value.u8) {
pColAgg->min = colVal.value.u8; pColAgg->min = colVal.value.u8;
minAssigned = true;
} }
if (pColAgg->max < colVal.value.u8) { if (!maxAssigned || pColAgg->max < colVal.value.u8) {
pColAgg->max = colVal.value.u8; pColAgg->max = colVal.value.u8;
maxAssigned = true;
} }
break; break;
} }
case TSDB_DATA_TYPE_USMALLINT: { case TSDB_DATA_TYPE_USMALLINT: {
pColAgg->sum += colVal.value.u16; pColAgg->sum += colVal.value.u16;
if (pColAgg->min > colVal.value.u16) { if (!minAssigned || pColAgg->min > colVal.value.u16) {
pColAgg->min = colVal.value.u16; pColAgg->min = colVal.value.u16;
minAssigned = true;
} }
if (pColAgg->max < colVal.value.u16) { if (!maxAssigned || pColAgg->max < colVal.value.u16) {
pColAgg->max = colVal.value.u16; pColAgg->max = colVal.value.u16;
maxAssigned = true;
} }
break; break;
} }
case TSDB_DATA_TYPE_UINT: { case TSDB_DATA_TYPE_UINT: {
pColAgg->sum += colVal.value.u32; pColAgg->sum += colVal.value.u32;
if (pColAgg->min > colVal.value.u32) { if (!minAssigned || pColAgg->min > colVal.value.u32) {
pColAgg->min = colVal.value.u32; pColAgg->min = colVal.value.u32;
minAssigned = true;
} }
if (pColAgg->max < colVal.value.u32) { if (!minAssigned || pColAgg->max < colVal.value.u32) {
pColAgg->max = colVal.value.u32; pColAgg->max = colVal.value.u32;
maxAssigned = true;
} }
break; break;
} }
case TSDB_DATA_TYPE_UBIGINT: { case TSDB_DATA_TYPE_UBIGINT: {
pColAgg->sum += colVal.value.u64; pColAgg->sum += colVal.value.u64;
if (pColAgg->min > colVal.value.u64) { if (!minAssigned || pColAgg->min > colVal.value.u64) {
pColAgg->min = colVal.value.u64; pColAgg->min = colVal.value.u64;
minAssigned = true;
} }
if (pColAgg->max < colVal.value.u64) { if (!maxAssigned || pColAgg->max < colVal.value.u64) {
pColAgg->max = colVal.value.u64; pColAgg->max = colVal.value.u64;
maxAssigned = true;
} }
break; break;
} }
......
...@@ -3315,7 +3315,7 @@ static SSDataBlock* doFillImpl(SOperatorInfo* pOperator) { ...@@ -3315,7 +3315,7 @@ static SSDataBlock* doFillImpl(SOperatorInfo* pOperator) {
taosFillSetStartInfo(pInfo->pFillInfo, 0, pInfo->win.ekey); taosFillSetStartInfo(pInfo->pFillInfo, 0, pInfo->win.ekey);
} else { } else {
blockDataUpdateTsWindow(pBlock, pInfo->primaryTsCol); blockDataUpdateTsWindow(pBlock, pInfo->primarySrcSlotId);
doApplyScalarCalculation(pOperator, pBlock, order, scanFlag); doApplyScalarCalculation(pOperator, pBlock, order, scanFlag);
if (pInfo->curGroupId == 0 || pInfo->curGroupId == pInfo->pRes->info.groupId) { if (pInfo->curGroupId == 0 || pInfo->curGroupId == pInfo->pRes->info.groupId) {
......
...@@ -1210,7 +1210,7 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc) { ...@@ -1210,7 +1210,7 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc) {
int64_t val = GET_INT64_VAL(tval); int64_t val = GET_INT64_VAL(tval);
if ((prev < val) ^ isMinFunc) { if ((prev < val) ^ isMinFunc) {
pBuf->v = val; *(int64_t*)&pBuf->v = val;
if (pCtx->subsidiaries.num > 0) { if (pCtx->subsidiaries.num > 0) {
index = findRowIndex(pInput->startRowIndex, pInput->numOfRows, pCol, tval); index = findRowIndex(pInput->startRowIndex, pInput->numOfRows, pCol, tval);
doSaveTupleData(pCtx, index, pCtx->pSrcBlock, &pBuf->tuplePos); doSaveTupleData(pCtx, index, pCtx->pSrcBlock, &pBuf->tuplePos);
...@@ -1223,7 +1223,7 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc) { ...@@ -1223,7 +1223,7 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc) {
uint64_t val = GET_UINT64_VAL(tval); uint64_t val = GET_UINT64_VAL(tval);
if ((prev < val) ^ isMinFunc) { if ((prev < val) ^ isMinFunc) {
pBuf->v = val; *(uint64_t*)&pBuf->v = val;
if (pCtx->subsidiaries.num > 0) { if (pCtx->subsidiaries.num > 0) {
index = findRowIndex(pInput->startRowIndex, pInput->numOfRows, pCol, tval); index = findRowIndex(pInput->startRowIndex, pInput->numOfRows, pCol, tval);
doSaveTupleData(pCtx, index, pCtx->pSrcBlock, &pBuf->tuplePos); doSaveTupleData(pCtx, index, pCtx->pSrcBlock, &pBuf->tuplePos);
...@@ -1231,11 +1231,11 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc) { ...@@ -1231,11 +1231,11 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc) {
} }
} else if (type == TSDB_DATA_TYPE_DOUBLE) { } else if (type == TSDB_DATA_TYPE_DOUBLE) {
double prev = 0; double prev = 0;
GET_TYPED_DATA(prev, int64_t, type, &pBuf->v); GET_TYPED_DATA(prev, double, type, &pBuf->v);
double val = GET_DOUBLE_VAL(tval); double val = GET_DOUBLE_VAL(tval);
if ((prev < val) ^ isMinFunc) { if ((prev < val) ^ isMinFunc) {
pBuf->v = val; *(double*)&pBuf->v = val;
if (pCtx->subsidiaries.num > 0) { if (pCtx->subsidiaries.num > 0) {
index = findRowIndex(pInput->startRowIndex, pInput->numOfRows, pCol, tval); index = findRowIndex(pInput->startRowIndex, pInput->numOfRows, pCol, tval);
doSaveTupleData(pCtx, index, pCtx->pSrcBlock, &pBuf->tuplePos); doSaveTupleData(pCtx, index, pCtx->pSrcBlock, &pBuf->tuplePos);
...@@ -1243,11 +1243,11 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc) { ...@@ -1243,11 +1243,11 @@ int32_t doMinMaxHelper(SqlFunctionCtx* pCtx, int32_t isMinFunc) {
} }
} else if (type == TSDB_DATA_TYPE_FLOAT) { } else if (type == TSDB_DATA_TYPE_FLOAT) {
double prev = 0; double prev = 0;
GET_TYPED_DATA(prev, int64_t, type, &pBuf->v); GET_TYPED_DATA(prev, double, type, &pBuf->v);
double val = GET_DOUBLE_VAL(tval); double val = GET_DOUBLE_VAL(tval);
if ((prev < val) ^ isMinFunc) { if ((prev < val) ^ isMinFunc) {
pBuf->v = val; *(double*)&pBuf->v = val;
} }
if (pCtx->subsidiaries.num > 0) { if (pCtx->subsidiaries.num > 0) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册