Example #1
0
        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);
        }