diff options
-rw-r--r-- | src/mongo/bson/oid.cpp | 4 | ||||
-rw-r--r-- | src/mongo/bson/oid.h | 7 | ||||
-rw-r--r-- | src/mongo/bson/oid_test.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/pipeline/expression_convert_test.cpp | 15 | ||||
-rw-r--r-- | src/mongo/dbtests/jsobjtests.cpp | 2 |
5 files changed, 12 insertions, 22 deletions
diff --git a/src/mongo/bson/oid.cpp b/src/mongo/bson/oid.cpp index ca9c6e558a9..26d90d97bad 100644 --- a/src/mongo/bson/oid.cpp +++ b/src/mongo/bson/oid.cpp @@ -162,6 +162,10 @@ void OID::init(Date_t date, bool max) { std::memcpy(_view().view(kInstanceUniqueOffset), &rest, kInstanceUniqueSize + kIncrementSize); } +time_t OID::asTimeT() const { + return getTimestamp(); +} + std::string OID::toString() const { return toHexLower(_data, kOIDSize); } diff --git a/src/mongo/bson/oid.h b/src/mongo/bson/oid.h index 7f4f31a4369..4474a12dbe2 100644 --- a/src/mongo/bson/oid.h +++ b/src/mongo/bson/oid.h @@ -176,8 +176,9 @@ public: */ void initFromTermNumber(int64_t term); + time_t asTimeT() const; Date_t asDateT() const { - return Date_t::fromMillisSinceEpoch(getTimestamp() * 1000LL); + return Date_t::fromMillisSinceEpoch(asTimeT() * 1000LL); } // True iff the OID is not empty @@ -197,8 +198,8 @@ public: static unsigned getMachineId(); // used by the 'features' command static void regenMachineId(); - // Timestamp is a 4-byte positive integer so we use uint32_t - typedef uint32_t Timestamp; + // Timestamp is 4 bytes so we just use int32_t + typedef int32_t Timestamp; // Wrappers so we can return stuff by value. struct InstanceUnique { diff --git a/src/mongo/bson/oid_test.cpp b/src/mongo/bson/oid_test.cpp index 6d34d6a5808..8be156ae41d 100644 --- a/src/mongo/bson/oid_test.cpp +++ b/src/mongo/bson/oid_test.cpp @@ -109,7 +109,7 @@ TEST(Basic, Deserialize) { 0xDEu, 0xADu, 0xBEu, - 0xEFu, // timestamp is 3735928559 (unsigned) + 0xEFu, // timestamp is -559038737 (signed) 0x00u, 0x00u, 0x00u, @@ -122,7 +122,7 @@ TEST(Basic, Deserialize) { OID o1 = OID::from(OIDbytes); - ASSERT_EQUALS(o1.getTimestamp(), 3735928559); + ASSERT_EQUALS(o1.getTimestamp(), -559038737); OID::InstanceUnique u = o1.getInstanceUnique(); for (std::size_t i = 0; i < OID::kInstanceUniqueSize; ++i) { ASSERT_EQUALS(u.bytes[i], 0x00u); @@ -158,7 +158,7 @@ TEST(Basic, FromTerm) { auto oidHead = oidStr.substr(0, 8); auto oidTail = oidStr.substr(oidStr.length() - 1); - ASSERT_EQUALS("ffffffff", oidHead); + ASSERT_EQUALS("7fffffff", oidHead); ASSERT_EQUALS(term, std::stoi(oidTail)); } } diff --git a/src/mongo/db/pipeline/expression_convert_test.cpp b/src/mongo/db/pipeline/expression_convert_test.cpp index 9db02ed058e..3cc94e92e8e 100644 --- a/src/mongo/db/pipeline/expression_convert_test.cpp +++ b/src/mongo/db/pipeline/expression_convert_test.cpp @@ -1947,21 +1947,6 @@ TEST_F(ExpressionConvertTest, ConvertObjectIdToDate) { "2017-10-19T13:30:00.000Z"); } -TEST_F(ExpressionConvertTest, ConvertObjectIdToDateFuture) { - auto expCtx = getExpCtx(); - - auto spec = BSON("$convert" << BSON("input" - << "$path1" - << "to" - << "date")); - auto convertExp = Expression::parseExpression(expCtx, spec, expCtx->variablesParseState); - - Document oidInput{{"path1", OID("8071be82122d3312074f0300")}}; - - ASSERT_EQ(dateToISOStringUTC(convertExp->evaluate(oidInput).getDate()), - "2038-04-15T09:53:06.000Z"); -} - TEST_F(ExpressionConvertTest, ConvertStringToInt) { auto expCtx = getExpCtx(); diff --git a/src/mongo/dbtests/jsobjtests.cpp b/src/mongo/dbtests/jsobjtests.cpp index 68ce6c52d63..b670cab1dae 100644 --- a/src/mongo/dbtests/jsobjtests.cpp +++ b/src/mongo/dbtests/jsobjtests.cpp @@ -1390,7 +1390,7 @@ public: oid.init(base); ASSERT_EQUALS(base.toMillisSinceEpoch() / 1000, oid.asDateT().toMillisSinceEpoch() / 1000); - ASSERT_EQUALS(base.toTimeT(), static_cast<time_t>(oid.getTimestamp())); + ASSERT_EQUALS(base.toTimeT(), oid.asTimeT()); } }; |