From e0ecb7a2d82286909a43d645035dd8f1d5e773a3 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Sun, 21 Aug 2011 16:54:50 -0400 Subject: [PATCH] E9 - Relational Operators - Added missing-data handling for the relational operators <, <=, > and >=. --- src/E9.cpp | 64 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 20 deletions(-) diff --git a/src/E9.cpp b/src/E9.cpp index 0824ed49c..a7f81f197 100644 --- a/src/E9.cpp +++ b/src/E9.cpp @@ -290,12 +290,18 @@ void E9::operator_lt (Arg& result, Arg& left, Arg& right) else if (left._type == Arg::type_date || right._type == Arg::type_date) { - Date left_date (left._value, _dateformat); - Date right_date (right._value, _dateformat); + if (left._value == "" || + right._value == "") + result._value = "false"; + else + { + Date left_date (left._value, _dateformat); + Date right_date (right._value, _dateformat); - result._value = (left_date < right_date) - ? "true" - : "false"; + result._value = (left_date < right_date) + ? "true" + : "false"; + } } else { @@ -323,12 +329,18 @@ void E9::operator_lte (Arg& result, Arg& left, Arg& right) else if (left._type == Arg::type_date || right._type == Arg::type_date) { - Date left_date (left._value, _dateformat); - Date right_date (right._value, _dateformat); + if (left._value == "" || + right._value == "") + result._value = "false"; + else + { + Date left_date (left._value, _dateformat); + Date right_date (right._value, _dateformat); - result._value = (left_date <= right_date) - ? "true" - : "false"; + result._value = (left_date <= right_date) + ? "true" + : "false"; + } } else { @@ -356,12 +368,18 @@ void E9::operator_gte (Arg& result, Arg& left, Arg& right) else if (left._type == Arg::type_date || right._type == Arg::type_date) { - Date left_date (left._value, _dateformat); - Date right_date (right._value, _dateformat); + if (left._value == "" || + right._value == "") + result._value = "false"; + else + { + Date left_date (left._value, _dateformat); + Date right_date (right._value, _dateformat); - result._value = (left_date >= right_date) - ? "true" - : "false"; + result._value = (left_date >= right_date) + ? "true" + : "false"; + } } else { @@ -388,12 +406,18 @@ void E9::operator_gt (Arg& result, Arg& left, Arg& right) else if (left._type == Arg::type_date || right._type == Arg::type_date) { - Date left_date (left._value, _dateformat); - Date right_date (right._value, _dateformat); + if (left._value == "" || + right._value == "") + result._value = "false"; + else + { + Date left_date (left._value, _dateformat); + Date right_date (right._value, _dateformat); - result._value = result._value = (left_date > right_date) - ? "true" - : "false"; + result._value = result._value = (left_date > right_date) + ? "true" + : "false"; + } } else {