diff options
Diffstat (limited to 'src/mongo/db/query/projection_policies.h')
-rw-r--r-- | src/mongo/db/query/projection_policies.h | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/src/mongo/db/query/projection_policies.h b/src/mongo/db/query/projection_policies.h index 09094227c86..1e9214f2515 100644 --- a/src/mongo/db/query/projection_policies.h +++ b/src/mongo/db/query/projection_policies.h @@ -55,6 +55,9 @@ struct ProjectionPolicies { // Whether $elemMatch, find() $slice and positional projection are allowed. enum class FindOnlyFeaturesPolicy { kBanFindOnlyFeatures, kAllowFindOnlyFeatures }; + // Whether the empty projection, {}, is permitted. + enum class EmptyProjectionPolicy { kBanEmptyProjection, kAllowEmptyProjection }; + static const DefaultIdPolicy kDefaultIdPolicyDefault = DefaultIdPolicy::kIncludeId; static const ArrayRecursionPolicy kArrayRecursionPolicyDefault = ArrayRecursionPolicy::kRecurseNestedArrays; @@ -62,46 +65,66 @@ struct ProjectionPolicies { ComputedFieldsPolicy::kAllowComputedFields; static const FindOnlyFeaturesPolicy kFindOnlyFeaturesPolicyDefault = FindOnlyFeaturesPolicy::kBanFindOnlyFeatures; + static const EmptyProjectionPolicy kEmptyProjectionPolicyDefault = + EmptyProjectionPolicy::kBanEmptyProjection; static ProjectionPolicies findProjectionPolicies() { return ProjectionPolicies{kDefaultIdPolicyDefault, kArrayRecursionPolicyDefault, kComputedFieldsPolicyDefault, - FindOnlyFeaturesPolicy::kAllowFindOnlyFeatures}; + FindOnlyFeaturesPolicy::kAllowFindOnlyFeatures, + EmptyProjectionPolicy::kAllowEmptyProjection}; } static ProjectionPolicies aggregateProjectionPolicies() { return ProjectionPolicies{kDefaultIdPolicyDefault, kArrayRecursionPolicyDefault, kComputedFieldsPolicyDefault, - FindOnlyFeaturesPolicy::kBanFindOnlyFeatures}; + FindOnlyFeaturesPolicy::kBanFindOnlyFeatures, + kEmptyProjectionPolicyDefault}; } static ProjectionPolicies wildcardIndexSpecProjectionPolicies() { return ProjectionPolicies{DefaultIdPolicy::kExcludeId, ArrayRecursionPolicy::kDoNotRecurseNestedArrays, ComputedFieldsPolicy::kBanComputedFields, - FindOnlyFeaturesPolicy::kBanFindOnlyFeatures}; + FindOnlyFeaturesPolicy::kBanFindOnlyFeatures, + kEmptyProjectionPolicyDefault}; + } + + static ProjectionPolicies columnStoreIndexSpecProjectionPolicies() { + return ProjectionPolicies{kDefaultIdPolicyDefault, + ArrayRecursionPolicy::kDoNotRecurseNestedArrays, + ComputedFieldsPolicy::kBanComputedFields, + FindOnlyFeaturesPolicy::kBanFindOnlyFeatures, + EmptyProjectionPolicy::kAllowEmptyProjection}; } ProjectionPolicies( DefaultIdPolicy idPolicy = kDefaultIdPolicyDefault, ArrayRecursionPolicy arrayRecursionPolicy = kArrayRecursionPolicyDefault, ComputedFieldsPolicy computedFieldsPolicy = kComputedFieldsPolicyDefault, - FindOnlyFeaturesPolicy findOnlyFeaturesPolicy = kFindOnlyFeaturesPolicyDefault) + FindOnlyFeaturesPolicy findOnlyFeaturesPolicy = kFindOnlyFeaturesPolicyDefault, + EmptyProjectionPolicy emptyProjectionPolicy = kEmptyProjectionPolicyDefault) : idPolicy(idPolicy), arrayRecursionPolicy(arrayRecursionPolicy), computedFieldsPolicy(computedFieldsPolicy), - findOnlyFeaturesPolicy(findOnlyFeaturesPolicy) {} + findOnlyFeaturesPolicy(findOnlyFeaturesPolicy), + emptyProjectionPolicy(emptyProjectionPolicy) {} const DefaultIdPolicy idPolicy; const ArrayRecursionPolicy arrayRecursionPolicy; const ComputedFieldsPolicy computedFieldsPolicy; const FindOnlyFeaturesPolicy findOnlyFeaturesPolicy; + const EmptyProjectionPolicy emptyProjectionPolicy; bool findOnlyFeaturesAllowed() const { return findOnlyFeaturesPolicy == FindOnlyFeaturesPolicy::kAllowFindOnlyFeatures; } + + bool emptyProjectionAllowed() const { + return emptyProjectionPolicy == EmptyProjectionPolicy::kAllowEmptyProjection; + } }; } // namespace mongo |