From 31b6660cd406a60b1b6bff37971a13a1961fde5a Mon Sep 17 00:00:00 2001 From: David Hall Date: Tue, 28 Jun 2016 17:15:11 -0500 Subject: [PATCH] MCOL-80 EXTRACT() function returned assertion error. Added code similar to mariadb code for all the INTERVAL_XXX_MICROSECOND intervals. There is still an issue with a wrong answer for INTERVAL_MINUTE_MICROSECOND. --- utils/funcexp/func_extract.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/utils/funcexp/func_extract.cpp b/utils/funcexp/func_extract.cpp index 63d1ea341..cbabd92bf 100644 --- a/utils/funcexp/func_extract.cpp +++ b/utils/funcexp/func_extract.cpp @@ -40,7 +40,7 @@ using namespace funcexp; long long dateGet( uint64_t time, IntervalColumn::interval_type unit, bool dateType ) { - uint32_t year = 0, + uint64_t year = 0, month = 0, day = 0, hour = 0, @@ -83,6 +83,9 @@ long long dateGet( uint64_t time, IntervalColumn::interval_type unit, bool dateT case IntervalColumn::INTERVAL_HOUR_MINUTE: return (hour*100)+min; case IntervalColumn::INTERVAL_HOUR_SECOND: return (hour*10000)+(min*100)+sec; case IntervalColumn::INTERVAL_MINUTE_SECOND: return (min*100)+sec; + case IntervalColumn::INTERVAL_DAY_MICROSECOND: return (((day*1000000)+(hour*10000)+(min*100)+sec)*1000000)+msec; + case IntervalColumn::INTERVAL_HOUR_MICROSECOND: return (((hour*10000)+(min*100)+sec)*1000000)+msec; + case IntervalColumn::INTERVAL_MINUTE_MICROSECOND: return (((min*100)+sec)*1000000)+msec; case IntervalColumn::INTERVAL_SECOND_MICROSECOND: return (sec*1000000)+msec; default: throw runtime_error("unit type is not supported: " + unit);