From 2a3c5e59c7cb971a7c6bde93d5dcfa8b9372144a Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Tue, 17 Jun 2014 01:00:51 -0400 Subject: [PATCH] Variant - Corrected handling for ::operator_partial when one of the operands is trivial. --- src/Variant.cpp | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/src/Variant.cpp b/src/Variant.cpp index 49f61f5d7..056e05f0d 100644 --- a/src/Variant.cpp +++ b/src/Variant.cpp @@ -1022,26 +1022,28 @@ bool Variant::operator_partial (const Variant& other) const case type_integer: case type_real: case type_string: - if (left.trivial () || right.trivial ()) - return false; + { + right.cast (type_string); + int left_len = left._string.length (); + int right_len = right._string.length (); - right.cast (type_string); - if (left._string.length () < right._string.length ()) - return false; + if ((left_len == 0 && right_len != 0) || + (left_len != 0 && right_len == 0)) + return false; - return left._string.substr (0, right._string.length ()) == right._string; + // Dodgy. + if (left._string.length () < right._string.length ()) + return false; + + return left._string.substr (0, right._string.length ()) == right._string; + } // TODO Implement same-day comparison. case type_date: - if (left.trivial () || right.trivial ()) - return false; - left.cast (type_date); return left._date == right._date; case type_duration: - if (left.trivial () || right.trivial ()) - return false; left.cast (type_duration); return left._duration == right._duration; @@ -1061,9 +1063,6 @@ bool Variant::operator_partial (const Variant& other) const case type_string: case type_date: case type_duration: - if (left.trivial () || right.trivial ()) - return false; - right.cast (type_date); return left._date == right._date; } @@ -1082,9 +1081,6 @@ bool Variant::operator_partial (const Variant& other) const case type_string: case type_date: case type_duration: - if (left.trivial () || right.trivial ()) - return false; - right.cast (type_duration); return left._duration == right._duration; }