diff options
author | Andrew Morrow <acm@10gen.com> | 2013-08-19 10:23:30 -0400 |
---|---|---|
committer | Andrew Morrow <acm@10gen.com> | 2013-08-20 11:48:46 -0400 |
commit | fce3b4ce8fe848c332657f3accf596e6b087bce9 (patch) | |
tree | 8d68d5d120efde72b66984687306e1aba5fffb3f /src/mongo/db/ops/modifier_bit.cpp | |
parent | a8eab606724de2d23a6cafd069f4001a031ed909 (diff) | |
download | mongo-fce3b4ce8fe848c332657f3accf596e6b087bce9.tar.gz |
SERVER-4362 Implement xor support for $bit
Diffstat (limited to 'src/mongo/db/ops/modifier_bit.cpp')
-rw-r--r-- | src/mongo/db/ops/modifier_bit.cpp | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/src/mongo/db/ops/modifier_bit.cpp b/src/mongo/db/ops/modifier_bit.cpp index 30bbc22befa..bfcc5e23ceb 100644 --- a/src/mongo/db/ops/modifier_bit.cpp +++ b/src/mongo/db/ops/modifier_bit.cpp @@ -94,25 +94,30 @@ namespace mongo { const StringData payloadFieldName = curOp.fieldName(); - const bool isAnd = (payloadFieldName == "and"); - const bool isOr = (payloadFieldName == "or"); - - if (!(isAnd || isOr)) - return Status( - ErrorCodes::BadValue, - "Only 'and' and 'or' are supported $bit sub-operators"); - if ((curOp.type() != mongo::NumberInt) && (curOp.type() != mongo::NumberLong)) return Status( ErrorCodes::BadValue, "Argument to $bit operation must be a NumberInt or NumberLong"); - const OpEntry entry = { - SafeNum(curOp), - isAnd ? &SafeNum::bitAnd : &SafeNum::bitOr - }; + SafeNumOp op = NULL; + + if (payloadFieldName == "and") { + op = &SafeNum::bitAnd; + } + else if (payloadFieldName == "or") { + op = &SafeNum::bitOr; + } + else if (payloadFieldName == "xor") { + op = &SafeNum::bitXor; + } + else { + return Status( + ErrorCodes::BadValue, + "Only 'and', 'or', and 'xor' are supported $bit sub-operators"); + } + const OpEntry entry = {SafeNum(curOp), op}; _ops.push_back(entry); } |