* Add Start/End subquery node skeleton
* Added a test query that triggers complex interna in the future and needs to proof that our work is side-effect free.
* Added first draft of ShadowRow Interface
* Refactored RegisterPlan and pulled it out of the ExecutionNode
* AqlItemBlock now has an additional hidden register to store subquery depth infromation. Right now no shadow rows are created, however thy could now make use of this situation
* Added API and test to insert new shadow rows into an OutputRow.
* Extrated test helper function
* Add template function to statically assert size of type
* Add Start/End subquery node skeleton
* Add Start/End subquery node creation to ExecutionNode
* Cleanup SubqueryEndNode
* Add test file
* Add isEqualTo to ExecutionNode
* Subquery nodes cleanup
* Update ExecutionNode tests
* Added API and tests to consume ShadowRows. Interface is there and compiles with templates, we might need to implement further underlying functions later on as we make progress on ShadowRows, it is only implemented in the minimal way (intentionally)
* Updates to testing code
* Added a test for nested ShadowRows and adapted OutputRow accordingly.
* More updates
* Add optimizer rule
* Fix optimizer rule
* Added additional memory include, seems to be required under GCC not udner CLANG
* it actually helps to save fies before commiting them...
* Fix optimizer rule (again)
* Fixed serialization/Deserialization of AqlItemBlock to contain the hidden subquery register now
* Added a c++ test for AqlItemBlock. It just covers the basics thus far and needs to be improved.
* Fixed toVPack of AqlInputRow for subqueries. Also added serialization / deserialization tests for AqlItemRow
* Added a c++ test for inputAqlItem row serialization => AqlItemBlock deserialization
* Add a public function to get plan from query
* Fix register planning
* Add test for splicing subquery nodes
* add static asserts for sizes of SubqueryStartNode and SubqueryEndNode
* Add comment about statically asserted size
* Fix isEqualTo virtual and override dance.
* Attempt to fix :windows: compile warning
* Fix isEqualTo, remove static_assert_size
* Remove a TODO; the plan owns the ExecutionNodes
* Only add stealPlan to Query when testing
* Remove another static_assert_size
* Fixed mac compile issues
* Added a serialization format to be backwards compatible to 3.5 whenever AQL item blocks need to be send over to remote nodes.
* Handle ShadowAqlItemRow in SingleRowFetcher
* Move some code from header to cpp
* Added more tests for serialization of shadow rows, and fixed a bug revealed by this
* Apply suggestions from code review
Thank you for review!
Co-Authored-By: Tobias Gödderz <tobias@arangodb.com>
* Review comments. Thanks for spotting
* Fixed hidden merge conflicts
* Removed unused variable
* Added first test on ShadowRows in SingleRowFetcher. Found inconvenience in original code with it.
* Added a test for multi level shadow rows
* Added a test and fixed production for multiple consecutirve shadow rows.
* Added tests for pass through blocks and shadow rows
* Attempt to explain windows on how one can actually cast numbers into other number types...
* Add SubqueryEndExecutor
* Adapted RowFetcherHelper to be able to work on ShadowRows
* Fixed minor error in RowFetcherHelper that causes LIMIT tests to error
* Temporarily disabled test suites (sorry there is only one 'test case' in this suites that does all or nothing tests ...) as it tests a feature we cannot support in this intermediate state, we need to default disable our new rule first.
* IMplemented missing function to copy over SubqueryDepth between blocks
* Seperated assert, to see faster which part is violated
* Update arangod/Aql/AqlItemBlockSerializationFormat.h
Co-Authored-By: Tobias Gödderz <tobias@arangodb.com>
* Disabled subquery splice rule by default
* Forgotten merge marker
* temporarily modified test
* Some Subquery End Executor work
* Fix RowFetcherHelper to work with ShadowRows
* Add tests for SubqueryEndExecutor
* Rewrite SubqueryEndExecutor
* Update test
* Add createBlock code for SubqueryEndExecutionNode
* Some fixups adding ExecutionBlockImpl for SubqueryEndExecutor
* Fix SubqueryEndExecutor
* Update SubqueryEndExecutorTest
* Update endexecutor test
* Fix the endnode executor once more
* Fix some merge fallout
* Update test
* Add missing advanceRow to SubqueryEndExecutor
* SubqueryEndExecutor Tests
* Activate a death test
* Better handling of death test
* RowFetcherTest refactoring Part 1, still ongoing. We use this for AqlItemMatrix and SingleRowFetcher
* Update and cleanup the SubqueryEndExecutor tests
* Check that expected shadow row depths are met
* Remove commented out code in AqlItemBlock.cpp
* Remove a misplaced comment
* Sort out SubqueryEndExecutor includes
* Remove superflous include
* Consistently use NoStats{} in SubqueryEndExecutor
* Make SubqueryEndExecutor properties constexpr
* Reactivate IResearchTests
* Do not copy the accumulator in SubqueryEndNode
* Return a more sensible value for expectedNumberOfRows of SubqueryEndNodeExecutor
* Constify an argument
* Fix ownership problems with the buffer for _accumulator
* Cleanup SubqueryEndExecutor tests
Also add a test that writes to a register other than 0
* Patch RowFetcherHelper to count the number of Items returned instead of number
of calls
* Make MSVC happy
* Add Start/End subquery node skeleton
* Added a test query that triggers complex interna in the future and needs to proof that our work is side-effect free.
* Add template function to statically assert size of type
* Add Start/End subquery node skeleton
* Add Start/End subquery node creation to ExecutionNode
* Cleanup SubqueryEndNode
* Add test file
* Add isEqualTo to ExecutionNode
* Subquery nodes cleanup
* Update ExecutionNode tests
* Updates to testing code
* More updates
* Add optimizer rule
* Fix optimizer rule
* Fix optimizer rule (again)
* Add a public function to get plan from query
* Fix register planning
* Add test for splicing subquery nodes
* add static asserts for sizes of SubqueryStartNode and SubqueryEndNode
* Add comment about statically asserted size
* Fix isEqualTo virtual and override dance.
* Fix isEqualTo, remove static_assert_size
* Remove a TODO; the plan owns the ExecutionNodes
* Only add stealPlan to Query when testing
* Remove another static_assert_size
* Disabled subquery splice rule by default
* temporarily modified test
* Fixed windows compile
* Fixed unused variable warning