Package org.voltdb.planner.parseinfo

Examples of org.voltdb.planner.parseinfo.JoinNode


     *          for n2 inner and outer tables
     */
    private static void simplifyOuterJoin(BranchNode joinTree) {
        assert(joinTree != null);
        List<AbstractExpression> exprs = new ArrayList<AbstractExpression>();
        JoinNode leftNode = joinTree.getLeftNode();
        JoinNode rightNode = joinTree.getRightNode();
        // For the top level node only WHERE expressions need to be evaluated for NULL-rejection
        if (leftNode.getWhereExpression() != null) {
            exprs.add(leftNode.getWhereExpression());
        }
        if (rightNode.getWhereExpression() != null) {
            exprs.add(rightNode.getWhereExpression());
        }
        simplifyOuterJoinRecursively(joinTree, exprs);
    }
View Full Code Here


        simplifyOuterJoinRecursively(joinTree, exprs);
    }

    private static void simplifyOuterJoinRecursively(BranchNode joinNode, List<AbstractExpression> exprs) {
        assert (joinNode != null);
        JoinNode leftNode = joinNode.getLeftNode();
        JoinNode rightNode = joinNode.getRightNode();
        if (joinNode.getJoinType() == JoinType.LEFT) {
            for (AbstractExpression expr : exprs) {
                // Get all the tables underneath this node and
                // see if the expression is NULL-rejecting for any of them
                Collection<String> tableAliases = rightNode.generateTableJoinOrder();
                boolean rejectNull = false;
                for (String tableAlias : tableAliases) {
                    if (ExpressionUtil.isNullRejectingExpression(expr, tableAlias)) {
                        // We are done at this level
                        joinNode.setJoinType(JoinType.INNER);
                        rejectNull = true;
                        break;
                    }
                }
                if (rejectNull) {
                    break;
                }
            }
        } else {
            assert(joinNode.getJoinType() == JoinType.INNER);
        }

        // Now add this node expression to the list and descend
        // In case of outer join, the inner node adds its WHERE and JOIN expressions, while
        // the outer node adds its WHERE ones only - the outer node does not introduce NULLs
        List<AbstractExpression> newExprs = new ArrayList<AbstractExpression>(exprs);
        if (leftNode.getJoinExpression() != null) {
            newExprs.add(leftNode.getJoinExpression());
        }
        if (rightNode.getJoinExpression() != null) {
            newExprs.add(rightNode.getJoinExpression());
        }

        if (leftNode.getWhereExpression() != null) {
            exprs.add(leftNode.getWhereExpression());
        }
        if (rightNode.getWhereExpression() != null) {
            exprs.add(rightNode.getWhereExpression());
        }

        if (joinNode.getJoinType() == JoinType.INNER) {
            exprs.addAll(newExprs);
            if (leftNode instanceof BranchNode) {
View Full Code Here

TOP

Related Classes of org.voltdb.planner.parseinfo.JoinNode

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.