summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaama Bareket <naama.bareket@mongodb.com>2022-10-14 18:33:29 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-10-14 19:09:41 +0000
commitc42aed0b472e16e61caa5b34fda8a70757b91dc7 (patch)
treeb10e73c2c6b73887041365ba02c2a8da76bd843f
parent3f9902ef27f666484b9b6a48d180efef3fce5960 (diff)
downloadmongo-c42aed0b472e16e61caa5b34fda8a70757b91dc7.tar.gz
SERVER-69909: [CQF] Explain of Constant should be lossess and display tag/value
-rw-r--r--src/mongo/db/query/optimizer/explain.cpp14
-rw-r--r--src/mongo/db/query/optimizer/optimizer_test.cpp11
2 files changed, 21 insertions, 4 deletions
diff --git a/src/mongo/db/query/optimizer/explain.cpp b/src/mongo/db/query/optimizer/explain.cpp
index de32dc051fe..5796de6f03a 100644
--- a/src/mongo/db/query/optimizer/explain.cpp
+++ b/src/mongo/db/query/optimizer/explain.cpp
@@ -1895,10 +1895,16 @@ public:
ExplainPrinter transport(const Constant& expr) {
ExplainPrinter printer("Const");
- printer.separator(" [")
- .fieldName("value", ExplainVersion::V3)
- .print(expr.get())
- .separator("]");
+ printer.separator(" [").fieldName("tag", ExplainVersion::V3);
+
+ if (version == ExplainVersion::V3) {
+ std::stringstream ss;
+ ss << expr.get().first;
+ std::string tagAsString = ss.str();
+ printer.print(tagAsString);
+ }
+
+ printer.fieldName("value", ExplainVersion::V3).print(expr.get()).separator("]");
return printer;
}
diff --git a/src/mongo/db/query/optimizer/optimizer_test.cpp b/src/mongo/db/query/optimizer/optimizer_test.cpp
index 4f5fa788eac..d52b84470a1 100644
--- a/src/mongo/db/query/optimizer/optimizer_test.cpp
+++ b/src/mongo/db/query/optimizer/optimizer_test.cpp
@@ -744,5 +744,16 @@ TEST(Explain, ExplainV2Compact) {
evalNode);
}
+TEST(Explain, ExplainBsonForConstant) {
+ ABT cNode = Constant::int64(3);
+ auto [tag, val] = ExplainGenerator::explainBSON(cNode);
+ sbe::value::ValueGuard vg(tag, val);
+ ASSERT_EQ(
+ "{\n nodeType: \"Const\", \n"
+ " tag: \"NumberInt64\", \n"
+ " value: 3\n}\n",
+ ExplainGenerator::printBSON(tag, val));
+}
+
} // namespace
} // namespace mongo::optimizer