1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-30 19:23:07 +03:00

MCOL-719 Add date/datetime to func_least/greatest

Support was missing and int casting caused unexpected results
This commit is contained in:
Andrew Hutchings
2017-05-17 10:35:50 +01:00
parent d5078663c8
commit ed5f51b593
3 changed files with 96 additions and 0 deletions

View File

@ -159,6 +159,44 @@ IDB_Decimal Func_greatest::getDecimalVal(Row& row,
return greatestStr;
}
int32_t Func_greatest::getDateIntVal(rowgroup::Row& row,
FunctionParm& fp,
bool& isNull,
execplan::CalpontSystemCatalog::ColType& ct)
{
int32_t str = fp[0]->data()->getDateIntVal(row, isNull);
int32_t greatestStr = str;
for (uint32_t i = 1; i < fp.size(); i++)
{
int32_t str1 = fp[i]->data()->getDateIntVal(row, isNull);
if ( greatestStr < str1 )
greatestStr = str1;
}
return greatestStr;
}
int64_t Func_greatest::getDatetimeIntVal(rowgroup::Row& row,
FunctionParm& fp,
bool& isNull,
execplan::CalpontSystemCatalog::ColType& ct)
{
int64_t str = fp[0]->data()->getDatetimeIntVal(row, isNull);
int64_t greatestStr = str;
for (uint32_t i = 1; i < fp.size(); i++)
{
int64_t str1 = fp[i]->data()->getDatetimeIntVal(row, isNull);
if ( greatestStr < str1 )
greatestStr = str1;
}
return greatestStr;
}
} // namespace funcexp
// vim:ts=4 sw=4:

View File

@ -137,6 +137,44 @@ IDB_Decimal Func_least::getDecimalVal(Row& row,
return leastStr;
}
int32_t Func_least::getDateIntVal(rowgroup::Row& row,
FunctionParm& fp,
bool& isNull,
execplan::CalpontSystemCatalog::ColType& op_ct)
{
int32_t str = fp[0]->data()->getDateIntVal(row, isNull);
int32_t leastStr = str;
for (uint32_t i = 1; i < fp.size(); i++)
{
int32_t str1 = fp[i]->data()->getDateIntVal(row, isNull);
if ( leastStr > str1 )
leastStr = str1;
}
return leastStr;
}
int64_t Func_least::getDatetimeIntVal(rowgroup::Row& row,
FunctionParm& fp,
bool& isNull,
execplan::CalpontSystemCatalog::ColType& op_ct)
{
int64_t str = fp[0]->data()->getDatetimeIntVal(row, isNull);
int64_t leastStr = str;
for (uint32_t i = 1; i < fp.size(); i++)
{
int64_t str1 = fp[i]->data()->getDatetimeIntVal(row, isNull);
if ( leastStr > str1 )
leastStr = str1;
}
return leastStr;
}
} // namespace funcexp

View File

@ -267,6 +267,16 @@ public:
FunctionParm& fp,
bool& isNull,
execplan::CalpontSystemCatalog::ColType& op_ct);
int32_t getDateIntVal(rowgroup::Row& row,
FunctionParm& fp,
bool& isNull,
execplan::CalpontSystemCatalog::ColType& op_ct);
int64_t getDatetimeIntVal(rowgroup::Row& row,
FunctionParm& fp,
bool& isNull,
execplan::CalpontSystemCatalog::ColType& op_ct);
};
@ -299,6 +309,16 @@ public:
FunctionParm& fp,
bool& isNull,
execplan::CalpontSystemCatalog::ColType& op_ct);
int32_t getDateIntVal(rowgroup::Row& row,
FunctionParm& fp,
bool& isNull,
execplan::CalpontSystemCatalog::ColType& op_ct);
int64_t getDatetimeIntVal(rowgroup::Row& row,
FunctionParm& fp,
bool& isNull,
execplan::CalpontSystemCatalog::ColType& op_ct);
};