1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-08-05 16:15:50 +03:00

Merge pull request #21 from mariadb-corporation/MCOL-329

MCOL-329
This commit is contained in:
dhall-InfiniDB
2016-09-27 14:37:51 -05:00
committed by GitHub
4 changed files with 43 additions and 28 deletions

View File

@@ -1805,6 +1805,14 @@ int64_t DataConvert::intToDate(int64_t data)
//snprintf( buf, 10, "%llu", (long long unsigned int)data); //snprintf( buf, 10, "%llu", (long long unsigned int)data);
//string date = buf; //string date = buf;
char buf[21] = {0}; char buf[21] = {0};
Date aday;
if (data == 0)
{
aday.year = 0;
aday.month = 0;
aday.day = 0;
return *(reinterpret_cast<uint32_t*>(&aday));
}
snprintf( buf, 15, "%llu", (long long unsigned int)data); snprintf( buf, 15, "%llu", (long long unsigned int)data);
string year, month, day, hour, min, sec, msec; string year, month, day, hour, min, sec, msec;
@@ -1866,7 +1874,6 @@ int64_t DataConvert::intToDate(int64_t data)
default: default:
return -1; return -1;
} }
Date aday;
if (year.empty()) if (year.empty())
{ {
// MMDD format. assume current year // MMDD format. assume current year
@@ -1900,6 +1907,20 @@ int64_t DataConvert::intToDatetime(int64_t data, bool* date)
{ {
bool isDate = false; bool isDate = false;
char buf[21] = {0}; char buf[21] = {0};
DateTime adaytime;
if (data == 0)
{
adaytime.year = 0;
adaytime.month = 0;
adaytime.day = 0;
adaytime.hour = 0;
adaytime.minute = 0;
adaytime.second = 0;
adaytime.msecond = 0;
if (date)
*date = true;
return *(reinterpret_cast<uint64_t*>(&adaytime));
}
snprintf( buf, 15, "%llu", (long long unsigned int)data); snprintf( buf, 15, "%llu", (long long unsigned int)data);
//string date = buf; //string date = buf;
string year, month, day, hour, min, sec, msec; string year, month, day, hour, min, sec, msec;
@@ -1964,7 +1985,7 @@ int64_t DataConvert::intToDatetime(int64_t data, bool* date)
default: default:
return -1; return -1;
} }
DateTime adaytime;
if (year.empty()) if (year.empty())
{ {
// MMDD format. assume current year // MMDD format. assume current year

View File

@@ -509,13 +509,6 @@ int32_t Func_cast_date::getDateIntVal(rowgroup::Row& row,
} }
case execplan::CalpontSystemCatalog::DECIMAL: case execplan::CalpontSystemCatalog::DECIMAL:
case execplan::CalpontSystemCatalog::UDECIMAL: case execplan::CalpontSystemCatalog::UDECIMAL:
{
if (parm[0]->data()->resultType().scale != 0)
{
isNull = true;
break;
}
else
{ {
val = dataconvert::DataConvert::intToDate(parm[0]->data()->getIntVal(row, isNull)); val = dataconvert::DataConvert::intToDate(parm[0]->data()->getIntVal(row, isNull));
if (val == -1) if (val == -1)
@@ -524,7 +517,6 @@ int32_t Func_cast_date::getDateIntVal(rowgroup::Row& row,
return val; return val;
break; break;
} }
}
case execplan::CalpontSystemCatalog::VARCHAR: case execplan::CalpontSystemCatalog::VARCHAR:
case execplan::CalpontSystemCatalog::CHAR: case execplan::CalpontSystemCatalog::CHAR:
{ {
@@ -714,19 +706,12 @@ int64_t Func_cast_datetime::getDatetimeIntVal(rowgroup::Row& row,
} }
case execplan::CalpontSystemCatalog::DECIMAL: case execplan::CalpontSystemCatalog::DECIMAL:
case execplan::CalpontSystemCatalog::UDECIMAL: case execplan::CalpontSystemCatalog::UDECIMAL:
{
if (parm[0]->data()->resultType().scale)
{ {
val = dataconvert::DataConvert::intToDatetime(parm[0]->data()->getIntVal(row, isNull)); val = dataconvert::DataConvert::intToDatetime(parm[0]->data()->getIntVal(row, isNull));
if (val == -1) if (val == -1)
isNull = true; isNull = true;
else else
return val; return val;
}
else
{
isNull = true;
}
break; break;
} }
case execplan::CalpontSystemCatalog::VARCHAR: case execplan::CalpontSystemCatalog::VARCHAR:

View File

@@ -78,8 +78,15 @@ uint64_t makedate(rowgroup::Row& row,
isNull = true; isNull = true;
return 0; return 0;
} }
if (year < 70)
if (year < 1000 || year > 9999) { {
year = 2000 + year;
}
else if (year < 100)
{
year = 1900 + year;
}
else if (year < 1000 || year > 9999) {
isNull = true; isNull = true;
return 0; return 0;
} }

View File

@@ -75,6 +75,8 @@ int64_t Func_year::getIntVal(rowgroup::Row& row,
case CalpontSystemCatalog::SMALLINT: case CalpontSystemCatalog::SMALLINT:
case CalpontSystemCatalog::TINYINT: case CalpontSystemCatalog::TINYINT:
case CalpontSystemCatalog::INT: case CalpontSystemCatalog::INT:
case CalpontSystemCatalog::FLOAT:
case CalpontSystemCatalog::DOUBLE:
val = dataconvert::DataConvert::intToDatetime(parm[0]->data()->getIntVal(row, isNull)); val = dataconvert::DataConvert::intToDatetime(parm[0]->data()->getIntVal(row, isNull));
if (val == -1) if (val == -1)
{ {