diff options
author | Scott Hernandez <scotthernandez@gmail.com> | 2013-02-28 18:19:47 -0500 |
---|---|---|
committer | Scott Hernandez <scotthernandez@gmail.com> | 2013-02-28 18:19:47 -0500 |
commit | 6ea3fb90c6a90cad47501c4581c7206545f5e3f3 (patch) | |
tree | 69d4d43ec16894dd18855337028568abbfecbe9a /src/mongo | |
parent | e63cc1987e8e69e53158a02f393b5a8c8993f492 (diff) | |
download | mongo-6ea3fb90c6a90cad47501c4581c7206545f5e3f3.tar.gz |
SERVER-7718: JS Timestamp constructor now in seconds (not millis anymore)
Diffstat (limited to 'src/mongo')
-rw-r--r-- | src/mongo/scripting/engine_spidermonkey.cpp | 2 | ||||
-rw-r--r-- | src/mongo/scripting/engine_v8.cpp | 6 | ||||
-rw-r--r-- | src/mongo/scripting/sm_db.cpp | 9 | ||||
-rw-r--r-- | src/mongo/scripting/v8_db.cpp | 6 |
4 files changed, 18 insertions, 5 deletions
diff --git a/src/mongo/scripting/engine_spidermonkey.cpp b/src/mongo/scripting/engine_spidermonkey.cpp index 3664ae97479..f43ea2201ef 100644 --- a/src/mongo/scripting/engine_spidermonkey.cpp +++ b/src/mongo/scripting/engine_spidermonkey.cpp @@ -592,7 +592,7 @@ namespace spidermonkey { case Timestamp: { JSObject * o = JS_NewObject( _context , ×tamp_class , 0 , 0 ); CHECKNEWOBJECT(o,_context,"Timestamp1"); - setProperty( o , "t" , toval( (double)(e.timestampTime()) ) ); + setProperty( o , "t" , toval( (double)(e.timestampTime() / 1000) ) ); setProperty( o , "i" , toval( (double)(e.timestampInc()) ) ); return OBJECT_TO_JSVAL( o ); } diff --git a/src/mongo/scripting/engine_v8.cpp b/src/mongo/scripting/engine_v8.cpp index 2cd074fdc1a..e290240f31f 100644 --- a/src/mongo/scripting/engine_v8.cpp +++ b/src/mongo/scripting/engine_v8.cpp @@ -1385,7 +1385,7 @@ namespace mongo { case mongo::Timestamp: { v8::Local<v8::Object> sub = readOnly ? readOnlyObjects->NewInstance() : internalFieldObjects->NewInstance(); - sub->ForceSet(v8::String::New("t"), v8::Number::New(f.timestampTime())); + sub->ForceSet(v8::String::New("t"), v8::Number::New(f.timestampTime() / 1000)); sub->ForceSet(v8::String::New("i"), v8::Number::New(f.timestampInc())); sub->SetInternalField(0, v8::Uint32::New(f.type())); o->ForceSet(name, sub); @@ -1578,7 +1578,7 @@ namespace mongo { } case mongo::Timestamp: instance = internalFieldObjects->NewInstance(); - instance->ForceSet(v8::String::New("t"), v8::Number::New(elem.timestampTime())); + instance->ForceSet(v8::String::New("t"), v8::Number::New(elem.timestampTime() / 1000 )); instance->ForceSet(v8::String::New("i"), v8::Number::New(elem.timestampInc())); instance->SetInternalField(0, v8::Uint32::New(elem.type())); return instance; @@ -1657,7 +1657,7 @@ namespace mongo { case Timestamp: b.appendTimestamp(elementName, Date_t(static_cast<uint64_t>( - obj->Get(v8::String::New("t"))->ToNumber()->Value())), + obj->Get(v8::String::New("t"))->ToNumber()->Value() * 1000 )), obj->Get(v8::String::New("i"))->ToInt32()->Value()); return; case MinKey: diff --git a/src/mongo/scripting/sm_db.cpp b/src/mongo/scripting/sm_db.cpp index a112ec9bd9a..3c53a85768a 100644 --- a/src/mongo/scripting/sm_db.cpp +++ b/src/mongo/scripting/sm_db.cpp @@ -1294,6 +1294,13 @@ zzz c.setProperty( obj, "i", c.toval( 0.0 ) ); } else { + long long t = parseLL(c.toString(argv[0]).c_str()); + long long largestVal = ((2039LL-1970LL) *365*24*60*60); //seconds between 1970=2038 + smuassert( cx, + ((string)(str::stream() + << "The first argument must be in seconds;" + << t << " is too large (max " << largestVal << ")")).c_str(), + t <= largestVal ); c.setProperty( obj, "t", argv[ 0 ] ); c.setProperty( obj, "i", argv[ 1 ] ); } @@ -1688,7 +1695,7 @@ zzz } if ( JS_InstanceOf( c->_context , o , ×tamp_class , 0 ) ) { - b.appendTimestamp( name , (unsigned long long)c->getNumber( o , "t" ) , (unsigned int )c->getNumber( o , "i" ) ); + b.appendTimestamp( name , (unsigned long long)c->getNumber( o , "t" ) * 1000 , (unsigned int )c->getNumber( o , "i" ) ); return true; } diff --git a/src/mongo/scripting/v8_db.cpp b/src/mongo/scripting/v8_db.cpp index dbc12685db5..6857c56b1a0 100644 --- a/src/mongo/scripting/v8_db.cpp +++ b/src/mongo/scripting/v8_db.cpp @@ -618,6 +618,12 @@ namespace mongo { it->ForceSet(scope->v8StringData("i"), v8::Number::New(0)); } else if (args.Length() == 2) { + int64_t t = args[0]->IntegerValue(); + int64_t largestVal = ((2039LL-1970LL) *365*24*60*60); //seconds between 1970-2038 + if( t > largestVal ) + return v8AssertionException( str::stream() + << "The first argument must be in seconds;" + << t << " is too large (max " << largestVal << ")"); it->ForceSet(scope->v8StringData("t"), args[0]); it->ForceSet(scope->v8StringData("i"), args[1]); } |