private static void AnalyzeInNodeSingleIndex( ExprInNode inNode, QueryGraphForge queryGraph) { if (!(inNode.ChildNodes[0] is ExprIdentNode)) { return; } var testIdent = (ExprIdentNode) inNode.ChildNodes[0]; var testIdentClass = testIdent.Forge.EvaluationType.GetBoxedType(); var indexedStream = testIdent.StreamId; var setExpressions = GetInNodeSetExpressions(inNode); if (setExpressions.Length == 0) { return; } var perStreamExprs = new LinkedHashMap<int?, IList<ExprNode>>(); foreach (var exprNodeSet in setExpressions) { if (exprNodeSet.Forge.EvaluationType.GetBoxedType() != testIdentClass) { continue; } if (exprNodeSet is ExprIdentNode) { var setIdent = (ExprIdentNode) exprNodeSet; AddToList(setIdent.StreamId, setIdent, perStreamExprs); } else { var eligibility = EligibilityUtil.VerifyInputStream(exprNodeSet, indexedStream); if (!eligibility.Eligibility.IsEligible()) { continue; } AddToList(eligibility.StreamNum, exprNodeSet, perStreamExprs); } } foreach (var entry in perStreamExprs) { var exprNodes = ExprNodeUtilityQuery.ToArray(entry.Value); if (entry.Key == null) { queryGraph.AddInSetSingleIndexUnkeyed(testIdent.StreamId, testIdent, exprNodes); continue; } if (entry.Key != indexedStream) { queryGraph.AddInSetSingleIndex(testIdent.StreamId, testIdent, entry.Key.Value, exprNodes); } } }