diff options
author | Aaron <aaron@10gen.com> | 2012-05-28 09:35:45 -0700 |
---|---|---|
committer | Aaron <aaron@10gen.com> | 2012-06-06 16:05:33 -0700 |
commit | cc8310563189736f6baf57f95102b0370eb8da2c (patch) | |
tree | 37d8ec7aebbebecefaba2f454e4bf73503c47923 /src/mongo | |
parent | 35555727b51aadfb1fc2ce7ec741eac742ee1b17 (diff) | |
download | mongo-cc8310563189736f6baf57f95102b0370eb8da2c.tar.gz |
SERVER-5936 Remove optional arguments to QueryPlanSet::make(), which were primarily use by unit tests.
Diffstat (limited to 'src/mongo')
-rw-r--r-- | src/mongo/db/queryoptimizer.cpp | 23 | ||||
-rw-r--r-- | src/mongo/db/queryoptimizer.h | 22 | ||||
-rw-r--r-- | src/mongo/dbtests/queryoptimizercursortests.cpp | 5 | ||||
-rw-r--r-- | src/mongo/dbtests/queryoptimizertests.cpp | 142 |
4 files changed, 63 insertions, 129 deletions
diff --git a/src/mongo/db/queryoptimizer.cpp b/src/mongo/db/queryoptimizer.cpp index c4cb1c66179..2f8d3d9deeb 100644 --- a/src/mongo/db/queryoptimizer.cpp +++ b/src/mongo/db/queryoptimizer.cpp @@ -756,16 +756,16 @@ doneCheckOrder: } } - QueryPlanSet *QueryPlanSet::make( const char *ns, - auto_ptr<FieldRangeSetPair> frsp, - auto_ptr<FieldRangeSetPair> originalFrsp, - const BSONObj &originalQuery, - const BSONObj &order, - const shared_ptr<const ParsedQuery> &parsedQuery, - const BSONObj &hint, - QueryPlanGenerator::RecordedPlanPolicy recordedPlanPolicy, - const BSONObj &min, - const BSONObj &max ) { + QueryPlanSet* QueryPlanSet::make( const char* ns, + auto_ptr<FieldRangeSetPair> frsp, + auto_ptr<FieldRangeSetPair> originalFrsp, + const BSONObj& originalQuery, + const BSONObj& order, + const shared_ptr<const ParsedQuery>& parsedQuery, + const BSONObj& hint, + QueryPlanGenerator::RecordedPlanPolicy recordedPlanPolicy, + const BSONObj& min, + const BSONObj& max ) { auto_ptr<QueryPlanSet> ret( new QueryPlanSet( ns, frsp, originalFrsp, originalQuery, order, parsedQuery, hint, recordedPlanPolicy, min, max ) ); @@ -1560,7 +1560,8 @@ doneCheckOrder: scoped_ptr<QueryPlanSet> qps( QueryPlanSet::make( ns, frsp, origFrsp, query, sort, shared_ptr<const ParsedQuery>(), BSONObj(), - QueryPlanGenerator::UseIfInOrder ) ); + QueryPlanGenerator::UseIfInOrder, + BSONObj(), BSONObj() ) ); QueryPlanSet::QueryPlanPtr qpp = qps->getBestGuess(); if( ! qpp.get() ) return shared_ptr<Cursor>(); diff --git a/src/mongo/db/queryoptimizer.h b/src/mongo/db/queryoptimizer.h index 431dbbb10cd..96c4ac89d7d 100644 --- a/src/mongo/db/queryoptimizer.h +++ b/src/mongo/db/queryoptimizer.h @@ -357,18 +357,16 @@ namespace mongo { * @param originalFrsp - original constraints for this query clause; if null, frsp will be * used. */ - static QueryPlanSet *make( const char *ns, - auto_ptr<FieldRangeSetPair> frsp, - auto_ptr<FieldRangeSetPair> originalFrsp, - const BSONObj &originalQuery, - const BSONObj &order, - const shared_ptr<const ParsedQuery> &parsedQuery = - shared_ptr<const ParsedQuery>(), - const BSONObj &hint = BSONObj(), - QueryPlanGenerator::RecordedPlanPolicy recordedPlanPolicy = - QueryPlanGenerator::Use, - const BSONObj &min = BSONObj(), - const BSONObj &max = BSONObj() ); + static QueryPlanSet* make( const char* ns, + auto_ptr<FieldRangeSetPair> frsp, + auto_ptr<FieldRangeSetPair> originalFrsp, + const BSONObj& originalQuery, + const BSONObj& order, + const shared_ptr<const ParsedQuery>& parsedQuery, + const BSONObj& hint, + QueryPlanGenerator::RecordedPlanPolicy recordedPlanPolicy, + const BSONObj& min, + const BSONObj& max ); /** @return number of candidate plans. */ int nPlans() const { return _plans.size(); } diff --git a/src/mongo/dbtests/queryoptimizercursortests.cpp b/src/mongo/dbtests/queryoptimizercursortests.cpp index 22977de9c97..4c3149d07c7 100644 --- a/src/mongo/dbtests/queryoptimizercursortests.cpp +++ b/src/mongo/dbtests/queryoptimizercursortests.cpp @@ -2832,7 +2832,10 @@ namespace QueryOptimizerCursorTests { void nPlans( int n, const BSONObj &query, const BSONObj &order ) { auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), query ) ); auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, query, order ) ); + scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, query, order, + shared_ptr<const ParsedQuery>(), + BSONObj(), QueryPlanGenerator::Use, + BSONObj(), BSONObj() ) ); ASSERT_EQUALS( n, s->nPlans() ); } static shared_ptr<QueryOptimizerCursor> getCursor( const BSONObj &query, diff --git a/src/mongo/dbtests/queryoptimizertests.cpp b/src/mongo/dbtests/queryoptimizertests.cpp index 659b1520214..727a1f294f0 100644 --- a/src/mongo/dbtests/queryoptimizertests.cpp +++ b/src/mongo/dbtests/queryoptimizertests.cpp @@ -783,6 +783,7 @@ namespace QueryOptimizerTests { NamespaceDetailsTransient::get_inlock( ns() ).clearQueryCache(); dropCollection( ns() ); } + protected: static void assembleRequest( const string &ns, BSONObj query, int nToReturn, int nToSkip, BSONObj *fieldsToReturn, int queryOptions, Message &toSend ) { // see query.h for the protocol we are using here. BufBuilder b; @@ -800,13 +801,16 @@ namespace QueryOptimizerTests { FieldRangeSet frs( ns(), query, true ); return QueryPattern( frs, order ); } - shared_ptr<QueryPlanSet> makeQps( const BSONObj &query, const BSONObj &order ) { - auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), query ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); + shared_ptr<QueryPlanSet> makeQps( const BSONObj& query = BSONObj(), + const BSONObj& order = BSONObj(), + const BSONObj& hint = BSONObj() ) { + auto_ptr<FieldRangeSetPair> frsp( new FieldRangeSetPair( ns(), query ) ); + auto_ptr<FieldRangeSetPair> frspOrig( new FieldRangeSetPair( *frsp ) ); return shared_ptr<QueryPlanSet> - ( QueryPlanSet::make( ns(), frsp, frspOrig, query, order ) ); + ( QueryPlanSet::make( ns(), frsp, frspOrig, query, order, + shared_ptr<const ParsedQuery>(), hint, + QueryPlanGenerator::Use, BSONObj(), BSONObj() ) ); } - protected: static const char *ns() { return "unittests.QueryPlanSetTests"; } static NamespaceDetails *nsd() { return nsdetails( ns() ); } DBDirectClient &client() { return _client; } @@ -819,24 +823,15 @@ namespace QueryOptimizerTests { class ToString : public Base { public: void run() { - BSONObj obj = BSON( "a" << 1 ); - auto_ptr<FieldRangeSetPair> fieldRangeSetPair( new FieldRangeSetPair( ns(), obj ) ); - scoped_ptr<QueryPlanSet> queryPlanSet - ( QueryPlanSet::make( ns(), fieldRangeSetPair, - auto_ptr<FieldRangeSetPair>(), obj, BSONObj() ) ); - queryPlanSet->toString(); // Just test that we don't crash. + // Just test that we don't crash. + makeQps( BSON( "a" << 1 ) )->toString(); } }; class NoIndexes : public Base { public: void run() { - auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), BSON( "a" << 4 ) ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, - BSON( "a" << 4 ), - BSON( "b" << 1 ) ) ); - ASSERT_EQUALS( 1, s->nPlans() ); + ASSERT_EQUALS( 1, makeQps( BSON( "a" << 4 ), BSON( "b" << 1 ) )->nPlans() ); } }; @@ -846,13 +841,9 @@ namespace QueryOptimizerTests { Helpers::ensureIndex( ns(), BSON( "a" << 1 ), false, "a_1" ); Helpers::ensureIndex( ns(), BSON( "a" << 1 ), false, "b_2" ); BSONObj query = BSON( "a" << 4 ); - auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), query ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, query, - BSONObj() ) ); // Only one optimal plan is added to the plan set. - ASSERT_EQUALS( 1, s->nPlans() ); + ASSERT_EQUALS( 1, makeQps( query )->nPlans() ); // The optimal plan is recorded in the plan cache. FieldRangeSet frs( ns(), query, true ); @@ -871,12 +862,7 @@ namespace QueryOptimizerTests { void run() { Helpers::ensureIndex( ns(), BSON( "a" << 1 ), false, "a_1" ); Helpers::ensureIndex( ns(), BSON( "b" << 1 ), false, "b_1" ); - auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), BSON( "a" << 4 ) ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, - BSON( "a" << 4 ), - BSON( "b" << 1 ) ) ); - ASSERT_EQUALS( 3, s->nPlans() ); + ASSERT_EQUALS( 3, makeQps( BSON( "a" << 4 ), BSON( "b" << 1 ) )->nPlans() ); } }; @@ -885,11 +871,7 @@ namespace QueryOptimizerTests { void run() { Helpers::ensureIndex( ns(), BSON( "a" << 1 ), false, "a_1" ); Helpers::ensureIndex( ns(), BSON( "b" << 1 ), false, "b_1" ); - auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), BSONObj() ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, BSONObj(), - BSONObj() ) ); - ASSERT_EQUALS( 1, s->nPlans() ); + ASSERT_EQUALS( 1, makeQps()->nPlans() ); } }; @@ -898,15 +880,8 @@ namespace QueryOptimizerTests { void run() { Helpers::ensureIndex( ns(), BSON( "a" << 1 ), false, "a_1" ); Helpers::ensureIndex( ns(), BSON( "b" << 1 ), false, "b_1" ); - BSONObj hint = BSON( "hint" << BSON( "a" << 1 ) ); - auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), BSON( "a" << 1 ) ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, - BSON( "a" << 1 ), - BSON( "b" << 1 ), - shared_ptr<const ParsedQuery>(), - hint ) ); - ASSERT_EQUALS( 1, s->nPlans() ); + ASSERT_EQUALS( 1, makeQps( BSON( "a" << 1 ), BSON( "b" << 1 ), + BSON( "hint" << BSON( "a" << 1 ) ) )->nPlans() ); } }; @@ -915,15 +890,8 @@ namespace QueryOptimizerTests { void run() { Helpers::ensureIndex( ns(), BSON( "a" << 1 ), false, "a_1" ); Helpers::ensureIndex( ns(), BSON( "b" << 1 ), false, "b_1" ); - BSONObj hint = BSON( "hint" << "a_1" ); - auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), BSON( "a" << 1 ) ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, - BSON( "a" << 1 ), - BSON( "b" << 1 ), - shared_ptr<const ParsedQuery>(), - hint ) ); - ASSERT_EQUALS( 1, s->nPlans() ); + ASSERT_EQUALS( 1, makeQps( BSON( "a" << 1 ), BSON( "b" << 1 ), + BSON( "hint" << "a_1" ) )->nPlans() ); } }; @@ -932,15 +900,8 @@ namespace QueryOptimizerTests { void run() { Helpers::ensureIndex( ns(), BSON( "a" << 1 ), false, "a_1" ); Helpers::ensureIndex( ns(), BSON( "b" << 1 ), false, "b_1" ); - BSONObj hint = BSON( "hint" << BSON( "$natural" << 1 ) ); - auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), BSON( "a" << 1 ) ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, - BSON( "a" << 1 ), - BSON( "b" << 1 ), - shared_ptr<const ParsedQuery>(), - hint ) ); - ASSERT_EQUALS( 1, s->nPlans() ); + ASSERT_EQUALS( 1, makeQps( BSON( "a" << 1 ), BSON( "b" << 1 ), + BSON( "hint" << BSON( "$natural" << 1 ) ) )->nPlans() ); } }; @@ -949,24 +910,15 @@ namespace QueryOptimizerTests { void run() { Helpers::ensureIndex( ns(), BSON( "a" << 1 ), false, "a_1" ); Helpers::ensureIndex( ns(), BSON( "a" << 1 ), false, "b_2" ); - auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), BSON( "a" << 1 ) ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, - BSON( "a" << 1 ), - BSON( "$natural" << 1 ) ) ); - ASSERT_EQUALS( 1, s->nPlans() ); + ASSERT_EQUALS( 1, makeQps( BSON( "a" << 1 ), BSON( "$natural" << 1 ) )->nPlans() ); } }; class BadHint : public Base { public: void run() { - BSONObj hint = BSON( "hint" << "a_1" ); - auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), BSON( "a" << 1 ) ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - ASSERT_THROWS( QueryPlanSet::make( ns(), frsp, frspOrig, BSON( "a" << 1 ), - BSON( "b" << 1 ), shared_ptr<const ParsedQuery>(), - hint ), + ASSERT_THROWS( makeQps( BSON( "a" << 1 ), BSON( "b" << 1 ), + BSON( "hint" << "a_1" ) ), AssertionException ); } }; @@ -1019,12 +971,7 @@ namespace QueryOptimizerTests { void run() { Helpers::ensureIndex( ns(), BSON( "a" << 1 ), false, "a_1" ); Helpers::ensureIndex( ns(), BSON( "b" << 1 ), false, "b_1" ); - auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), BSON( "a" << 1 << "c" << 2 ) ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, - BSON( "a" << 1 << "c" << 2 ), - BSONObj() ) ); - ASSERT_EQUALS( 2, s->nPlans() ); + ASSERT_EQUALS( 2, makeQps( BSON( "a" << 1 << "c" << 2 ) )->nPlans() ); } }; @@ -1102,17 +1049,13 @@ namespace QueryOptimizerTests { BSONObj temp = BSON( "a" << i ); theDataFileMgr.insertWithObjMod( ns(), temp ); } - BSONObj hint = fromjson( "{$hint:{a:1}}" ); BSONObj query = fromjson( "{a:{$in:[2,3,6,9,11]}}" ); - BSONObj order = BSONObj(); + BSONObj order; + BSONObj hint = fromjson( "{$hint:{a:1}}" ); auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), query ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - auto_ptr< FieldRangeSetPair > frspOrig2( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, query, order, - shared_ptr<const ParsedQuery>(), - hint ) ); - scoped_ptr<QueryPlan> qp( QueryPlan::make( nsd(), 1, s->frsp(), frspOrig2.get(), - query, order ) ); + shared_ptr<QueryPlanSet> s = makeQps( query, order, hint ); + scoped_ptr<QueryPlan> qp( QueryPlan::make( nsd(), 1, s->frsp(), frsp.get(), + query, order ) ); boost::shared_ptr<Cursor> c = qp->newCursor(); double expected[] = { 2, 3, 6, 9 }; for( int i = 0; i < 4; ++i, c->advance() ) { @@ -1124,14 +1067,9 @@ namespace QueryOptimizerTests { { order = BSON( "a" << -1 ); auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), query ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - auto_ptr< FieldRangeSetPair > frspOrig2( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, query, - order, - shared_ptr<const ParsedQuery>(), - hint ) ); - scoped_ptr<QueryPlan> qp( QueryPlan::make( nsd(), 1, s->frsp(), frspOrig2.get(), - query, order ) ); + shared_ptr<QueryPlanSet> s = makeQps( query, order, hint ); + scoped_ptr<QueryPlan> qp( QueryPlan::make( nsd(), 1, s->frsp(), frsp.get(), + query, order ) ); boost::shared_ptr<Cursor> c = qp->newCursor(); double expected[] = { 9, 6, 3, 2 }; for( int i = 0; i < 4; ++i, c->advance() ) { @@ -1193,11 +1131,8 @@ namespace QueryOptimizerTests { void run() { Helpers::ensureIndex( ns(), BSON( "a" << "2d" ), false, "a_2d" ); Helpers::ensureIndex( ns(), BSON( "a" << 1 ), false, "a_1" ); - BSONObj query = BSON( "a" << BSON_ARRAY( 0 << 0 ) << "b" << 1 ); - auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), query ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, query, - BSONObj() ) ); + shared_ptr<QueryPlanSet> s = + makeQps( BSON( "a" << BSON_ARRAY( 0 << 0 ) << "b" << 1 ) ); // Two query plans, btree and collection scan. ASSERT_EQUALS( 2, s->nPlans() ); // Not the geo plan. @@ -1210,11 +1145,8 @@ namespace QueryOptimizerTests { public: void run() { Helpers::ensureIndex( ns(), BSON( "a" << "2d" ), false, "a_2d" ); - BSONObj query = BSON( "a" << BSON_ARRAY( 0 << 0 ) << "b" << 1 ); - auto_ptr< FieldRangeSetPair > frsp( new FieldRangeSetPair( ns(), query ) ); - auto_ptr< FieldRangeSetPair > frspOrig( new FieldRangeSetPair( *frsp ) ); - scoped_ptr<QueryPlanSet> s( QueryPlanSet::make( ns(), frsp, frspOrig, query, - BSONObj() ) ); + shared_ptr<QueryPlanSet> s = + makeQps( BSON( "a" << BSON_ARRAY( 0 << 0 ) << "b" << 1 ) ); // Single query plan. ASSERT_EQUALS( 1, s->nPlans() ); // It's the geo plan. |