void Optimize(IQueryNode rootNode, QueryGraphOptimizationOptions options) { if (rootNode.leaf) { return; } if (options.propagateNotToLeaves) { PropagateNotToLeaves(ref rootNode); } if (options.swapNotToRightHandSide) { SwapNotToRightHandSide(rootNode); } if (options.swapFilterFunctionsToRightHandSide) { SwapFilterFunctionsToRightHandSide(rootNode); } // ReSharper disable once ForCanBeConvertedToForeach for (var i = 0; i < rootNode.children.Count; ++i) { Optimize(rootNode.children[i], options); } // Reduce Not depth (do this as last step) ReduceNotDepth(rootNode); }
/// <summary> /// Optimize the graph. /// </summary> /// <param name="options">Optimization options.</param> public void Optimize(QueryGraphOptimizationOptions options) { if (empty) { return; } Optimize(root, options); }