diff --git a/dbcon/execplan/predicateoperator.h b/dbcon/execplan/predicateoperator.h index 8e19aa1b7..e2caf209e 100644 --- a/dbcon/execplan/predicateoperator.h +++ b/dbcon/execplan/predicateoperator.h @@ -35,6 +35,7 @@ #include #endif #include +#include #include #include "expressionparser.h" diff --git a/utils/funcexp/func_cast.cpp b/utils/funcexp/func_cast.cpp index 8ccf73e0e..35e417ff8 100644 --- a/utils/funcexp/func_cast.cpp +++ b/utils/funcexp/func_cast.cpp @@ -182,7 +182,7 @@ int64_t Func_cast_signed::getIntVal(Row& row, IDB_Decimal d = parm[0]->data()->getDecimalVal(row, isNull); double dscale = d.scale; int64_t value = d.value / pow(10.0, dscale); - int lefto = (d.value - value * pow(10.0, dscale)) / pow(dscale - 1); + int lefto = (d.value - value * pow(10.0, dscale)) / pow(10.0, dscale - 1); if ( value >= 0 && lefto > 4 ) value++; @@ -337,7 +337,7 @@ uint64_t Func_cast_unsigned::getUintVal(Row& row, } uint64_t value = d.value / pow(10.0, dscale); - int lefto = (d.value - value * pow(10.0, dscale)) / pow(dscale - 1); + int lefto = (d.value - value * pow(10.0, dscale)) / pow(10.0, dscale - 1); if ( value >= 0 && lefto > 4 ) value++; diff --git a/utils/funcexp/func_char.cpp b/utils/funcexp/func_char.cpp index f6774452c..a04403a00 100644 --- a/utils/funcexp/func_char.cpp +++ b/utils/funcexp/func_char.cpp @@ -159,7 +159,7 @@ string Func_char::getStrVal(Row& row, double dscale = d.scale; // get decimal and round up int value = d.value / pow(10.0, dscale); - int lefto = (d.value - value * pow(10.0, dscale)) / pow(dscale - 1); + int lefto = (d.value - value * pow(10.0, dscale)) / pow(10.0, dscale - 1); if ( lefto > 4 ) value++; diff --git a/utils/funcexp/func_elt.cpp b/utils/funcexp/func_elt.cpp index faa8a234a..99c86af75 100644 --- a/utils/funcexp/func_elt.cpp +++ b/utils/funcexp/func_elt.cpp @@ -73,7 +73,7 @@ string Func_elt::getStrVal(rowgroup::Row& row, IDB_Decimal d = parm[0]->data()->getDecimalVal(row, isNull); double dscale = d.scale; number = d.value / pow(10.0, dscale); - int lefto = (d.value - number * pow(10.0, dscale)) / pow(dscale - 1); + int lefto = (d.value - number * pow(10.0, dscale)) / pow(10.0, dscale - 1); if ( number >= 0 && lefto > 4 ) number++; diff --git a/utils/funcexp/func_makedate.cpp b/utils/funcexp/func_makedate.cpp index 6b4537bb4..8c8c50abf 100644 --- a/utils/funcexp/func_makedate.cpp +++ b/utils/funcexp/func_makedate.cpp @@ -70,7 +70,7 @@ uint64_t makedate(rowgroup::Row& row, IDB_Decimal d = parm[0]->data()->getDecimalVal(row, isNull); double dscale = d.scale; year = d.value / pow(10.0, dscale); - int lefto = (d.value - year * pow(10.0, dscale)) / pow(dscale - 1); + int lefto = (d.value - year * pow(10.0, dscale)) / pow(10.0, dscale - 1); if ( year >= 0 && lefto > 4 ) year++; @@ -130,7 +130,7 @@ uint64_t makedate(rowgroup::Row& row, IDB_Decimal d = parm[1]->data()->getDecimalVal(row, isNull); double dscale = d.scale; int64_t tmp = d.value / pow(10.0, dscale); - int lefto = (d.value - tmp * pow(10.0, dscale)) / pow(dscale - 1); + int lefto = (d.value - tmp * pow(10.0, dscale)) / pow(10.0, dscale - 1); if ( tmp >= 0 && lefto > 4 ) tmp++; diff --git a/utils/funcexp/func_maketime.cpp b/utils/funcexp/func_maketime.cpp index 8b19ae557..b43fed4ab 100644 --- a/utils/funcexp/func_maketime.cpp +++ b/utils/funcexp/func_maketime.cpp @@ -76,7 +76,7 @@ string Func_maketime::getStrVal(rowgroup::Row& row, IDB_Decimal d = parm[0]->data()->getDecimalVal(row, isNull); double dscale = d.scale; hour = d.value / pow(10.0, dscale); - int lefto = (d.value - hour * pow(10.0, dscale)) / pow(dscale - 1); + int lefto = (d.value - hour * pow(10.0, dscale)) / pow(10.0, dscale - 1); if ( hour >= 0 && lefto > 4 ) hour++; @@ -116,7 +116,7 @@ string Func_maketime::getStrVal(rowgroup::Row& row, IDB_Decimal d = parm[1]->data()->getDecimalVal(row, isNull); double dscale = d.scale; min = d.value / pow(10.0, dscale); - int lefto = (d.value - min * pow(10.0, dscale)) / pow(dscale - 1); + int lefto = (d.value - min * pow(10.0, dscale)) / pow(10.0, dscale - 1); if ( min >= 0 && lefto > 4 ) min++; @@ -162,7 +162,7 @@ string Func_maketime::getStrVal(rowgroup::Row& row, IDB_Decimal d = parm[2]->data()->getDecimalVal(row, isNull); double dscale = d.scale; sec = d.value / pow(10.0, dscale); - int lefto = (d.value - sec * pow(10.0, dscale)) / pow(dscale - 1); + int lefto = (d.value - sec * pow(10.0, dscale)) / pow(10.0, dscale - 1); if ( sec >= 0 && lefto > 4 ) sec++; diff --git a/utils/funcexp/func_mod.cpp b/utils/funcexp/func_mod.cpp index f9b51eb28..a4000af67 100644 --- a/utils/funcexp/func_mod.cpp +++ b/utils/funcexp/func_mod.cpp @@ -75,7 +75,7 @@ IDB_Decimal Func_mod::getDecimalVal(Row& row, IDB_Decimal d = parm[0]->data()->getDecimalVal(row, isNull); int64_t value = d.value / pow(10.0, d.scale); - int lefto = d.value % pow(10.0, d.scale); + int lefto = d.value % (int)pow(10.0, d.scale); int64_t mod = (value % div) * pow(10.0, d.scale) + lefto;