diff options
author | Davis Haupt <davis.haupt@mongodb.com> | 2022-12-05 22:25:27 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-12-05 23:49:52 +0000 |
commit | 1040c746da55b24f02f3f9715e91c57aeeccc8e6 (patch) | |
tree | 293a10b847748e9d16fc8e97a8f3b6b443464ff5 /src/mongo/db/exec | |
parent | dca926506ac48399abba8a764328c43d08b010a6 (diff) | |
download | mongo-1040c746da55b24f02f3f9715e91c57aeeccc8e6.tar.gz |
SERVER-25823 add bitwise AND, OR, XOR to the agg language
Diffstat (limited to 'src/mongo/db/exec')
-rw-r--r-- | src/mongo/db/exec/document_value/value.cpp | 21 | ||||
-rw-r--r-- | src/mongo/db/exec/document_value/value.h | 4 |
2 files changed, 25 insertions, 0 deletions
diff --git a/src/mongo/db/exec/document_value/value.cpp b/src/mongo/db/exec/document_value/value.cpp index 97573281dbb..ccb612032f1 100644 --- a/src/mongo/db/exec/document_value/value.cpp +++ b/src/mongo/db/exec/document_value/value.cpp @@ -285,6 +285,27 @@ Value::Value(const vector<Document>& vec) : _storage(Array) { _storage.putVector(std::move(storageVec)); } +Value::Value(const SafeNum& value) : _storage(value.type()) { + switch (value.type()) { + case EOO: + break; + case NumberInt: + _storage.intValue = value._value.int32Val; + break; + case NumberLong: + _storage.longValue = value._value.int64Val; + break; + case NumberDouble: + _storage.doubleValue = value._value.doubleVal; + break; + case NumberDecimal: + _storage.putDecimal(Decimal128(value._value.decimalVal)); + break; + default: + MONGO_UNREACHABLE; + } +} + Value Value::createIntOrLong(long long longValue) { int intValue = longValue; if (intValue != longValue) { diff --git a/src/mongo/db/exec/document_value/value.h b/src/mongo/db/exec/document_value/value.h index 7da4b971c34..ab2e2c02934 100644 --- a/src/mongo/db/exec/document_value/value.h +++ b/src/mongo/db/exec/document_value/value.h @@ -33,6 +33,7 @@ #include "mongo/base/string_data.h" #include "mongo/db/exec/document_value/value_internal.h" #include "mongo/util/concepts.h" +#include "mongo/util/safe_num.h" #include "mongo/util/uuid.h" namespace mongo { @@ -146,6 +147,9 @@ public: /// Deep-convert from BSONElement to Value explicit Value(const BSONElement& elem); + /// Create a value from a SafeNum. + explicit Value(const SafeNum& value); + /** Construct a long or integer-valued Value. * |