Merge pull request #13084 from taosdata/fix/TD-16034
fix(queyr): fix tail function parameter restriction
This commit is contained in:
commit
ecb3d055da
|
@ -621,8 +621,10 @@ static int32_t translateTail(SFunctionNode* pFunc, char* pErrBuf, int32_t len) {
|
||||||
|
|
||||||
SValueNode* pValue = (SValueNode*)pParamNode;
|
SValueNode* pValue = (SValueNode*)pParamNode;
|
||||||
|
|
||||||
if (pValue->datum.i < ((i > 1) ? 0 : 1) || pValue->datum.i > 1000) {
|
if (pValue->datum.i < ((i > 1) ? 0 : 1) || pValue->datum.i > 100) {
|
||||||
return invaildFuncParaValueErrMsg(pErrBuf, len, pFunc->functionName);
|
return buildFuncErrMsg(pErrBuf, len, TSDB_CODE_FUNC_FUNTION_ERROR,
|
||||||
|
"TAIL function second parameter should be in range [1, 100], "
|
||||||
|
"third parameter should be in range [0, 100]");
|
||||||
}
|
}
|
||||||
|
|
||||||
pValue->notReserved = true;
|
pValue->notReserved = true;
|
||||||
|
|
|
@ -2349,7 +2349,7 @@ static void doHandleDiff(SDiffInfo* pDiffInfo, int32_t type, const char* pv, SCo
|
||||||
case TSDB_DATA_TYPE_FLOAT: {
|
case TSDB_DATA_TYPE_FLOAT: {
|
||||||
float v = *(float*)pv;
|
float v = *(float*)pv;
|
||||||
float delta = factor*(v - pDiffInfo->prev.d64); // direct previous may be null
|
float delta = factor*(v - pDiffInfo->prev.d64); // direct previous may be null
|
||||||
if (delta < 0 && pDiffInfo->ignoreNegative) {
|
if ((delta < 0 && pDiffInfo->ignoreNegative) || isinf(delta) || isnan(delta)) { //check for overflow
|
||||||
colDataSetNull_f(pOutput->nullbitmap, pos);
|
colDataSetNull_f(pOutput->nullbitmap, pos);
|
||||||
} else {
|
} else {
|
||||||
colDataAppendFloat(pOutput, pos, &delta);
|
colDataAppendFloat(pOutput, pos, &delta);
|
||||||
|
@ -2360,7 +2360,7 @@ static void doHandleDiff(SDiffInfo* pDiffInfo, int32_t type, const char* pv, SCo
|
||||||
case TSDB_DATA_TYPE_DOUBLE: {
|
case TSDB_DATA_TYPE_DOUBLE: {
|
||||||
double v = *(double*)pv;
|
double v = *(double*)pv;
|
||||||
double delta = factor*(v - pDiffInfo->prev.d64); // direct previous may be null
|
double delta = factor*(v - pDiffInfo->prev.d64); // direct previous may be null
|
||||||
if (delta < 0 && pDiffInfo->ignoreNegative) {
|
if ((delta < 0 && pDiffInfo->ignoreNegative) || isinf(delta) || isnan(delta)) { //check for overflow
|
||||||
colDataSetNull_f(pOutput->nullbitmap, pos);
|
colDataSetNull_f(pOutput->nullbitmap, pos);
|
||||||
} else {
|
} else {
|
||||||
colDataAppendDouble(pOutput, pos, &delta);
|
colDataAppendDouble(pOutput, pos, &delta);
|
||||||
|
@ -3530,8 +3530,13 @@ int32_t csumFunction(SqlFunctionCtx* pCtx) {
|
||||||
double v;
|
double v;
|
||||||
GET_TYPED_DATA(v, double, type, data);
|
GET_TYPED_DATA(v, double, type, data);
|
||||||
pSumRes->dsum += v;
|
pSumRes->dsum += v;
|
||||||
|
//check for overflow
|
||||||
|
if (isinf(pSumRes->dsum) || isnan(pSumRes->dsum)) {
|
||||||
|
colDataAppendNULL(pOutput, pos);
|
||||||
|
} else {
|
||||||
colDataAppend(pOutput, pos, (char *)&pSumRes->dsum, false);
|
colDataAppend(pOutput, pos, (char *)&pSumRes->dsum, false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//TODO: remove this after pTsOutput is handled
|
//TODO: remove this after pTsOutput is handled
|
||||||
if (pTsOutput != NULL) {
|
if (pTsOutput != NULL) {
|
||||||
|
@ -3604,7 +3609,12 @@ int32_t mavgFunction(SqlFunctionCtx* pCtx) {
|
||||||
|
|
||||||
pInfo->points[pInfo->pos] = v;
|
pInfo->points[pInfo->pos] = v;
|
||||||
double result = pInfo->sum / pInfo->numOfPoints;
|
double result = pInfo->sum / pInfo->numOfPoints;
|
||||||
|
//check for overflow
|
||||||
|
if (isinf(result) || isnan(result)) {
|
||||||
|
colDataAppendNULL(pOutput, pos);
|
||||||
|
} else {
|
||||||
colDataAppend(pOutput, pos, (char *)&result, false);
|
colDataAppend(pOutput, pos, (char *)&result, false);
|
||||||
|
}
|
||||||
|
|
||||||
//TODO: remove this after pTsOutput is handled
|
//TODO: remove this after pTsOutput is handled
|
||||||
if (pTsOutput != NULL) {
|
if (pTsOutput != NULL) {
|
||||||
|
|
Loading…
Reference in New Issue