summaryrefslogtreecommitdiff
path: root/src/mongo/db/query/plan_cache_indexability.h
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-11 15:07:35 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-11 15:07:35 -0300
commit4cb8841196d0625dfa3825aa326f071cd27c7b8b (patch)
tree1682a647d4463397c119183369ae6f750d5fdcff /src/mongo/db/query/plan_cache_indexability.h
parentaa03c6362cbaa767638e6eed9b031d86dd2643d1 (diff)
parent8f0827553e09872941945a093b647a4211a9db7f (diff)
Update upstream source from tag 'upstream/6.0.0'master
Update to upstream version '6.0.0' with Debian dir 5604a80ec1c96ca76f25f40d78e6ef855abec322
Diffstat (limited to 'src/mongo/db/query/plan_cache_indexability.h')
-rw-r--r--src/mongo/db/query/plan_cache_indexability.h32
1 files changed, 8 insertions, 24 deletions
diff --git a/src/mongo/db/query/plan_cache_indexability.h b/src/mongo/db/query/plan_cache_indexability.h
index 0aa08359c27..9bc03494865 100644
--- a/src/mongo/db/query/plan_cache_indexability.h
+++ b/src/mongo/db/query/plan_cache_indexability.h
@@ -47,7 +47,6 @@ class ProjectionExecutor;
using IndexabilityDiscriminator = std::function<bool(const MatchExpression* me)>;
using IndexabilityDiscriminators = std::vector<IndexabilityDiscriminator>;
using IndexToDiscriminatorMap = StringMap<CompositeIndexabilityDiscriminator>;
-using PathDiscriminatorsMap = StringMap<IndexToDiscriminatorMap>;
/**
* CompositeIndexabilityDiscriminator holds all indexability discriminators for a particular path,
@@ -78,14 +77,9 @@ private:
};
/**
- * PlanCacheIndexabilityState holds a set of "indexability discriminators. An indexability
- * discriminator is a binary predicate function, used to classify match expressions based on the
- * data values in the expression.
- *
- * These discriminators are used to distinguish between queries of a similar shape but not the same
- * candidate indexes. So each discriminator typically represents a decision like "is this index
- * valid?" or "does this piece of the query disqualify it from using this index?". The output of
- * these decisions is included in the plan cache key.
+ * PlanCacheIndexabilityState holds a set of "indexability discriminators" for certain paths.
+ * An indexability discriminator is a binary predicate function, used to classify match
+ * expressions based on the data values in the expression.
*/
class PlanCacheIndexabilityState {
PlanCacheIndexabilityState(const PlanCacheIndexabilityState&) = delete;
@@ -101,15 +95,7 @@ public:
* The object returned by reference is valid until the next call to updateDiscriminators() or
* until destruction of 'this', whichever is first.
*/
- const IndexToDiscriminatorMap& getPathDiscriminators(StringData path) const;
-
- /**
- * Returns a map of index name to discriminator set. These discriminators are not
- * associated with a particular path of a query and apply to the entire MatchExpression.
- */
- const IndexToDiscriminatorMap& getGlobalDiscriminators() const {
- return _globalDiscriminatorMap;
- }
+ const IndexToDiscriminatorMap& getDiscriminators(StringData path) const;
/**
* Construct an IndexToDiscriminator map for the given path, only for the wildcard indexes
@@ -123,6 +109,8 @@ public:
void updateDiscriminators(const std::vector<CoreIndexInfo>& indexCores);
private:
+ using PathDiscriminatorsMap = StringMap<IndexToDiscriminatorMap>;
+
/**
* A $** index may index an infinite number of fields. We cannot just store a discriminator for
* every possible field that it indexes, so we have to maintain some special context about the
@@ -154,8 +142,8 @@ private:
void processSparseIndex(const std::string& indexName, const BSONObj& keyPattern);
/**
- * Adds a global discriminator for the partial index with the given filter expression
- * to the discriminators for that index in '_globalDiscriminatorMap'.
+ * Adds partial index discriminators for the partial index with the given filter expression
+ * to the discriminators for that index in '_pathDiscriminatorsMap'.
*
* A partial index discriminator distinguishes expressions that match a given partial index
* predicate from expressions that don't match the partial index predicate. For example,
@@ -186,10 +174,6 @@ private:
// PathDiscriminatorsMap is a map from field path to index name to IndexabilityDiscriminator.
PathDiscriminatorsMap _pathDiscriminatorsMap;
- // Map from index name to global discriminators. These are discriminators which do not apply to
- // a single path but the entire MatchExpression.
- IndexToDiscriminatorMap _globalDiscriminatorMap;
-
std::vector<WildcardIndexDiscriminatorContext> _wildcardIndexDiscriminators;
};