summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/sbe/vm/vm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/exec/sbe/vm/vm.h')
-rw-r--r--src/mongo/db/exec/sbe/vm/vm.h18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/mongo/db/exec/sbe/vm/vm.h b/src/mongo/db/exec/sbe/vm/vm.h
index 73bad25f65f..60f41c298e1 100644
--- a/src/mongo/db/exec/sbe/vm/vm.h
+++ b/src/mongo/db/exec/sbe/vm/vm.h
@@ -73,15 +73,19 @@ std::pair<value::TypeTags, value::Value> genericCompare(
case value::TypeTags::NumberDecimal: {
auto result = [&]() {
if (lhsTag == value::TypeTags::NumberDouble) {
- return op(compareDoubleToDecimal(
- value::numericCast<double>(lhsTag, lhsValue),
- value::numericCast<Decimal128>(rhsTag, rhsValue)),
+ if (value::isNaN(lhsTag, lhsValue) || value::isNaN(rhsTag, rhsValue)) {
+ return false;
+ }
+ return op(compareDoubleToDecimal(value::bitcastTo<double>(lhsValue),
+ value::bitcastTo<Decimal128>(rhsValue)),
0);
} else if (rhsTag == value::TypeTags::NumberDouble) {
- return op(
- compareDecimalToDouble(value::numericCast<Decimal128>(lhsTag, lhsValue),
- value::numericCast<double>(rhsTag, rhsValue)),
- 0);
+ if (value::isNaN(lhsTag, lhsValue) || value::isNaN(rhsTag, rhsValue)) {
+ return false;
+ }
+ return op(compareDecimalToDouble(value::bitcastTo<Decimal128>(lhsValue),
+ value::bitcastTo<double>(rhsValue)),
+ 0);
} else {
return op(value::numericCast<Decimal128>(lhsTag, lhsValue),
value::numericCast<Decimal128>(rhsTag, rhsValue));