1
0
Fork 0

Add a comment that subquery splicing should run last (#10181)

This commit is contained in:
Markus Pfeiffer 2019-10-08 08:13:50 +01:00 committed by Michael Hackstein
parent cf99ff1586
commit e9ab15db03
1 changed files with 11 additions and 1 deletions

View File

@ -27,8 +27,8 @@
#include "Basics/Exceptions.h"
#include "Cluster/ServerState.h"
#include "FeaturePhases/V8FeaturePhase.h"
#include "Logger/Logger.h"
#include "Logger/LogMacros.h"
#include "Logger/Logger.h"
#include "RestServer/AqlFeature.h"
#include "StorageEngine/EngineSelectorFeature.h"
#include "StorageEngine/StorageEngine.h"
@ -386,6 +386,16 @@ void OptimizerRulesFeature::addRules() {
#endif
// Splice subqueries
//
// ***CAUTION***
// TL;DR: This rule (if activated) *must* run last.
//
// It changes the structure of the query plan by "splicing", i.e. replacing
// every SubqueryNode by a SubqueryStart and a SubqueryEnd node with the
// subquery's nodes in between, resulting in a linear query plan. If an
// optimizer runs after this rule, it has to be aware of SubqueryStartNode and
// SubqueryEndNode and would likely be more complicated to write.
//
registerRule("splice-subqueries", spliceSubqueriesRule, OptimizerRule::spliceSubqueriesRule,
OptimizerRule::makeFlags(OptimizerRule::Flags::CanBeDisabled,
OptimizerRule::Flags::DisabledByDefault));