summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/projection.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/query/projection.h')
-rw-r--r--src/mongo/db/query/projection.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/mongo/db/query/projection.h b/src/mongo/db/query/projection.h
index 97b8d1e0d30..95d41caba02 100644
--- a/src/mongo/db/query/projection.h
+++ b/src/mongo/db/query/projection.h
@@ -142,14 +142,25 @@ public:
return _deps.containsElemMatch;
}
+ /**
+ * Optimizes the projection tree. Additionally, re-computes dependencies in case anything
+ * changes as in projection {x: {$and: [false, "$b"]}} - which when optimized will no longer
+ * depend on "b".
+ */
+ void optimize();
+
private:
ProjectionPathASTNode _root;
ProjectType _type;
ProjectionDependencies _deps;
+ bool _projOptimized = false;
};
/**
- * Walks the projection AST and optimizes each node.
+ * Walks the projection AST and optimizes each node. Note if you have a 'Projection' instance you
+ * should prefer to use Projection::optimize() since it will additionally re-compute dependencies in
+ * case anything changes as in projection {x: {$and: [false, "$b"]}} - which when optimized will no
+ * longer depend on "b".
*/
void optimizeProjection(ProjectionPathASTNode* root);