Skip to content

Commit e2f7e8e

Browse files
author
Andrew Morrow
committed
SERVER-10497 Unify update API with fluent request object
1 parent dda9950 commit e2f7e8e

File tree

11 files changed

+419
-341
lines changed

11 files changed

+419
-341
lines changed

src/mongo/db/commands/find_and_modify.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,13 @@ namespace mongo {
206206
_appendHelper( result , doc , found , fields );
207207
}
208208

209-
UpdateResult res = updateObjects( ns.c_str() , update , queryModified , upsert , false , true , cc().curop()->debug() );
210-
209+
UpdateResult res = mongo::update(
210+
UpdateRequest(NamespaceString(ns), cc().curop()->debug())
211+
.query(queryModified)
212+
.updates(update)
213+
.upsert(upsert)
214+
.updateOpLog());
215+
211216
if ( returnNew ) {
212217
if ( res.upserted.isSet() ) {
213218
queryModified = BSON( "_id" << res.upserted );
@@ -229,7 +234,7 @@ namespace mongo {
229234

230235
BSONObjBuilder le( result.subobjStart( "lastErrorObject" ) );
231236
le.appendBool( "updatedExisting" , res.existing );
232-
le.appendNumber( "n" , res.num );
237+
le.appendNumber( "n" , res.numMatched );
233238
if ( res.upserted.isSet() )
234239
le.append( "upserted" , res.upserted );
235240
le.done();

src/mongo/db/commands/write_commands/batch_executor.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -241,15 +241,16 @@ namespace mongo {
241241
long long resNum = 0;
242242
OID resUpserted = OID();
243243
try {
244-
UpdateResult res = updateObjects(ns.c_str(),
245-
updateObj,
246-
queryObj,
247-
upsert,
248-
multi,
249-
/*logOp*/true,
250-
opDebug);
244+
UpdateResult res = update(
245+
UpdateRequest(NamespaceString(ns), opDebug)
246+
.query(queryObj)
247+
.updates(updateObj)
248+
.upsert(upsert)
249+
.multi(multi)
250+
.updateOpLog());
251+
251252
resExisting = res.existing;
252-
resNum = res.num;
253+
resNum = res.numMatched;
253254
resUpserted = res.upserted;
254255
}
255256
catch (UserException& e) {

src/mongo/db/dbhelpers.cpp

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
#include "mongo/db/json.h"
3131
#include "mongo/db/ops/delete.h"
3232
#include "mongo/db/ops/update.h"
33+
#include "mongo/db/ops/update_request.h"
34+
#include "mongo/db/ops/update_result.h"
3335
#include "mongo/db/pagefault.h"
3436
#include "mongo/db/pdfile.h"
3537
#include "mongo/db/query_optimizer.h"
@@ -200,28 +202,39 @@ namespace mongo {
200202

201203
OpDebug debug;
202204
Client::Context context(ns);
203-
updateObjects(ns.c_str(), o, /*pattern=*/id, /*upsert=*/true, /*multi=*/false , /*logtheop=*/true , debug, fromMigrate );
205+
206+
update(
207+
UpdateRequest(NamespaceString(ns), debug)
208+
.query(id)
209+
.updates(o)
210+
.upsert()
211+
.updateOpLog()
212+
.fromMigration(fromMigrate));
204213
}
205214

206215
void Helpers::putSingleton(const char *ns, BSONObj obj) {
207216
OpDebug debug;
208217
Client::Context context(ns);
209-
updateObjects(ns, obj, /*pattern=*/BSONObj(), /*upsert=*/true, /*multi=*/false , /*logtheop=*/true , debug );
218+
219+
update(
220+
UpdateRequest(NamespaceString(ns), debug)
221+
.updates(obj)
222+
.upsert()
223+
.updateOpLog());
224+
210225
context.getClient()->curop()->done();
211226
}
212227

213228
void Helpers::putSingletonGod(const char *ns, BSONObj obj, bool logTheOp) {
214229
OpDebug debug;
215230
Client::Context context(ns);
216231

217-
_updateObjects(/*god=*/true,
218-
ns,
219-
obj,
220-
/*pattern=*/BSONObj(),
221-
/*upsert=*/true,
222-
/*multi=*/false,
223-
logTheOp,
224-
debug );
232+
update(
233+
UpdateRequest(NamespaceString(ns), debug)
234+
.god()
235+
.updates(obj)
236+
.upsert()
237+
.updateOpLog(logTheOp));
225238

226239
context.getClient()->curop()->done();
227240
}

src/mongo/db/instance.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -646,13 +646,17 @@ namespace mongo {
646646

647647
Client::Context ctx( ns );
648648

649-
UpdateResult res = updateObjects(
650-
&driver,
651-
ns, toupdate, query,
652-
upsert, multi, true, op.debug() );
649+
UpdateResult res = update(
650+
UpdateRequest(NamespaceString(ns), op.debug())
651+
.upsert(upsert)
652+
.multi(multi)
653+
.query(query)
654+
.updates(toupdate)
655+
.updateOpLog(), // TODO: This is wasteful if repl is not active.
656+
&driver);
653657

654658
// for getlasterror
655-
lastError.getSafe()->recordUpdate( res.existing , res.num , res.upserted );
659+
lastError.getSafe()->recordUpdate( res.existing , res.numMatched , res.upserted );
656660
break;
657661
}
658662
catch ( PageFaultException& e ) {

0 commit comments

Comments
 (0)