summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/get_executor.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/query/get_executor.h')
-rw-r--r--src/mongo/db/query/get_executor.h318
1 files changed, 159 insertions, 159 deletions
diff --git a/src/mongo/db/query/get_executor.h b/src/mongo/db/query/get_executor.h
index c92f67a00ca..24d99ecc791 100644
--- a/src/mongo/db/query/get_executor.h
+++ b/src/mongo/db/query/get_executor.h
@@ -39,171 +39,171 @@
namespace mongo {
- class Collection;
- class CountRequest;
-
- struct GroupRequest;
-
- /**
- * Filter indexes retrieved from index catalog by
- * allowed indices in query settings.
- * Used by getExecutor().
- * This function is public to facilitate testing.
- */
- void filterAllowedIndexEntries(const AllowedIndices& allowedIndices,
- std::vector<IndexEntry>* indexEntries);
-
- /**
- * Fill out the provided 'plannerParams' for the 'canonicalQuery' operating on the collection
- * 'collection'. Exposed for testing.
- */
- void fillOutPlannerParams(OperationContext* txn,
- Collection* collection,
- CanonicalQuery* canonicalQuery,
- QueryPlannerParams* plannerParams);
-
- /**
- * Get a plan executor for a query. Takes ownership of 'rawCanonicalQuery'.
- *
- * If the query is valid and an executor could be created, returns Status::OK()
- * and populates *out with the PlanExecutor.
- *
- * If the query cannot be executed, returns a Status indicating why.
- */
- Status getExecutor(OperationContext* txn,
+class Collection;
+class CountRequest;
+
+struct GroupRequest;
+
+/**
+ * Filter indexes retrieved from index catalog by
+ * allowed indices in query settings.
+ * Used by getExecutor().
+ * This function is public to facilitate testing.
+ */
+void filterAllowedIndexEntries(const AllowedIndices& allowedIndices,
+ std::vector<IndexEntry>* indexEntries);
+
+/**
+ * Fill out the provided 'plannerParams' for the 'canonicalQuery' operating on the collection
+ * 'collection'. Exposed for testing.
+ */
+void fillOutPlannerParams(OperationContext* txn,
+ Collection* collection,
+ CanonicalQuery* canonicalQuery,
+ QueryPlannerParams* plannerParams);
+
+/**
+ * Get a plan executor for a query. Takes ownership of 'rawCanonicalQuery'.
+ *
+ * If the query is valid and an executor could be created, returns Status::OK()
+ * and populates *out with the PlanExecutor.
+ *
+ * If the query cannot be executed, returns a Status indicating why.
+ */
+Status getExecutor(OperationContext* txn,
+ Collection* collection,
+ CanonicalQuery* rawCanonicalQuery,
+ PlanExecutor::YieldPolicy yieldPolicy,
+ PlanExecutor** out,
+ size_t plannerOptions = 0);
+
+/**
+ * Get a plan executor for query. This differs from the getExecutor(...) function
+ * above in that the above requires a non-NULL canonical query, whereas this
+ * function can retrieve a plan executor from the raw query object.
+ *
+ * Used to support idhack updates that do not create a canonical query.
+ *
+ * If the query is valid and an executor could be created, returns Status::OK()
+ * and populates *out with the PlanExecutor.
+ *
+ * If the query cannot be executed, returns a Status indicating why.
+ */
+Status getExecutor(OperationContext* txn,
+ Collection* collection,
+ const std::string& ns,
+ const BSONObj& unparsedQuery,
+ PlanExecutor::YieldPolicy yieldPolicy,
+ PlanExecutor** out,
+ size_t plannerOptions = 0);
+
+/**
+ * Get a plan executor for a .find() operation. Takes ownership of 'rawCanonicalQuery'.
+ *
+ * If the query is valid and an executor could be created, returns Status::OK()
+ * and populates *out with the PlanExecutor.
+ *
+ * If the query cannot be executed, returns a Status indicating why.
+ */
+Status getExecutorFind(OperationContext* txn,
Collection* collection,
+ const NamespaceString& nss,
CanonicalQuery* rawCanonicalQuery,
PlanExecutor::YieldPolicy yieldPolicy,
- PlanExecutor** out,
- size_t plannerOptions = 0);
-
- /**
- * Get a plan executor for query. This differs from the getExecutor(...) function
- * above in that the above requires a non-NULL canonical query, whereas this
- * function can retrieve a plan executor from the raw query object.
- *
- * Used to support idhack updates that do not create a canonical query.
- *
- * If the query is valid and an executor could be created, returns Status::OK()
- * and populates *out with the PlanExecutor.
- *
- * If the query cannot be executed, returns a Status indicating why.
- */
- Status getExecutor(OperationContext* txn,
- Collection* collection,
- const std::string& ns,
- const BSONObj& unparsedQuery,
- PlanExecutor::YieldPolicy yieldPolicy,
- PlanExecutor** out,
- size_t plannerOptions = 0);
-
- /**
- * Get a plan executor for a .find() operation. Takes ownership of 'rawCanonicalQuery'.
- *
- * If the query is valid and an executor could be created, returns Status::OK()
- * and populates *out with the PlanExecutor.
- *
- * If the query cannot be executed, returns a Status indicating why.
- */
- Status getExecutorFind(OperationContext* txn,
+ PlanExecutor** out);
+
+/**
+ * If possible, turn the provided QuerySolution into a QuerySolution that uses a DistinctNode
+ * to provide results for the distinct command.
+ *
+ * If the provided solution could be mutated successfully, returns true, otherwise returns
+ * false.
+ */
+bool turnIxscanIntoDistinctIxscan(QuerySolution* soln, const std::string& field);
+
+/*
+ * Get an executor for a query executing as part of a distinct command.
+ *
+ * Distinct is unique in that it doesn't care about getting all the results; it just wants all
+ * possible values of a certain field. As such, we can skip lots of data in certain cases (see
+ * body of method for detail).
+ */
+Status getExecutorDistinct(OperationContext* txn,
Collection* collection,
- const NamespaceString& nss,
- CanonicalQuery* rawCanonicalQuery,
+ const BSONObj& query,
+ const std::string& field,
PlanExecutor::YieldPolicy yieldPolicy,
PlanExecutor** out);
- /**
- * If possible, turn the provided QuerySolution into a QuerySolution that uses a DistinctNode
- * to provide results for the distinct command.
- *
- * If the provided solution could be mutated successfully, returns true, otherwise returns
- * false.
- */
- bool turnIxscanIntoDistinctIxscan(QuerySolution* soln, const std::string& field);
-
- /*
- * Get an executor for a query executing as part of a distinct command.
- *
- * Distinct is unique in that it doesn't care about getting all the results; it just wants all
- * possible values of a certain field. As such, we can skip lots of data in certain cases (see
- * body of method for detail).
- */
- Status getExecutorDistinct(OperationContext* txn,
- Collection* collection,
- const BSONObj& query,
- const std::string& field,
- PlanExecutor::YieldPolicy yieldPolicy,
- PlanExecutor** out);
-
- /*
- * Get a PlanExecutor for a query executing as part of a count command.
- *
- * Count doesn't care about actually examining its results; it just wants to walk through them.
- * As such, with certain covered queries, we can skip the overhead of fetching etc. when
- * executing a count.
- */
- Status getExecutorCount(OperationContext* txn,
- Collection* collection,
- const CountRequest& request,
- bool explain,
- PlanExecutor::YieldPolicy yieldPolicy,
- PlanExecutor** execOut);
-
- /**
- * Get a PlanExecutor for a delete operation. 'parsedDelete' describes the query predicate
- * and delete flags like 'isMulti'. The caller must hold the appropriate MODE_X or MODE_IX
- * locks, and must not release these locks until after the returned PlanExecutor is deleted.
- *
- * The returned PlanExecutor will yield if and only if parsedDelete->canYield().
- *
- * Does not take ownership of its arguments.
- *
- * If the query is valid and an executor could be created, returns Status::OK() and populates
- * *execOut with the PlanExecutor. The caller takes ownership of *execOut.
- *
- * If the query cannot be executed, returns a Status indicating why.
- */
- Status getExecutorDelete(OperationContext* txn,
- Collection* collection,
- ParsedDelete* parsedDelete,
- PlanExecutor** execOut);
-
- /**
- * Get a PlanExecutor for an update operation. 'parsedUpdate' describes the query predicate
- * and update modifiers. The caller must hold the appropriate MODE_X or MODE_IX locks prior
- * to calling this function, and must not release these locks until after the returned
- * PlanExecutor is deleted.
- *
- * The returned PlanExecutor will yield if and only if parsedUpdate->canYield().
- *
- * Does not take ownership of its arguments.
- *
- * If the query is valid and an executor could be created, returns Status::OK() and populates
- * *out with the PlanExecutor. The caller takes ownership of *execOut.
- *
- * If the query cannot be executed, returns a Status indicating why.
- */
- Status getExecutorUpdate(OperationContext* txn,
- Collection* collection,
- ParsedUpdate* parsedUpdate,
- OpDebug* opDebug,
- PlanExecutor** execOut);
-
- /**
- * Get a PlanExecutor for a group operation. 'rawCanonicalQuery' describes the predicate for
- * the documents to be grouped.
- *
- * Takes ownership of 'rawCanonicalQuery'. Does not take ownership of other args.
- *
- * If the query is valid and an executor could be created, returns Status::OK() and populates
- * *out with the PlanExecutor.
- *
- * If an executor could not be created, returns a Status indicating why.
- */
- Status getExecutorGroup(OperationContext* txn,
- Collection* collection,
- const GroupRequest& request,
- PlanExecutor::YieldPolicy yieldPolicy,
- PlanExecutor** execOut);
+/*
+ * Get a PlanExecutor for a query executing as part of a count command.
+ *
+ * Count doesn't care about actually examining its results; it just wants to walk through them.
+ * As such, with certain covered queries, we can skip the overhead of fetching etc. when
+ * executing a count.
+ */
+Status getExecutorCount(OperationContext* txn,
+ Collection* collection,
+ const CountRequest& request,
+ bool explain,
+ PlanExecutor::YieldPolicy yieldPolicy,
+ PlanExecutor** execOut);
+
+/**
+ * Get a PlanExecutor for a delete operation. 'parsedDelete' describes the query predicate
+ * and delete flags like 'isMulti'. The caller must hold the appropriate MODE_X or MODE_IX
+ * locks, and must not release these locks until after the returned PlanExecutor is deleted.
+ *
+ * The returned PlanExecutor will yield if and only if parsedDelete->canYield().
+ *
+ * Does not take ownership of its arguments.
+ *
+ * If the query is valid and an executor could be created, returns Status::OK() and populates
+ * *execOut with the PlanExecutor. The caller takes ownership of *execOut.
+ *
+ * If the query cannot be executed, returns a Status indicating why.
+ */
+Status getExecutorDelete(OperationContext* txn,
+ Collection* collection,
+ ParsedDelete* parsedDelete,
+ PlanExecutor** execOut);
+
+/**
+ * Get a PlanExecutor for an update operation. 'parsedUpdate' describes the query predicate
+ * and update modifiers. The caller must hold the appropriate MODE_X or MODE_IX locks prior
+ * to calling this function, and must not release these locks until after the returned
+ * PlanExecutor is deleted.
+ *
+ * The returned PlanExecutor will yield if and only if parsedUpdate->canYield().
+ *
+ * Does not take ownership of its arguments.
+ *
+ * If the query is valid and an executor could be created, returns Status::OK() and populates
+ * *out with the PlanExecutor. The caller takes ownership of *execOut.
+ *
+ * If the query cannot be executed, returns a Status indicating why.
+ */
+Status getExecutorUpdate(OperationContext* txn,
+ Collection* collection,
+ ParsedUpdate* parsedUpdate,
+ OpDebug* opDebug,
+ PlanExecutor** execOut);
+
+/**
+ * Get a PlanExecutor for a group operation. 'rawCanonicalQuery' describes the predicate for
+ * the documents to be grouped.
+ *
+ * Takes ownership of 'rawCanonicalQuery'. Does not take ownership of other args.
+ *
+ * If the query is valid and an executor could be created, returns Status::OK() and populates
+ * *out with the PlanExecutor.
+ *
+ * If an executor could not be created, returns a Status indicating why.
+ */
+Status getExecutorGroup(OperationContext* txn,
+ Collection* collection,
+ const GroupRequest& request,
+ PlanExecutor::YieldPolicy yieldPolicy,
+ PlanExecutor** execOut);
} // namespace mongo