summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathias Stearn <mathias@10gen.com>2009-12-30 17:55:57 -0500
committerMathias Stearn <mathias@10gen.com>2009-12-30 17:56:44 -0500
commit692b618d7d43df3a6ceb86d03d38052918f57b27 (patch)
tree7c374370c351e2b3645ac0e8bf1f468a430f11f3
parentb04c8cfe2567fb54a1e1706e78f45940658adb7c (diff)
downloadmongo-692b618d7d43df3a6ceb86d03d38052918f57b27.tar.gz
JSON parser supports 'new Date(1234)' SERVER-461
-rw-r--r--db/json.cpp2
-rw-r--r--dbtests/jsontests.cpp19
2 files changed, 18 insertions, 3 deletions
diff --git a/db/json.cpp b/db/json.cpp
index 924d84bbc90..e5a7fef843d 100644
--- a/db/json.cpp
+++ b/db/json.cpp
@@ -509,7 +509,7 @@ public:
// TODO: this will need to use a signed parser at some point
date = dateS | dateT;
dateS = ch_p( '{' ) >> "\"$date\"" >> ':' >> uint_parser< Date_t >()[ dateValue( self.b ) ] >> '}';
- dateT = str_p( "Date" ) >> '(' >> uint_parser< Date_t >()[ dateValue( self.b ) ] >> ')';
+ dateT = !str_p("new") >> str_p( "Date" ) >> '(' >> uint_parser< Date_t >()[ dateValue( self.b ) ] >> ')';
regex = regexS | regexT;
regexS = ch_p( '{' ) >> "\"$regex\"" >> ':' >> str[ regexValue( self.b ) ] >> ',' >> "\"$options\"" >> ':' >> lexeme_d[ '"' >> ( *( alpha_p ) )[ regexOptions( self.b ) ] >> '"' ] >> '}';
diff --git a/dbtests/jsontests.cpp b/dbtests/jsontests.cpp
index c671d2bc8dc..3575c3d8e41 100644
--- a/dbtests/jsontests.cpp
+++ b/dbtests/jsontests.cpp
@@ -950,7 +950,7 @@ namespace JsonTests {
}
};
- class EmbeddedDates : public Base {
+ class EmbeddedDatesBase : public Base {
public:
virtual void run(){
@@ -971,11 +971,24 @@ namespace JsonTests {
b.append( "time.valid" , e.obj() );
return b.obj();
}
+ virtual string json() const = 0;
+ };
+ struct EmbeddedDatesFormat1 : EmbeddedDatesBase {
string json() const {
return "{ \"time.valid\" : { $gt : { \"$date\" : 1257829200000 } , $lt : { \"$date\" : 1257829200100 } } }";
}
};
+ struct EmbeddedDatesFormat2 : EmbeddedDatesBase {
+ string json() const {
+ return "{ \"time.valid\" : { $gt : Date(1257829200000) , $lt : Date( 1257829200100 ) } }";
+ }
+ };
+ struct EmbeddedDatesFormat3 : EmbeddedDatesBase {
+ string json() const {
+ return "{ \"time.valid\" : { $gt : new Date(1257829200000) , $lt : new Date( 1257829200100 ) } }";
+ }
+ };
} // namespace FromJsonTests
@@ -1058,7 +1071,9 @@ namespace JsonTests {
add< FromJsonTests::ObjectId2 >();
add< FromJsonTests::NumericTypes >();
add< FromJsonTests::NegativeNumericTypes >();
- add< FromJsonTests::EmbeddedDates >();
+ add< FromJsonTests::EmbeddedDatesFormat1 >();
+ add< FromJsonTests::EmbeddedDatesFormat2 >();
+ add< FromJsonTests::EmbeddedDatesFormat3 >();
}
} myall;