private static void AnalyzeInNodeMultiIndex( ExprInNode inNode, QueryGraphForge queryGraph) { var setExpressions = GetInNodeSetExpressions(inNode); if (setExpressions.Length == 0) { return; } var perStreamExprs = new LinkedHashMap<int?, IList<ExprNode>>(); foreach (var exprNodeSet in setExpressions) { if (!(exprNodeSet is ExprIdentNode)) { continue; } var setIdent = (ExprIdentNode) exprNodeSet; AddToList(setIdent.StreamId, setIdent, perStreamExprs); } if (perStreamExprs.IsEmpty()) { return; } var testExpr = inNode.ChildNodes[0]; var testExprType = testExpr.Forge.EvaluationType.GetBoxedType(); if (perStreamExprs.Count > 1) { return; } var entry = perStreamExprs.First(); var exprNodes = ExprNodeUtilityQuery.ToArray(entry.Value); foreach (var node in exprNodes) { var exprType = node.Forge.EvaluationType; if (exprType.GetBoxedType() != testExprType) { return; } } int? testStreamNum; var setStream = entry.Key.Value; if (!(testExpr is ExprIdentNode)) { var eligibility = EligibilityUtil.VerifyInputStream(testExpr, setStream); if (!eligibility.Eligibility.IsEligible()) { return; } if (eligibility.Eligibility == Eligibility.REQUIRE_ONE && setStream == eligibility.StreamNum) { return; } testStreamNum = eligibility.StreamNum; } else { testStreamNum = ((ExprIdentNode) testExpr).StreamId; } if (testStreamNum == null) { queryGraph.AddInSetMultiIndexUnkeyed(testExpr, setStream, exprNodes); } else { if (testStreamNum.Equals(entry.Key)) { return; } queryGraph.AddInSetMultiIndex(testStreamNum.Value, testExpr, setStream, exprNodes); } }