/** * Analyzes filter expression to build query graph model. * * @param topNode - filter top node * @param queryGraph - model containing relationships between streams, to be written to */ public static void analyze(ExprNode topNode, QueryGraph queryGraph, boolean isOuterJoin) { // Analyze relationships between streams. Relationships are properties in AND and EQUALS nodes // of joins. if (topNode instanceof ExprEqualsNode) { ExprEqualsNode equalsNode = (ExprEqualsNode) topNode; if (!equalsNode.isNotEquals()) { analyzeEqualsNode(equalsNode, queryGraph, isOuterJoin); } } else if (topNode instanceof ExprAndNode) { ExprAndNode andNode = (ExprAndNode) topNode; analyzeAndNode(andNode, queryGraph, isOuterJoin); } else if (topNode instanceof ExprBetweenNode) { ExprBetweenNode betweenNode = (ExprBetweenNode) topNode; analyzeBetweenNode(betweenNode, queryGraph); } else if (topNode instanceof ExprRelationalOpNode) { ExprRelationalOpNode relNode = (ExprRelationalOpNode) topNode; analyzeRelationalOpNode(relNode, queryGraph); } else if (topNode instanceof ExprDotNode && !isOuterJoin) { ExprDotNode dotNode = (ExprDotNode) topNode; analyzeDotNode(dotNode, queryGraph); } }