summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/expression_context.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/expression_context.cpp')
-rw-r--r--src/mongo/db/pipeline/expression_context.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/mongo/db/pipeline/expression_context.cpp b/src/mongo/db/pipeline/expression_context.cpp
index 12f4d1b1e9a..5bfc56283f7 100644
--- a/src/mongo/db/pipeline/expression_context.cpp
+++ b/src/mongo/db/pipeline/expression_context.cpp
@@ -35,6 +35,7 @@
#include "mongo/db/pipeline/process_interface/stub_mongo_process_interface.h"
#include "mongo/db/query/collation/collation_spec.h"
#include "mongo/db/query/collation/collator_factory_interface.h"
+#include "mongo/db/stats/counters.h"
#include "mongo/util/intrusive_counter.h"
namespace mongo {
@@ -213,4 +214,24 @@ intrusive_ptr<ExpressionContext> ExpressionContext::copyWith(
return expCtx;
}
+void ExpressionContext::startExpressionCounters() {
+ if (!_expressionCounters) {
+ _expressionCounters = boost::make_optional<ExpressionCounters>({});
+ }
+}
+
+void ExpressionContext::incrementMatchExprCounter(StringData name) {
+ if (_expressionCounters) {
+ ++_expressionCounters.get().matchExprCountersMap[name];
+ }
+}
+
+void ExpressionContext::stopExpressionCounters() {
+ if (_expressionCounters) {
+ operatorCountersMatchExpressions.mergeCounters(
+ _expressionCounters.get().matchExprCountersMap);
+ }
+ _expressionCounters = boost::none;
+}
+
} // namespace mongo