public static void TransformOrdering(Querytree tree, List<Treenode> nodelist, List<Treenode> operands)
        {
            Treenode lastnode = null;

            foreach (Treenode node in nodelist)
            {
                Treenode operand1 = JoinOptimizer.getOperand(node, operands);
                Treenode operand2 = JoinOptimizer.getOperand(node, operands);

                if (operand2 != null)
                {
                    node.Operand1 = operand1;
                    operand1.Parent = node;
                    node.Operand2 = operand2;
                    operand2.Parent = node;
                }
                else
                {
                    lastnode.Parent = node;
                    node.Operand1 = lastnode;
                    node.Operand2 = operand1;
                }
                lastnode = node;
            }
            Treenode checknode = tree.Root;

            while (checknode.Operand1.NodeType != Treenode.Type.join)
                checknode = checknode.Operand1;

            checknode.Operand1 = lastnode;
            lastnode.Parent = checknode;
        }
        public static void selectionPushDowns(Querytree tree)
        {
            if (tree != null)
            {
                List<Treenode> nodes = new List<Treenode>();
                findSelectNodes(nodes, tree.Root);

                foreach (Treenode node in nodes)
                    selectionPushDown(node, node, node.Parent, node.Operand1);
            }
        }
 public static void conjuctiveSelectionsSeparation(Querytree tree)
 {
     if (tree != null)
         conjuctiveSelectionSeparation(tree.Root, null);
 }
 public static void selectOperators(Querytree tree)
 {
     if (tree != null)
         selectOptimalOperator(tree.Root);
 }
 public static void startPushDown(List<ConditionElement> elements, Querytree tree)
 {
     if (tree != null)
         pushDown(elements, tree.Root);
 }