summaryrefslogtreecommitdiff
path: root/src/mongo/db/matcher/expression_geo.cpp
diff options
context:
space:
mode:
authorGreg Studer <greg@10gen.com>2014-06-05 14:57:34 -0400
committerGreg Studer <greg@10gen.com>2014-06-10 17:06:53 -0400
commit6537dc777512d093a489cb1db99e8db8cf50b914 (patch)
treec1513b2afeb44a500d57a8316e3b65139b56f7f4 /src/mongo/db/matcher/expression_geo.cpp
parente191494d5092181e222c022fe44741951af91a2f (diff)
downloadmongo-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.cpp15
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());
}