You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-29 08:21:15 +03:00
MCOL-1433 Fix some functions for TIME
Fixes the following: * CAST() (as DATE/DATETIME) * DATE() * DATE_FORMAT() * MAKEDATE() * NULLIF() * TIMEDIFF() * TO_DAYS() / DATEDIFF()
This commit is contained in:
@ -589,6 +589,33 @@ int32_t Func_cast_date::getDateIntVal(rowgroup::Row& row,
|
||||
{
|
||||
return parm[0]->data()->getDateIntVal(row, isNull);
|
||||
}
|
||||
case execplan::CalpontSystemCatalog::TIME:
|
||||
{
|
||||
int64_t val1;
|
||||
string value = "";
|
||||
DateTime aDateTime = static_cast<DateTime>(nowDatetime());
|
||||
Time aTime = parm[0]->data()->getTimeIntVal(row, isNull);
|
||||
aTime.day = 0;
|
||||
if ((aTime.hour < 0) || (aTime.is_neg))
|
||||
{
|
||||
aTime.hour = -abs(aTime.hour);
|
||||
aTime.minute = -abs(aTime.minute);
|
||||
aTime.second = -abs(aTime.second);
|
||||
aTime.msecond = -abs(aTime.msecond);
|
||||
}
|
||||
|
||||
aDateTime.hour = 0;
|
||||
aDateTime.minute = 0;
|
||||
aDateTime.second = 0;
|
||||
aDateTime.msecond = 0;
|
||||
val1 = addTime(aDateTime, aTime);
|
||||
value = dataconvert::DataConvert::datetimeToString(val1);
|
||||
value = value.substr(0, 10);
|
||||
return dataconvert::DataConvert::stringToDate(value);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
default:
|
||||
{
|
||||
@ -680,6 +707,27 @@ int64_t Func_cast_date::getDatetimeIntVal(rowgroup::Row& row,
|
||||
val1.msecond = 0;
|
||||
return *(reinterpret_cast<uint64_t*>(&val1));
|
||||
}
|
||||
case CalpontSystemCatalog::TIME:
|
||||
{
|
||||
DateTime aDateTime = static_cast<DateTime>(nowDatetime());
|
||||
Time aTime = parm[0]->data()->getTimeIntVal(row, isNull);
|
||||
aTime.day = 0;
|
||||
if ((aTime.hour < 0) || (aTime.is_neg))
|
||||
{
|
||||
aTime.hour = -abs(aTime.hour);
|
||||
aTime.minute = -abs(aTime.minute);
|
||||
aTime.second = -abs(aTime.second);
|
||||
aTime.msecond = -abs(aTime.msecond);
|
||||
}
|
||||
|
||||
aDateTime.hour = 0;
|
||||
aDateTime.minute = 0;
|
||||
aDateTime.second = 0;
|
||||
aDateTime.msecond = 0;
|
||||
val = addTime(aDateTime, aTime);
|
||||
return val;
|
||||
}
|
||||
|
||||
|
||||
default:
|
||||
{
|
||||
@ -814,6 +862,26 @@ int64_t Func_cast_datetime::getDatetimeIntVal(rowgroup::Row& row,
|
||||
return parm[0]->data()->getDatetimeIntVal(row, isNull);
|
||||
}
|
||||
|
||||
case CalpontSystemCatalog::TIME:
|
||||
{
|
||||
DateTime aDateTime = static_cast<DateTime>(nowDatetime());
|
||||
Time aTime = parm[0]->data()->getTimeIntVal(row, isNull);
|
||||
aDateTime.hour = 0;
|
||||
aDateTime.minute = 0;
|
||||
aDateTime.second = 0;
|
||||
aDateTime.msecond = 0;
|
||||
if ((aTime.hour < 0) || (aTime.is_neg))
|
||||
{
|
||||
aTime.hour = -abs(aTime.hour);
|
||||
aTime.minute = -abs(aTime.minute);
|
||||
aTime.second = -abs(aTime.second);
|
||||
aTime.msecond = -abs(aTime.msecond);
|
||||
}
|
||||
aTime.day = 0;
|
||||
return addTime(aDateTime, aTime);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
{
|
||||
isNull = true;
|
||||
|
Reference in New Issue
Block a user