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

MCOL-392 Add initial TIME datatype support

This commit is contained in:
Andrew Hutchings
2018-04-23 19:20:31 +01:00
parent b584a7f555
commit 3c1ebd8b94
109 changed files with 2241 additions and 47 deletions

View File

@ -191,6 +191,15 @@ int64_t Func_cast_signed::getIntVal(Row& row,
}
break;
case execplan::CalpontSystemCatalog::TIME:
{
int64_t time = parm[0]->data()->getTimeIntVal(row, isNull);
Time dt(time);
return dt.convertToMySQLint();
}
break;
default:
{
std::ostringstream oss;
@ -313,6 +322,15 @@ uint64_t Func_cast_unsigned::getUintVal(Row& row,
}
break;
case execplan::CalpontSystemCatalog::TIME:
{
int64_t time = parm[0]->data()->getTimeIntVal(row, isNull);
Time dt(time);
return dt.convertToMySQLint();
}
break;
default:
{
std::ostringstream oss;
@ -805,6 +823,85 @@ int64_t Func_cast_datetime::getDatetimeIntVal(rowgroup::Row& row,
return -1;
}
int64_t Func_cast_datetime::getTimeIntVal(rowgroup::Row& row,
FunctionParm& parm,
bool& isNull,
execplan::CalpontSystemCatalog::ColType& operationColType)
{
int64_t val;
switch (parm[0]->data()->resultType().colDataType)
{
case execplan::CalpontSystemCatalog::BIGINT:
case execplan::CalpontSystemCatalog::INT:
case execplan::CalpontSystemCatalog::MEDINT:
case execplan::CalpontSystemCatalog::TINYINT:
case execplan::CalpontSystemCatalog::SMALLINT:
case execplan::CalpontSystemCatalog::UBIGINT:
case execplan::CalpontSystemCatalog::UINT:
case execplan::CalpontSystemCatalog::UMEDINT:
case execplan::CalpontSystemCatalog::UTINYINT:
case execplan::CalpontSystemCatalog::USMALLINT:
{
val = dataconvert::DataConvert::intToTime(parm[0]->data()->getIntVal(row, isNull));
if (val == -1)
isNull = true;
else
return val;
break;
}
case execplan::CalpontSystemCatalog::DECIMAL:
case execplan::CalpontSystemCatalog::UDECIMAL:
{
val = dataconvert::DataConvert::intToTime(parm[0]->data()->getIntVal(row, isNull));
if (val == -1)
isNull = true;
else
return val;
break;
}
case execplan::CalpontSystemCatalog::VARCHAR:
case execplan::CalpontSystemCatalog::CHAR:
case execplan::CalpontSystemCatalog::TEXT:
{
val = dataconvert::DataConvert::stringToTime(parm[0]->data()->getStrVal(row, isNull));
if (val == -1)
isNull = true;
else
return val;
break;
}
case execplan::CalpontSystemCatalog::DATE:
{
return parm[0]->data()->getTimeIntVal(row, isNull);
}
case execplan::CalpontSystemCatalog::DATETIME:
{
return parm[0]->data()->getTimeIntVal(row, isNull);
}
default:
{
isNull = true;
}
}
return -1;
}
//
// Func_cast_decimal
//
@ -1138,6 +1235,25 @@ IDB_Decimal Func_cast_decimal::getDecimalVal(Row& row,
}
break;
case execplan::CalpontSystemCatalog::TIME:
{
int32_t s = 0;
string value = dataconvert::DataConvert::timeToString1(parm[0]->data()->getTimeIntVal(row, isNull));
//strip off micro seconds
string date = value.substr(0, 14);
int64_t x = atoll(date.c_str());
if (!isNull)
{
decimal.value = x;
decimal.scale = s;
}
}
break;
default:
{
std::ostringstream oss;