@Override public TableNode visit(JoinTableNode joinNode) throws SQLException { TableNode lhs = joinNode.getLHS(); TableNode rhs = joinNode.getRHS(); TableNode lhsReplace = lhs.accept(this); TableNode rhsReplace = rhs.accept(this); if (lhs == lhsReplace && rhs == rhsReplace) return joinNode; return FACTORY.join(joinNode.getType(), lhsReplace, rhsReplace, joinNode.getOnNode(), joinNode.isSingleValueOnly()); }
state._fsp--; if (state.failed) return ret; if ( state.backtracking==0 ) { ret = factory.join(JoinTableNode.JoinType.Inner, ret, s, null, false); }
JoinType joinType = isTopNode ? JoinType.Inner : JoinType.Left; ParseNode ret = NODE_FACTORY.comparison(node.getFilterOp(), l.get(0), NODE_FACTORY.column(NODE_FACTORY.table(null, rhsTableAlias), selectNodes.get(0).getAlias(), null)); tableNode = NODE_FACTORY.join(joinType, tableNode, rhsTable, onNode, !isAggregate || isGroupby);
TableNode rhsTable = NODE_FACTORY.derivedTable(rhsTableAlias, subquery); JoinType joinType = isTopNode ? JoinType.Inner : JoinType.Left; tableNode = NODE_FACTORY.join(joinType, tableNode, rhsTable, onNode, false);
@Override public ParseNode visitLeave(InParseNode node, List<ParseNode> l) throws SQLException { boolean isTopNode = topNode == node; if (isTopNode) { topNode = null; } SubqueryParseNode subqueryNode = (SubqueryParseNode) l.get(1); SelectStatement subquery = fixSubqueryStatement(subqueryNode.getSelectNode()); String rhsTableAlias = ParseNodeFactory.createTempAlias(); List<AliasedNode> selectNodes = fixAliasedNodes(subquery.getSelect(), true); subquery = NODE_FACTORY.select(subquery, !node.isSubqueryDistinct(), selectNodes); ParseNode onNode = getJoinConditionNode(l.get(0), selectNodes, rhsTableAlias); TableNode rhsTable = NODE_FACTORY.derivedTable(rhsTableAlias, subquery); JoinType joinType = isTopNode ? (node.isNegate() ? JoinType.Anti : JoinType.Semi) : JoinType.Left; ParseNode ret = isTopNode ? null : NODE_FACTORY.isNull(NODE_FACTORY.column(NODE_FACTORY.table(null, rhsTableAlias), selectNodes.get(0).getAlias(), null), !node.isNegate()); tableNode = NODE_FACTORY.join(joinType, tableNode, rhsTable, onNode, false); return ret; }
@Override public TableNode visit(JoinTableNode joinNode) throws SQLException { TableNode lhsNode = joinNode.getLHS(); TableNode rhsNode = joinNode.getRHS(); ParseNode onNode = joinNode.getOnNode(); TableNode normLhsNode = lhsNode.accept(this); TableNode normRhsNode = rhsNode.accept(this); parseNodeRewriter.reset(); ParseNode normOnNode = onNode == null ? null : onNode.accept(parseNodeRewriter); if (lhsNode == normLhsNode && rhsNode == normRhsNode && onNode == normOnNode) return joinNode; return NODE_FACTORY.join(joinNode.getType(), normLhsNode, normRhsNode, normOnNode, joinNode.isSingleValueOnly()); }
JoinType joinType = isTopNode ? (node.isNegate() ? JoinType.Anti : JoinType.Semi) : JoinType.Left; ParseNode ret = isTopNode ? null : NODE_FACTORY.isNull(NODE_FACTORY.column(NODE_FACTORY.table(null, rhsTableAlias), selectNodes.get(0).getAlias(), null), !node.isNegate()); tableNode = NODE_FACTORY.join(joinType, tableNode, rhsTable, onNode, false);
state._fsp--; if (state.failed) return ret; if ( state.backtracking==0 ) { ret = factory.join(j, ret, r, e, false); }
state._fsp--; if (state.failed) return ret; if ( state.backtracking==0 ) { ret = factory.join(JoinTableNode.JoinType.Inner, ret, s, null, false); }
state._fsp--; if (state.failed) return ret; if ( state.backtracking==0 ) { ret = factory.join(JoinTableNode.JoinType.Inner, ret, s, null, false); }
@Override public TableNode visit(JoinTableNode joinNode) throws SQLException { TableNode lhs = joinNode.getLHS(); TableNode rhs = joinNode.getRHS(); TableNode lhsReplace = lhs.accept(this); TableNode rhsReplace = rhs.accept(this); if (lhs == lhsReplace && rhs == rhsReplace) return joinNode; return FACTORY.join(joinNode.getType(), lhsReplace, rhsReplace, joinNode.getOnNode(), joinNode.isSingleValueOnly()); }
@Override public TableNode visit(JoinTableNode joinNode) throws SQLException { TableNode lhs = joinNode.getLHS(); TableNode rhs = joinNode.getRHS(); TableNode lhsReplace = lhs.accept(this); TableNode rhsReplace = rhs.accept(this); if (lhs == lhsReplace && rhs == rhsReplace) return joinNode; return FACTORY.join(joinNode.getType(), lhsReplace, rhsReplace, joinNode.getOnNode(), joinNode.isSingleValueOnly()); }
JoinType joinType = isTopNode ? JoinType.Inner : JoinType.Left; ParseNode ret = NODE_FACTORY.comparison(node.getFilterOp(), l.get(0), NODE_FACTORY.column(NODE_FACTORY.table(null, rhsTableAlias), selectNodes.get(0).getAlias(), null)); tableNode = NODE_FACTORY.join(joinType, tableNode, rhsTable, onNode, !isAggregate || isGroupby);
@Override public ParseNode visitLeave(InParseNode node, List<ParseNode> l) throws SQLException { boolean isTopNode = topNode == node; if (isTopNode) { topNode = null; } SubqueryParseNode subqueryNode = (SubqueryParseNode) l.get(1); SelectStatement subquery = fixSubqueryStatement(subqueryNode.getSelectNode()); String rhsTableAlias = ParseNodeFactory.createTempAlias(); List<AliasedNode> selectNodes = fixAliasedNodes(subquery.getSelect(), true); subquery = NODE_FACTORY.select(subquery, !node.isSubqueryDistinct(), selectNodes); ParseNode onNode = getJoinConditionNode(l.get(0), selectNodes, rhsTableAlias); TableNode rhsTable = NODE_FACTORY.derivedTable(rhsTableAlias, subquery); JoinType joinType = isTopNode ? (node.isNegate() ? JoinType.Anti : JoinType.Semi) : JoinType.Left; ParseNode ret = isTopNode ? null : NODE_FACTORY.isNull(NODE_FACTORY.column(NODE_FACTORY.table(null, rhsTableAlias), selectNodes.get(0).getAlias(), null), !node.isNegate()); tableNode = NODE_FACTORY.join(joinType, tableNode, rhsTable, onNode, false); return ret; }
@Override public ParseNode visitLeave(InParseNode node, List<ParseNode> l) throws SQLException { boolean isTopNode = topNode == node; if (isTopNode) { topNode = null; } SubqueryParseNode subqueryNode = (SubqueryParseNode) l.get(1); SelectStatement subquery = fixSubqueryStatement(subqueryNode.getSelectNode()); String rhsTableAlias = ParseNodeFactory.createTempAlias(); List<AliasedNode> selectNodes = fixAliasedNodes(subquery.getSelect(), true); subquery = NODE_FACTORY.select(subquery, !node.isSubqueryDistinct(), selectNodes); ParseNode onNode = getJoinConditionNode(l.get(0), selectNodes, rhsTableAlias); TableNode rhsTable = NODE_FACTORY.derivedTable(rhsTableAlias, subquery); JoinType joinType = isTopNode ? (node.isNegate() ? JoinType.Anti : JoinType.Semi) : JoinType.Left; ParseNode ret = isTopNode ? null : NODE_FACTORY.isNull(NODE_FACTORY.column(NODE_FACTORY.table(null, rhsTableAlias), selectNodes.get(0).getAlias(), null), !node.isNegate()); tableNode = NODE_FACTORY.join(joinType, tableNode, rhsTable, onNode, false); return ret; }
@Override public TableNode visit(JoinTableNode joinNode) throws SQLException { TableNode lhsNode = joinNode.getLHS(); TableNode rhsNode = joinNode.getRHS(); ParseNode onNode = joinNode.getOnNode(); TableNode normLhsNode = lhsNode.accept(this); TableNode normRhsNode = rhsNode.accept(this); parseNodeRewriter.reset(); ParseNode normOnNode = onNode == null ? null : onNode.accept(parseNodeRewriter); if (lhsNode == normLhsNode && rhsNode == normRhsNode && onNode == normOnNode) return joinNode; return NODE_FACTORY.join(joinNode.getType(), normLhsNode, normRhsNode, normOnNode, joinNode.isSingleValueOnly()); }
@Override public TableNode visit(JoinTableNode joinNode) throws SQLException { TableNode lhsNode = joinNode.getLHS(); TableNode rhsNode = joinNode.getRHS(); ParseNode onNode = joinNode.getOnNode(); TableNode normLhsNode = lhsNode.accept(this); TableNode normRhsNode = rhsNode.accept(this); parseNodeRewriter.reset(); ParseNode normOnNode = onNode == null ? null : onNode.accept(parseNodeRewriter); if (lhsNode == normLhsNode && rhsNode == normRhsNode && onNode == normOnNode) return joinNode; return NODE_FACTORY.join(joinNode.getType(), normLhsNode, normRhsNode, normOnNode, joinNode.isSingleValueOnly()); }
JoinType joinType = isTopNode ? (node.isNegate() ? JoinType.Anti : JoinType.Semi) : JoinType.Left; ParseNode ret = isTopNode ? null : NODE_FACTORY.isNull(NODE_FACTORY.column(NODE_FACTORY.table(null, rhsTableAlias), selectNodes.get(0).getAlias(), null), !node.isNegate()); tableNode = NODE_FACTORY.join(joinType, tableNode, rhsTable, onNode, false);
JoinType joinType = isTopNode ? (node.isNegate() ? JoinType.Anti : JoinType.Semi) : JoinType.Left; ParseNode ret = isTopNode ? null : NODE_FACTORY.isNull(NODE_FACTORY.column(NODE_FACTORY.table(null, rhsTableAlias), selectNodes.get(0).getAlias(), null), !node.isNegate()); tableNode = NODE_FACTORY.join(joinType, tableNode, rhsTable, onNode, false);
state._fsp--; if (state.failed) return ret; if ( state.backtracking==0 ) { ret = factory.join(j, ret, r, e, false); }