From d6d8f321e77d42f0206215b3d81b997c3d201a24 Mon Sep 17 00:00:00 2001 From: jsteemann Date: Tue, 22 Oct 2019 16:04:55 +0200 Subject: [PATCH 1/2] move static variable from function into TU scope --- arangod/Aql/ClusterNodes.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/arangod/Aql/ClusterNodes.cpp b/arangod/Aql/ClusterNodes.cpp index 5c4656b881..5f2c57fb92 100644 --- a/arangod/Aql/ClusterNodes.cpp +++ b/arangod/Aql/ClusterNodes.cpp @@ -63,14 +63,14 @@ namespace { arangodb::velocypack::StringRef const SortModeUnset("unset"); arangodb::velocypack::StringRef const SortModeMinElement("minelement"); arangodb::velocypack::StringRef const SortModeHeap("heap"); + +std::map const NameToValue{ + {SortModeMinElement, GatherNode::SortMode::MinElement}, + {SortModeHeap, GatherNode::SortMode::Heap}, + {SortModeUnset, GatherNode::SortMode::Default}}; bool toSortMode(arangodb::velocypack::StringRef const& str, GatherNode::SortMode& mode) noexcept { // std::map ~25-30% faster than std::unordered_map for small number of elements - static std::map const NameToValue{ - {SortModeMinElement, GatherNode::SortMode::MinElement}, - {SortModeHeap, GatherNode::SortMode::Heap}, - {SortModeUnset, GatherNode::SortMode::Default}}; - auto const it = NameToValue.find(str); if (it == NameToValue.end()) { From b2f6fb105cd885a8e9ed67d6f157d038b3251749 Mon Sep 17 00:00:00 2001 From: jsteemann Date: Tue, 22 Oct 2019 16:05:12 +0200 Subject: [PATCH 2/2] added "parallel" output to explainer --- js/common/modules/@arangodb/aql/explainer.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/js/common/modules/@arangodb/aql/explainer.js b/js/common/modules/@arangodb/aql/explainer.js index e340d68fef..916fb0ca2e 100644 --- a/js/common/modules/@arangodb/aql/explainer.js +++ b/js/common/modules/@arangodb/aql/explainer.js @@ -1640,12 +1640,20 @@ function processQuery(query, explain, planIndex) { case 'ScatterNode': return keyword('SCATTER'); case 'GatherNode': + let gatherAnnotations = []; + if (node.isParallelizable) { + gatherAnnotations.push('parallel'); + } + if (node.sortmode !== 'unset') { + gatherAnnotations.push('sort mode: ' + node.sortmode); + } return keyword('GATHER') + ' ' + node.elements.map(function (node) { if (node.path && node.path.length) { return variableName(node.inVariable) + node.path.map(function (n) { return '.' + attribute(n); }) + ' ' + keyword(node.ascending ? 'ASC' : 'DESC'); } return variableName(node.inVariable) + ' ' + keyword(node.ascending ? 'ASC' : 'DESC'); - }).join(', ') + (node.sortmode === 'unset' ? '' : ' ' + annotation('/* sort mode: ' + node.sortmode + ' */')); + }).join(', ') + (gatherAnnotations.length ? ' ' + annotation('/* ' + gatherAnnotations.join(', ') + ' */') : ''); + case 'MaterializeNode': return keyword('MATERIALIZE') + ' ' + variableName(node.outVariable); }