Skip to content

Commit

Permalink
SERVER-705 make v8 timestamp fields consistent with sm
Browse files Browse the repository at this point in the history
  • Loading branch information
astaple committed Mar 9, 2010
1 parent 677a095 commit 06279cd
Showing 1 changed file with 23 additions and 2 deletions.
25 changes: 23 additions & 2 deletions scripting/v8_wrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ namespace mongo {
case mongo::Timestamp: {
Local<v8::Object> sub = v8::Object::New();

sub->Set( v8::String::New( "time" ) , v8::Date::New( f.timestampTime() ) );
sub->Set( v8::String::New( "t" ) , v8::Date::New( f.timestampTime() ) );
sub->Set( v8::String::New( "i" ) , v8::Number::New( f.timestampInc() ) );

o->Set( v8::String::New( f.fieldName() ) , sub );
Expand Down Expand Up @@ -213,7 +213,7 @@ namespace mongo {
case mongo::Timestamp: {
Local<v8::Object> sub = v8::Object::New();

sub->Set( v8::String::New( "time" ) , v8::Date::New( f.timestampTime() ) );
sub->Set( v8::String::New( "t" ) , v8::Date::New( f.timestampTime() ) );
sub->Set( v8::String::New( "i" ) , v8::Number::New( f.timestampInc() ) );

return sub;
Expand Down Expand Up @@ -273,6 +273,27 @@ namespace mongo {
}

if ( value->IsObject() ){
// The user could potentially modify the fields of these special objects,
// wreaking havoc when we attempt to reinterpret them. Not doing any validation
// for now...
Local< v8::Object > obj = value->ToObject();
if ( obj->InternalFieldCount() && obj->GetInternalField( 0 )->IsNumber() ) {
switch( obj->GetInternalField( 0 )->ToInt32()->Value() ) { // NOTE Uint32's Value() gave me a linking error, so going with this instead
case Timestamp:
b.appendTimestamp( sname.c_str(),
Date_t( v8::Date::Cast( *obj->Get( v8::String::New( "t" ) ) )->NumberValue() ),
obj->Get( v8::String::New( "i" ) )->ToInt32()->Value() );
return;
case MinKey:
b.appendMinKey( sname.c_str() );
return;
case MaxKey:
b.appendMaxKey( sname.c_str() );
return;
default:
assert( "invalid internal field" == 0 );
}
}
string s = toSTLString( value );
if ( s.size() && s[0] == '/' ){
s = s.substr( 1 );
Expand Down

0 comments on commit 06279cd

Please sign in to comment.