summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec
diff options
context:
space:
mode:
authorDavis Haupt <davis.haupt@mongodb.com>2022-12-05 22:25:27 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-12-05 23:49:52 +0000
commit1040c746da55b24f02f3f9715e91c57aeeccc8e6 (patch)
tree293a10b847748e9d16fc8e97a8f3b6b443464ff5 /src/mongo/db/exec
parentdca926506ac48399abba8a764328c43d08b010a6 (diff)
downloadmongo-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.cpp21
-rw-r--r--src/mongo/db/exec/document_value/value.h4
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.
*