private static void AnalyzeRelationalOpNode(ExprRelationalOpNode relNode, QueryGraph queryGraph) { if (((relNode.ChildNodes[0] is ExprIdentNode)) && ((relNode.ChildNodes[1] is ExprIdentNode))) { var identNodeLeft = (ExprIdentNode)relNode.ChildNodes[0]; var identNodeRight = (ExprIdentNode)relNode.ChildNodes[1]; if (identNodeLeft.StreamId != identNodeRight.StreamId) { queryGraph.AddRelationalOpStrict( identNodeLeft.StreamId, identNodeLeft, identNodeRight.StreamId, identNodeRight, relNode.RelationalOpEnum); } return; } var indexedStream = -1; ExprIdentNode indexedPropExpr = null; ExprNode exprNodeNoIdent = null; RelationalOpEnum relop = relNode.RelationalOpEnum; if (relNode.ChildNodes[0] is ExprIdentNode) { indexedPropExpr = (ExprIdentNode)relNode.ChildNodes[0]; indexedStream = indexedPropExpr.StreamId; exprNodeNoIdent = relNode.ChildNodes[1]; } else if (relNode.ChildNodes[1] is ExprIdentNode) { indexedPropExpr = (ExprIdentNode)relNode.ChildNodes[1]; indexedStream = indexedPropExpr.StreamId; exprNodeNoIdent = relNode.ChildNodes[0]; relop = relop.Reversed(); } if (indexedStream == -1) { return; // require property of right/left side of equals } var eligibility = EligibilityUtil.VerifyInputStream(exprNodeNoIdent, indexedStream); if (!eligibility.Eligibility.IsEligible()) { return; } queryGraph.AddRelationalOp(indexedStream, indexedPropExpr, eligibility.StreamNum, exprNodeNoIdent, relop); }