From 7b65a958d89b0575a60bb4b4923d96d892fc5777 Mon Sep 17 00:00:00 2001 From: Max Neunhoeffer Date: Wed, 6 Aug 2014 15:13:22 +0200 Subject: [PATCH 1/2] Take care of static analyis case AggregateNode. --- arangod/Aql/ExecutionBlock.h | 19 +++++++++++++++++++ arangod/Aql/ExecutionNode.h | 5 ++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/arangod/Aql/ExecutionBlock.h b/arangod/Aql/ExecutionBlock.h index a5e6e96d53..a16c5ca17b 100644 --- a/arangod/Aql/ExecutionBlock.h +++ b/arangod/Aql/ExecutionBlock.h @@ -257,6 +257,19 @@ namespace triagens { totalNrRegs++; break; } + case ExecutionNode::AGGREGATE: { + // FIXME: are there more variables being defined in this + // node??? + auto ep = static_cast(eb->getPlanNode()); + if (ep->_outVariable != nullptr) { + nrRegsHere[depth]++; + nrRegs[depth]++; + varInfo.insert(make_pair(ep->_outVariable->id, + VarInfo(depth, totalNrRegs))); + totalNrRegs++; + } + break; + } // TODO: potentially more cases default: break; @@ -272,6 +285,11 @@ namespace triagens { v->setSharedPtr(&v); walk(v.get()); v->reset(); + std::cout << "Varinfo:\n"; + for (auto x : v->varInfo) { + std::cout << x.first << " => " << x.second.depth << "," + << x.second.registerId << std::endl; + } } //////////////////////////////////////////////////////////////////////////////// @@ -1447,6 +1465,7 @@ namespace triagens { for( auto p: en->_elements){ //We know that staticAnalysis has been run, so _varOverview is set up + std::cout << "Looking for " << p.first->id << std::endl; auto it = _varOverview->varInfo.find(p.first->id); TRI_ASSERT(it != _varOverview->varInfo.end()); _sortRegisters.push_back(make_pair(it->second.registerId, p.second)); diff --git a/arangod/Aql/ExecutionNode.h b/arangod/Aql/ExecutionNode.h index 2b041fe73b..b36fe7a4e9 100644 --- a/arangod/Aql/ExecutionNode.h +++ b/arangod/Aql/ExecutionNode.h @@ -68,8 +68,7 @@ namespace triagens { CALCULATION, // done SUBQUERY, // done SORT, // done - AGGREGATE_ON_SORTED, - AGGREGATE_ON_UNSORTED, // todo + AGGREGATE, // todo LOOKUP_JOIN, MERGE_JOIN, LOOKUP_INDEX_UNIQUE, @@ -1033,7 +1032,7 @@ namespace triagens { //////////////////////////////////////////////////////////////////////////////// virtual NodeType getType () const { - return SORT; + return AGGREGATE; } //////////////////////////////////////////////////////////////////////////////// From d07706674b2ff5f51ede882417952657e062309d Mon Sep 17 00:00:00 2001 From: Max Neunhoeffer Date: Wed, 6 Aug 2014 15:23:48 +0200 Subject: [PATCH 2/2] Change signature of TRI_CompareShapedJson. --- arangod/SkipLists/skiplistIndex.cpp | 6 +++--- arangod/VocBase/voc-shaper.cpp | 13 ++++--------- arangod/VocBase/voc-shaper.h | 4 ++-- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/arangod/SkipLists/skiplistIndex.cpp b/arangod/SkipLists/skiplistIndex.cpp index 9de43e2b90..18b4b184ef 100644 --- a/arangod/SkipLists/skiplistIndex.cpp +++ b/arangod/SkipLists/skiplistIndex.cpp @@ -75,7 +75,7 @@ static int CompareKeyElement (TRI_shaped_json_t const* left, result = TRI_CompareShapeTypes(nullptr, nullptr, left, - right->_document, + right->_document->getShapedJsonPtr(), &right->_subObjects[rightPosition], nullptr, shaper); @@ -109,10 +109,10 @@ static int CompareElementElement (TRI_skiplist_index_element_t* left, TRI_ASSERT(nullptr != left); TRI_ASSERT(nullptr != right); - int result = TRI_CompareShapeTypes(left->_document, + int result = TRI_CompareShapeTypes(left->_document->getShapedJsonPtr(), &left->_subObjects[leftPosition], nullptr, - right->_document, + right->_document->getShapedJsonPtr(), &right->_subObjects[rightPosition], nullptr, shaper); diff --git a/arangod/VocBase/voc-shaper.cpp b/arangod/VocBase/voc-shaper.cpp index f0c1982b33..4e107810c6 100644 --- a/arangod/VocBase/voc-shaper.cpp +++ b/arangod/VocBase/voc-shaper.cpp @@ -1128,10 +1128,10 @@ static void DestroyAttributesVector (TRI_vector_t* vector) { /// You must either supply (rightDocument, rightObject) or rightShaped. //////////////////////////////////////////////////////////////////////////////// -int TRI_CompareShapeTypes (TRI_doc_mptr_t* leftDocument, +int TRI_CompareShapeTypes (char const* leftDocument, TRI_shaped_sub_t* leftObject, TRI_shaped_json_t const* leftShaped, - TRI_doc_mptr_t* rightDocument, + char const* rightDocument, TRI_shaped_sub_t* rightObject, TRI_shaped_json_t const* rightShaped, TRI_shaper_t* shaper) { @@ -1144,16 +1144,13 @@ int TRI_CompareShapeTypes (TRI_doc_mptr_t* leftDocument, TRI_shaped_json_t leftElement; TRI_shaped_json_t right; TRI_shaped_json_t rightElement; - char const* ptr; int result; // left is either a shaped json or a shaped sub object if (leftDocument != nullptr) { - ptr = leftDocument->getShapedJsonPtr(); // ONLY IN INDEX - left._sid = leftObject->_sid; left._data.length = (uint32_t) leftObject->_length; - left._data.data = const_cast(ptr) + leftObject->_offset; + left._data.data = const_cast(leftDocument) + leftObject->_offset; } else { left = *leftShaped; @@ -1161,11 +1158,9 @@ int TRI_CompareShapeTypes (TRI_doc_mptr_t* leftDocument, // right is either a shaped json or a shaped sub object if (rightDocument != nullptr) { - ptr = rightDocument->getShapedJsonPtr(); // ONLY IN INDEX - right._sid = rightObject->_sid; right._data.length = (uint32_t) rightObject->_length; - right._data.data = const_cast(ptr) + rightObject->_offset; + right._data.data = const_cast(rightDocument) + rightObject->_offset; } else { right = *rightShaped; diff --git a/arangod/VocBase/voc-shaper.h b/arangod/VocBase/voc-shaper.h index 57b6acdb1e..f85afb7f8b 100644 --- a/arangod/VocBase/voc-shaper.h +++ b/arangod/VocBase/voc-shaper.h @@ -125,10 +125,10 @@ bool TRI_ExtractShapedJsonVocShaper (TRI_shaper_t* s, /// You must either supply (rightDocument, rightObject) or rightShaped. //////////////////////////////////////////////////////////////////////////////// -int TRI_CompareShapeTypes (TRI_doc_mptr_t* leftDocument, +int TRI_CompareShapeTypes (char const* leftDocument, TRI_shaped_sub_t* leftObject, TRI_shaped_json_t const* leftShaped, - TRI_doc_mptr_t* rightDocument, + char const* rightDocument, TRI_shaped_sub_t* rightObject, TRI_shaped_json_t const* rightShaped, TRI_shaper_t* shaper);