Skip to content

Commit bf98e8a

Browse files
committed
CXX-281 Merge upstream changes for SERVER-5668
SERVER-14482 Add add missing appendX methods to BSONArrayBuilder Conflicts: src/mongo/bson/bsonobjbuilder.h src/mongo/bson/mutable/document.cpp src/mongo/dbtests/jsobjtests.cpp
1 parent 06cb7d5 commit bf98e8a

File tree

2 files changed

+38
-93
lines changed

2 files changed

+38
-93
lines changed

src/mongo/bson/bsonobjbuilder.h

Lines changed: 21 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -747,31 +747,6 @@ namespace mongo {
747747

748748
void doneFast() { _b.doneFast(); }
749749

750-
BSONArrayBuilder& append(const StringData& name, int n) {
751-
fill( name );
752-
append( n );
753-
return *this;
754-
}
755-
756-
BSONArrayBuilder& append(const StringData& name, long long n) {
757-
fill( name );
758-
append( n );
759-
return *this;
760-
}
761-
762-
BSONArrayBuilder& append(const StringData& name, double n) {
763-
fill( name );
764-
append( n );
765-
return *this;
766-
}
767-
768-
template <typename T>
769-
BSONArrayBuilder& append(const StringData& name, const T& x) {
770-
fill( name );
771-
append( x );
772-
return *this;
773-
}
774-
775750
template < class T >
776751
BSONArrayBuilder& append( const std::list< T >& vals );
777752

@@ -782,57 +757,48 @@ namespace mongo {
782757
BufBuilder &subobjStart() { return _b.subobjStart( num() ); }
783758
BufBuilder &subarrayStart() { return _b.subarrayStart( num() ); }
784759

785-
// These fill missing entries up to pos. if pos is < next pos is ignored
786-
BufBuilder &subobjStart(int pos) {
787-
fill(pos);
788-
return _b.subobjStart( num() );
789-
}
790-
BufBuilder &subarrayStart(int pos) {
791-
fill(pos);
792-
return _b.subarrayStart( num() );
760+
BSONArrayBuilder& appendTimestamp(unsigned int sec, unsigned int inc) {
761+
_b.appendTimestamp(num(), sec, inc);
762+
return *this;
793763
}
794764

795-
// These should only be used where you really need interface compatibility with BSONObjBuilder
796-
// Currently they are only used by update.cpp and it should probably stay that way
797-
BufBuilder &subobjStart( const StringData& name ) {
798-
fill( name );
799-
return _b.subobjStart( num() );
765+
BSONArrayBuilder& appendRegex(const StringData& regex, const StringData& options = "") {
766+
_b.appendRegex(num(), regex, options);
767+
return *this;
800768
}
801769

802-
BufBuilder &subarrayStart( const StringData& name ) {
803-
fill( name );
804-
return _b.subarrayStart( num() );
770+
BSONArrayBuilder& appendBinData(int len, BinDataType type, const void* data) {
771+
_b.appendBinData(num(), len, type, data);
772+
return *this;
805773
}
806774

807-
BSONArrayBuilder& appendArray( const StringData& name, const BSONObj& subObj ) {
808-
fill( name );
809-
_b.appendArray( num(), subObj );
775+
BSONArrayBuilder& appendCode(const StringData& code) {
776+
_b.appendCode(num(), code);
810777
return *this;
811778
}
812779

813-
BSONArrayBuilder& appendAs( const BSONElement &e, const StringData& name) {
814-
fill( name );
815-
append( e );
780+
BSONArrayBuilder& appendCodeWScope(const StringData& code, const BSONObj& scope) {
781+
_b.appendCodeWScope(num(), code, scope);
816782
return *this;
817783
}
818784

819-
BSONArrayBuilder& appendTimestamp(unsigned int sec, unsigned int inc) {
820-
_b.appendTimestamp(num(), sec, inc);
785+
BSONArrayBuilder& appendTimeT(time_t dt) {
786+
_b.appendTimeT(num(), dt);
821787
return *this;
822788
}
823789

824-
BSONArrayBuilder& appendRegex(const StringData& regex, const StringData& options = "") {
825-
_b.appendRegex(num(), regex, options);
790+
BSONArrayBuilder& appendDate(Date_t dt) {
791+
_b.appendDate(num(), dt);
826792
return *this;
827793
}
828794

829-
BSONArrayBuilder& appendTimestamp(unsigned long long ts) {
830-
_b.appendTimestamp(num(), ts);
795+
BSONArrayBuilder& appendBool(bool val) {
796+
_b.appendBool(num(), val);
831797
return *this;
832798
}
833799

834-
BSONArrayBuilder& append(const StringData& s) {
835-
_b.append(num(), s);
800+
BSONArrayBuilder& appendTimestamp(unsigned long long ts) {
801+
_b.appendTimestamp(num(), ts);
836802
return *this;
837803
}
838804

@@ -846,29 +812,6 @@ namespace mongo {
846812
BufBuilder& bb() { return _b.bb(); }
847813

848814
private:
849-
// These two are undefined privates to prevent their accidental
850-
// use as we don't support unsigned ints in BSON
851-
BSONObjBuilder& append(const StringData& fieldName, unsigned int val);
852-
BSONObjBuilder& append(const StringData& fieldName, unsigned long long val);
853-
854-
void fill( const StringData& name ) {
855-
long int n;
856-
Status status = parseNumberFromStringWithBase( name, 10, &n );
857-
uassert( 13048,
858-
(std::string)"can't append to array using string field name: " + name.toString(),
859-
status.isOK() );
860-
fill(n);
861-
}
862-
863-
void fill (int upTo){
864-
// if this is changed make sure to update error message and jstests/set7.js
865-
const int maxElems = 1500000;
866-
BOOST_STATIC_ASSERT(maxElems < (BSONObjMaxUserSize/10));
867-
uassert(15891, "can't backfill array to larger than 1,500,000 elements", upTo <= maxElems);
868-
869-
while( _i < upTo )
870-
appendNull();
871-
}
872815

873816
std::string num() { return _b.numStr(_i++); }
874817
int _i;

src/mongo/dbtests/jsobjtests.cpp

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -777,21 +777,6 @@ namespace JsobjTests {
777777
}
778778
}; DBTEST_SHIM_TEST(AppendAs);
779779

780-
class ArrayAppendAs {
781-
public:
782-
void run() {
783-
BSONArrayBuilder b;
784-
{
785-
BSONObj foo = BSON( "foo" << 1 );
786-
b.appendAs( foo.firstElement(), "3" );
787-
}
788-
BSONArray a = b.arr();
789-
BSONObj expected = BSON( "3" << 1 );
790-
ASSERT_EQUALS( expected.firstElement(), a[ 3 ] );
791-
ASSERT_EQUALS( 4, a.nFields() );
792-
}
793-
}; DBTEST_SHIM_TEST(ArrayAppendAs);
794-
795780
class GetField {
796781
public:
797782
void run(){
@@ -1719,6 +1704,23 @@ namespace JsobjTests {
17191704
objb.appendRegex(objb.numStr(i++), "test", "imx");
17201705
arrb.appendRegex("test", "imx");
17211706

1707+
objb.appendBinData(objb.numStr(i++), 4, BinDataGeneral, "wow");
1708+
arrb.appendBinData(4, BinDataGeneral, "wow");
1709+
1710+
objb.appendCode(objb.numStr(i++), "function(){ return 1; }");
1711+
arrb.appendCode("function(){ return 1; }");
1712+
1713+
objb.appendCodeWScope(objb.numStr(i++), "function(){ return a; }", BSON("a" << 1));
1714+
arrb.appendCodeWScope("function(){ return a; }", BSON("a" << 1));
1715+
1716+
time_t dt(0);
1717+
objb.appendTimeT(objb.numStr(i++), dt);
1718+
arrb.appendTimeT(dt);
1719+
1720+
Date_t date(0);
1721+
objb.appendDate(objb.numStr(i++), date);
1722+
arrb.appendDate(date);
1723+
17221724
objb.append(objb.numStr(i++), BSONRegEx("test2", "s"));
17231725
arrb.append(BSONRegEx("test2", "s"));
17241726

0 commit comments

Comments
 (0)