From d551b7d6e0e6fa18cedb24cbf9e658926678c9f1 Mon Sep 17 00:00:00 2001 From: Andrew Hutchings Date: Wed, 14 Sep 2016 19:58:11 +0100 Subject: [PATCH] MCOL-298 Fix saturated date/datetime handling Saturated DML updates would be set to NULL as were saturated cpimport values. This sets them to the zero date/datetime value. --- utils/dataconvert/dataconvert.cpp | 22 +++-------------- writeengine/bulk/we_bulkloadbuffer.cpp | 34 +++----------------------- writeengine/bulk/we_tableinfo.cpp | 17 +++---------- writeengine/splitter/we_sdhandler.cpp | 4 +-- 4 files changed, 14 insertions(+), 63 deletions(-) diff --git a/utils/dataconvert/dataconvert.cpp b/utils/dataconvert/dataconvert.cpp index fbe599c33..27da7ccce 100644 --- a/utils/dataconvert/dataconvert.cpp +++ b/utils/dataconvert/dataconvert.cpp @@ -1100,16 +1100,8 @@ boost::any } else { - if ( isUpdate) //@Bug 5222 set to null for ot of range value - { - uint32_t d = joblist::DATENULL; - value = d; - pushWarning = true; - } - else - { - throw QueryDataExcept("Invalid date", formatErr); - } + value = 0; + pushWarning = true; } } break; @@ -1123,14 +1115,8 @@ boost::any } else { - if ( isUpdate) //@Bug 5222 set to null for ot of range value - { - uint64_t d = joblist::DATETIMENULL; - value = d; - pushWarning = true; - } - else - throw QueryDataExcept("Invalid datetime", formatErr); + value = 0; + pushWarning = true; } } break; diff --git a/writeengine/bulk/we_bulkloadbuffer.cpp b/writeengine/bulk/we_bulkloadbuffer.cpp index c28ebc02a..9f75c6873 100644 --- a/writeengine/bulk/we_bulkloadbuffer.cpp +++ b/writeengine/bulk/we_bulkloadbuffer.cpp @@ -965,19 +965,8 @@ void BulkLoadBuffer::convert(char *field, int fieldLength, bufStats.maxBufferVal = llDate; } else { - if(!column.fNotNull) - { - // @bug 3375: reset invalid date/time to NULL, - // and track as a saturated value. - llDate = joblist::DATETIMENULL; - bufStats.satCount++; - } - else - { - //Bug5383 - 4.0@1400-01-01 00:00:00 Below it is 0000-01-01 00:00:00 - llDate = 0x578104000000000; //394082834458869760 - bufStats.satCount++; - } + llDate = 0; + bufStats.satCount++; } pVal = &llDate; @@ -1262,23 +1251,8 @@ void BulkLoadBuffer::convert(char *field, int fieldLength, bufStats.maxBufferVal = iDate; } else { - - - if (!column.fNotNull) - { - // @bug 3375: reset invalid date to NULL, - // and track as a saturated value. - iDate = joblist::DATENULL; - bufStats.satCount++; - } - else - { - // Bug5383 - 1400-01-01 -// iDate = 0x5781068; // for versions below 4.0 it is 0x1068 - // MariaDB bug 740 - iDate = 0x578107E; - bufStats.satCount++; - } + iDate = 0; + bufStats.satCount++; } pVal = &iDate; diff --git a/writeengine/bulk/we_tableinfo.cpp b/writeengine/bulk/we_tableinfo.cpp index 76a51a397..0e651b55d 100644 --- a/writeengine/bulk/we_tableinfo.cpp +++ b/writeengine/bulk/we_tableinfo.cpp @@ -924,24 +924,15 @@ void TableInfo::reportTotals(double elapsedTime) fColumns[i].column.colName << "; Number of "; if (fColumns[i].column.dataType == CalpontSystemCatalog::DATE) { - //bug5383 - if(!fColumns[i].column.fNotNull) - ossSatCnt << - "invalid dates replaced with null: "; - else - ossSatCnt << - "invalid dates replaced with minimum value : "; + ossSatCnt << + "invalid dates replaced with zero value : "; } else if (fColumns[i].column.dataType == CalpontSystemCatalog::DATETIME) { //bug5383 - if(!fColumns[i].column.fNotNull) - ossSatCnt << - "invalid date/times replaced with null: "; - else - ossSatCnt << - "invalid date/times replaced with minimum value : "; + ossSatCnt << + "invalid date/times replaced with zero value : "; } else if (fColumns[i].column.dataType == CalpontSystemCatalog::CHAR) ossSatCnt << diff --git a/writeengine/splitter/we_sdhandler.cpp b/writeengine/splitter/we_sdhandler.cpp index bea25bb42..28ded9649 100644 --- a/writeengine/splitter/we_sdhandler.cpp +++ b/writeengine/splitter/we_sdhandler.cpp @@ -1669,10 +1669,10 @@ void WESDHandler::onCleanupResult(int PmId, messageqcpp::SBS& Sbs) { switch ((*aIt).fColType) { case CalpontSystemCatalog::DATE: - ossSatCnt << "invalid dates replaced with null: "; + ossSatCnt << "invalid dates replaced with zero value: "; break; case CalpontSystemCatalog::DATETIME: - ossSatCnt << "invalid date/times replaced with null: "; + ossSatCnt << "invalid date/times replaced with zero value: "; break; case CalpontSystemCatalog::CHAR: ossSatCnt << "character strings truncated: ";