summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qpid/cpp/src/qpid/broker/SelectorExpression.cpp40
-rw-r--r--qpid/cpp/src/tests/Selector.cpp5
2 files changed, 19 insertions, 26 deletions
diff --git a/qpid/cpp/src/qpid/broker/SelectorExpression.cpp b/qpid/cpp/src/qpid/broker/SelectorExpression.cpp
index 62de067396..8c6d82cc6f 100644
--- a/qpid/cpp/src/qpid/broker/SelectorExpression.cpp
+++ b/qpid/cpp/src/qpid/broker/SelectorExpression.cpp
@@ -184,17 +184,11 @@ public:
BoolOrNone eval_bool(const SelectorEnv& env) const {
BoolOrNone bn1(e1->eval_bool(env));
- if (bn1==BN_TRUE) {
- return BN_TRUE;
- } else {
- BoolOrNone bn2(e2->eval_bool(env));
- if (bn2==BN_TRUE) {
- return BN_TRUE;
- } else {
- if (bn1==BN_FALSE && bn2==BN_FALSE) return BN_FALSE;
- else return BN_UNKNOWN;
- }
- }
+ if (bn1==BN_TRUE) return BN_TRUE;
+ BoolOrNone bn2(e2->eval_bool(env));
+ if (bn2==BN_TRUE) return BN_TRUE;
+ if (bn1==BN_FALSE && bn2==BN_FALSE) return BN_FALSE;
+ else return BN_UNKNOWN;
}
};
@@ -214,17 +208,11 @@ public:
BoolOrNone eval_bool(const SelectorEnv& env) const {
BoolOrNone bn1(e1->eval_bool(env));
- if (bn1==BN_FALSE) {
- return BN_FALSE;
- } else {
- BoolOrNone bn2(e2->eval_bool(env));
- if (bn2==BN_FALSE) {
- return BN_FALSE;
- } else {
- if (bn1==BN_TRUE && bn2==BN_TRUE) return BN_TRUE;
- else return BN_UNKNOWN;
- }
- }
+ if (bn1==BN_FALSE) return BN_FALSE;
+ BoolOrNone bn2(e2->eval_bool(env));
+ if (bn2==BN_FALSE) return BN_FALSE;
+ if (bn1==BN_TRUE && bn2==BN_TRUE) return BN_TRUE;
+ else return BN_UNKNOWN;
}
};
@@ -340,11 +328,11 @@ public:
Value ve(e->eval(env));
if (unknown(ve)) return BN_UNKNOWN;
Value vl(l->eval(env));
- if (unknown(vl)) return BN_UNKNOWN;
- if (ve<vl) return BN_FALSE;
+ if (!unknown(vl) && ve<vl) return BN_FALSE;
Value vu(u->eval(env));
- if (unknown(vu)) return BN_UNKNOWN;
- return BoolOrNone(ve<=vu);
+ if (!unknown(vu) && ve>vu) return BN_FALSE;
+ if (unknown(vl) || unknown(vu)) return BN_UNKNOWN;
+ return BN_TRUE;
}
};
diff --git a/qpid/cpp/src/tests/Selector.cpp b/qpid/cpp/src/tests/Selector.cpp
index 1b0eea3d7e..288d8ee6c3 100644
--- a/qpid/cpp/src/tests/Selector.cpp
+++ b/qpid/cpp/src/tests/Selector.cpp
@@ -298,6 +298,11 @@ QPID_AUTO_TEST_CASE(numericEval)
BOOST_CHECK(!qb::Selector("A<>17 and B=5.6e17").eval(env));
BOOST_CHECK(qb::Selector("A BETWEEN B and 98.5").eval(env));
BOOST_CHECK(!qb::Selector("B NOT BETWEEN 35 AND 100").eval(env));
+ BOOST_CHECK(!qb::Selector("A BETWEEN B and 40").eval(env));
+ BOOST_CHECK(!qb::Selector("A BETWEEN C and 40").eval(env));
+ BOOST_CHECK(!qb::Selector("A BETWEEN 45 and C").eval(env));
+ BOOST_CHECK(!qb::Selector("A BETWEEN 40 and C AND A NOT BETWEEN 40 and C").eval(env));
+ BOOST_CHECK(!qb::Selector("A BETWEEN C and 45 AND A NOT BETWEEN C and 45").eval(env));
}
QPID_AUTO_TEST_CASE(comparisonEval)