summaryrefslogtreecommitdiff
path: root/src/mongo/db
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db')
-rw-r--r--src/mongo/db/pipeline/expression.cpp73
-rw-r--r--src/mongo/db/pipeline/expression.h19
-rw-r--r--src/mongo/db/pipeline/expression_test.cpp39
-rw-r--r--src/mongo/db/query/datetime/date_time_support.cpp46
-rw-r--r--src/mongo/db/query/datetime/date_time_support.h5
5 files changed, 0 insertions, 182 deletions
diff --git a/src/mongo/db/pipeline/expression.cpp b/src/mongo/db/pipeline/expression.cpp
index 8b3b15143b8..798d05ca285 100644
--- a/src/mongo/db/pipeline/expression.cpp
+++ b/src/mongo/db/pipeline/expression.cpp
@@ -1314,79 +1314,6 @@ void ExpressionDateFromParts::addDependencies(DepsTracker* deps) const {
}
}
-/* ---------------------- ExpressionDateFromString --------------------- */
-
-REGISTER_EXPRESSION(dateFromString, ExpressionDateFromString::parse);
-intrusive_ptr<Expression> ExpressionDateFromString::parse(
- const boost::intrusive_ptr<ExpressionContext>& expCtx,
- BSONElement expr,
- const VariablesParseState& vps) {
-
- uassert(40540,
- str::stream() << "$dateFromString only supports an object as an argument, found: "
- << typeName(expr.type()),
- expr.type() == BSONType::Object);
-
- BSONElement dateStringElem;
- const BSONObj args = expr.embeddedObject();
- for (auto&& arg : args) {
- if (arg.fieldNameStringData() == "dateString"_sd) {
- dateStringElem = arg;
- } else {
- uasserted(40541,
- str::stream() << "Unrecognized argument to $dateFromString: "
- << arg.fieldName());
- }
- }
-
- uassert(40542, "Missing 'dateString' parameter to $dateFromString", dateStringElem);
-
- return new ExpressionDateFromString(expCtx, parseOperand(expCtx, dateStringElem, vps));
-}
-
-ExpressionDateFromString::ExpressionDateFromString(
- const boost::intrusive_ptr<ExpressionContext>& expCtx, intrusive_ptr<Expression> dateString)
- : Expression(expCtx), _dateString(dateString) {}
-
-intrusive_ptr<Expression> ExpressionDateFromString::optimize() {
- _dateString = _dateString->optimize();
-
- if (dynamic_cast<ExpressionConstant*>(_dateString.get())) {
- // Everything is a constant, so we can turn into a constant.
- return ExpressionConstant::create(getExpressionContext(), evaluate(Document{}));
- }
- return this;
-}
-
-Value ExpressionDateFromString::serialize(bool explain) const {
- return Value(
- Document{{"$dateFromString", Document{{"dateString", _dateString->serialize(explain)}}}});
-}
-
-Value ExpressionDateFromString::evaluate(const Document& root) const {
- const Value dateString = _dateString->evaluate(root);
-
- if (dateString.nullish()) {
- return Value(BSONNULL);
- }
-
- uassert(40543,
- str::stream() << "$dateFromString requires that 'dateString' be a string, found: "
- << typeName(dateString.getType())
- << " with value "
- << dateString.toString(),
- dateString.getType() == BSONType::String);
- const std::string& dateTimeString = dateString.getString();
-
- auto tzdb = TimeZoneDatabase::get(getExpressionContext()->opCtx->getServiceContext());
-
- return Value(tzdb->fromString(dateTimeString));
-}
-
-void ExpressionDateFromString::addDependencies(DepsTracker* deps) const {
- _dateString->addDependencies(deps);
-}
-
/* ---------------------- ExpressionDateToParts ----------------------- */
REGISTER_EXPRESSION(dateToParts, ExpressionDateToParts::parse);
diff --git a/src/mongo/db/pipeline/expression.h b/src/mongo/db/pipeline/expression.h
index c7889305aa0..aad2ced9b55 100644
--- a/src/mongo/db/pipeline/expression.h
+++ b/src/mongo/db/pipeline/expression.h
@@ -828,25 +828,6 @@ private:
typedef ExpressionFixedArity<ExpressionCond, 3> Base;
};
-class ExpressionDateFromString final : public Expression {
-public:
- boost::intrusive_ptr<Expression> optimize() final;
- Value serialize(bool explain) const final;
- Value evaluate(const Document&) const final;
- void addDependencies(DepsTracker*) const final;
-
- static boost::intrusive_ptr<Expression> parse(
- const boost::intrusive_ptr<ExpressionContext>& expCtx,
- BSONElement expr,
- const VariablesParseState& vps);
-
-private:
- ExpressionDateFromString(const boost::intrusive_ptr<ExpressionContext>& expCtx,
- boost::intrusive_ptr<Expression> dateString);
-
- boost::intrusive_ptr<Expression> _dateString;
-};
-
class ExpressionDateFromParts final : public Expression {
public:
boost::intrusive_ptr<Expression> optimize() final;
diff --git a/src/mongo/db/pipeline/expression_test.cpp b/src/mongo/db/pipeline/expression_test.cpp
index 3ae780066e0..f89735aff56 100644
--- a/src/mongo/db/pipeline/expression_test.cpp
+++ b/src/mongo/db/pipeline/expression_test.cpp
@@ -4884,45 +4884,6 @@ TEST_F(DateExpressionTest, DoesResultInNullIfGivenNullishInput) {
} // namespace DateExpressionsTest
-namespace ExpressionDateFromStringTest {
-
-// This provides access to an ExpressionContext that has a valid ServiceContext with a
-// TimeZoneDatabase via getExpCtx(), but we'll use a different name for this test suite.
-using ExpressionDateFromStringTest = AggregationContextFixture;
-
-TEST_F(ExpressionDateFromStringTest, SerializesToObjectSyntax) {
- auto expCtx = getExpCtx();
-
- // Test that it serializes to the full format if given an object specification.
- BSONObj spec = BSON("$dateFromString" << BSON("dateString"
- << "2017-07-04T13:06:44Z"));
- auto dateExp = Expression::parseExpression(expCtx, spec, expCtx->variablesParseState);
- auto expectedSerialization = Value(
- Document{{"$dateFromString",
- Document{{"dateString", Document{{"$const", "2017-07-04T13:06:44Z"_sd}}}}}});
- ASSERT_VALUE_EQ(dateExp->serialize(true), expectedSerialization);
- ASSERT_VALUE_EQ(dateExp->serialize(false), expectedSerialization);
-}
-
-TEST_F(ExpressionDateFromStringTest, OptimizesToConstantIfAllInputsAreConstant) {
- auto expCtx = getExpCtx();
- auto spec = BSON("$dateFromString" << BSON("dateString"
- << "2017-07-04T13:09:57Z"));
- auto dateExp = Expression::parseExpression(expCtx, spec, expCtx->variablesParseState);
- ASSERT(dynamic_cast<ExpressionConstant*>(dateExp->optimize().get()));
-
- Date_t dateVal = Date_t::fromMillisSinceEpoch(1499173797000);
- ASSERT_VALUE_EQ(Value(dateVal), dateExp->evaluate(Document{}));
-
- // Test that it does *not* become a constant if dateString is not a constant.
- spec = BSON("$dateFromString" << BSON("dateString"
- << "$date"));
- dateExp = Expression::parseExpression(expCtx, spec, expCtx->variablesParseState);
- ASSERT_FALSE(dynamic_cast<ExpressionConstant*>(dateExp->optimize().get()));
-}
-
-} // namespace ExpressionDateFromStringTest
-
class All : public Suite {
public:
All() : Suite("expression") {}
diff --git a/src/mongo/db/query/datetime/date_time_support.cpp b/src/mongo/db/query/datetime/date_time_support.cpp
index 88ba04d5549..1356356665d 100644
--- a/src/mongo/db/query/datetime/date_time_support.cpp
+++ b/src/mongo/db/query/datetime/date_time_support.cpp
@@ -122,52 +122,6 @@ TimeZone TimeZoneDatabase::utcZone() {
return TimeZone{nullptr};
}
-extern "C" {
-static timelib_tzinfo* timezonedatabase_gettzinfowrapper(char* tz_id,
- const _timelib_tzdb* db,
- int* error) {
- uasserted(
- 40544,
- str::stream()
- << "passing a time zone identifier as part of the string is not allowed, found: \""
- << tz_id
- << "\"");
-
- return nullptr;
-}
-
-} // extern "C"
-
-Date_t TimeZoneDatabase::fromString(StringData dateString) const {
- std::unique_ptr<timelib_time, TimeZone::TimelibTimeDeleter> t(
- timelib_strtotime(const_cast<char*>(dateString.toString().c_str()),
- dateString.size(),
- nullptr,
- _timeZoneDatabase.get(),
- timezonedatabase_gettzinfowrapper));
-
- // If the time portion is fully missing, initialize to 0. This allows for the '%Y-%m-%d' format
- // to be passed too, which is what the BI connector may request
- if (t->h == TIMELIB_UNSET && t->i == TIMELIB_UNSET && t->s == TIMELIB_UNSET) {
- t->h = t->i = t->s = t->f = 0;
- }
-
- if (t->y == TIMELIB_UNSET || t->m == TIMELIB_UNSET || t->d == TIMELIB_UNSET ||
- t->h == TIMELIB_UNSET || t->i == TIMELIB_UNSET || t->s == TIMELIB_UNSET) {
- uasserted(40545,
- str::stream()
- << "an incomplete date/time string has been found, with elements missing: \""
- << dateString
- << "\"");
- }
-
- timelib_update_ts(t.get(), nullptr);
- timelib_unixtime2local(t.get(), t->sse);
-
- return Date_t::fromMillisSinceEpoch((static_cast<double>(t->sse) + static_cast<double>(t->f)) *
- 1000);
-}
-
TimeZone TimeZoneDatabase::getTimeZone(StringData timeZoneId) const {
auto tz = _timeZones.find(timeZoneId);
if (tz != _timeZones.end()) {
diff --git a/src/mongo/db/query/datetime/date_time_support.h b/src/mongo/db/query/datetime/date_time_support.h
index 0482cb70827..6f1e43aafad 100644
--- a/src/mongo/db/query/datetime/date_time_support.h
+++ b/src/mongo/db/query/datetime/date_time_support.h
@@ -303,11 +303,6 @@ public:
std::unique_ptr<TimeZoneDatabase> timeZoneDatabase);
/**
- * Use the timezone database to create a Date_t from a string.
- */
- Date_t fromString(StringData dateString) const;
-
- /**
* Returns a TimeZone object representing the UTC time zone.
*/
static TimeZone utcZone();