diff options
author | Greg Studer <greg@10gen.com> | 2014-06-05 14:57:34 -0400 |
---|---|---|
committer | Greg Studer <greg@10gen.com> | 2014-06-10 17:06:53 -0400 |
commit | 6537dc777512d093a489cb1db99e8db8cf50b914 (patch) | |
tree | c1513b2afeb44a500d57a8316e3b65139b56f7f4 /src/mongo/db/matcher/expression_geo.cpp | |
parent | e191494d5092181e222c022fe44741951af91a2f (diff) | |
download | mongo-6537dc777512d093a489cb1db99e8db8cf50b914.tar.gz |
SERVER-5800 convert 2d predicate queries into covered index scans
Diffstat (limited to 'src/mongo/db/matcher/expression_geo.cpp')
-rw-r--r-- | src/mongo/db/matcher/expression_geo.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/mongo/db/matcher/expression_geo.cpp b/src/mongo/db/matcher/expression_geo.cpp index 2289fb19c56..c701d0916dc 100644 --- a/src/mongo/db/matcher/expression_geo.cpp +++ b/src/mongo/db/matcher/expression_geo.cpp @@ -37,9 +37,9 @@ namespace mongo { // Geo queries we don't need an index to answer: geoWithin and geoIntersects // - Status GeoMatchExpression::init( const StringData& path, const GeoQuery& query, + Status GeoMatchExpression::init( const StringData& path, const GeoQuery* query, const BSONObj& rawObj ) { - _query = query; + _query.reset(query); _rawObj = rawObj; return initPath( path ); } @@ -52,12 +52,12 @@ namespace mongo { if ( !geometry.parseFrom( e.Obj() ) ) return false; - if (GeoQuery::WITHIN == _query.getPred()) { - return _query.getGeometry().contains(geometry); + if (GeoQuery::WITHIN == _query->getPred()) { + return _query->getGeometry().contains(geometry); } else { - verify(GeoQuery::INTERSECT == _query.getPred()); - return _query.getGeometry().intersects(geometry); + verify(GeoQuery::INTERSECT == _query->getPred()); + return _query->getGeometry().intersects(geometry); } } @@ -88,7 +88,8 @@ namespace mongo { LeafMatchExpression* GeoMatchExpression::shallowClone() const { GeoMatchExpression* next = new GeoMatchExpression(); - next->init( path(), _query, _rawObj); + next->init( path(), NULL, _rawObj); + next->_query = _query; if (getTag()) { next->setTag(getTag()->clone()); } |