Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <summary>
        /// Optimize the graph.
        /// </summary>
        /// <param name="options">Optimization options.</param>
        public void Optimize(QueryGraphOptimizationOptions options)
        {
            if (empty)
            {
                return;
            }

            Optimize(root, options);
        }