2010-04-24 23:14:44 +02:00
|
|
|
/** @file bson_db.h
|
|
|
|
|
|
|
|
This file contains the implementation of BSON-related methods that are required
|
|
|
|
by the MongoDB database server.
|
|
|
|
|
|
|
|
Normally, for standalone BSON usage, you do not want this file - it will tend to
|
|
|
|
pull in some other files from the MongoDB project. Thus, bson.h (the main file
|
|
|
|
one would use) does not include this file.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Copyright 2009 10gen Inc.
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "../util/optime.h"
|
|
|
|
|
|
|
|
namespace mongo {
|
|
|
|
|
2010-04-25 00:25:58 +02:00
|
|
|
/**
|
|
|
|
Timestamps are a special BSON datatype that is used internally for replication.
|
|
|
|
Append a timestamp element to the object being ebuilt.
|
|
|
|
@param time - in millis (but stored in seconds)
|
|
|
|
*/
|
2010-07-20 18:29:29 +02:00
|
|
|
inline BSONObjBuilder& BSONObjBuilder::appendTimestamp( const StringData& fieldName , unsigned long long time , unsigned int inc ){
|
2010-04-25 00:25:58 +02:00
|
|
|
OpTime t( (unsigned) (time / 1000) , inc );
|
|
|
|
appendTimestamp( fieldName , t.asDate() );
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2010-04-24 23:14:44 +02:00
|
|
|
inline OpTime BSONElement::_opTime() const {
|
2010-07-06 22:11:56 +02:00
|
|
|
if( type() == mongo::Date || type() == Timestamp )
|
|
|
|
return OpTime( *reinterpret_cast< const unsigned long long* >( value() ) );
|
|
|
|
return OpTime();
|
2010-04-24 23:14:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
inline string BSONElement::_asCode() const {
|
|
|
|
switch( type() ){
|
|
|
|
case mongo::String:
|
|
|
|
case Code:
|
2010-06-25 23:32:12 +02:00
|
|
|
return string(valuestr(), valuestrsize()-1);
|
2010-04-24 23:14:44 +02:00
|
|
|
case CodeWScope:
|
2010-06-25 23:32:12 +02:00
|
|
|
return string(codeWScopeCode(), *(int*)(valuestr())-1);
|
2010-04-24 23:14:44 +02:00
|
|
|
default:
|
|
|
|
log() << "can't convert type: " << (int)(type()) << " to code" << endl;
|
|
|
|
}
|
|
|
|
uassert( 10062 , "not code" , 0 );
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
|
2010-04-25 00:25:58 +02:00
|
|
|
inline BSONObjBuilder& BSONObjBuilderValueStream::operator<<(DateNowLabeler& id){
|
|
|
|
_builder->appendDate(_fieldName, jsTime());
|
|
|
|
_fieldName = 0;
|
|
|
|
return *_builder;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2010-04-24 23:14:44 +02:00
|
|
|
}
|