diff options
author | Mathias Stearn <mathias@10gen.com> | 2009-12-30 17:55:57 -0500 |
---|---|---|
committer | Mathias Stearn <mathias@10gen.com> | 2009-12-30 17:56:44 -0500 |
commit | 692b618d7d43df3a6ceb86d03d38052918f57b27 (patch) | |
tree | 7c374370c351e2b3645ac0e8bf1f468a430f11f3 | |
parent | b04c8cfe2567fb54a1e1706e78f45940658adb7c (diff) | |
download | mongo-692b618d7d43df3a6ceb86d03d38052918f57b27.tar.gz |
JSON parser supports 'new Date(1234)' SERVER-461
-rw-r--r-- | db/json.cpp | 2 | ||||
-rw-r--r-- | dbtests/jsontests.cpp | 19 |
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; |