private static bool IsMemberPartOfNotNullCondition(IEnumerable <LeftCellWrapper> wrappers, MemberPath leftMember, ViewTarget viewTarget) { foreach (var leftCellWrapper in wrappers) { CellQuery leftCellQuery = leftCellWrapper.OnlyInputCell.GetLeftQuery(viewTarget); if (HasNotNullCondition(leftCellQuery, leftMember)) { return(true); } //Now figure out corresponding right side MemberPath CellQuery rightCellQuery = leftCellWrapper.OnlyInputCell.GetRightQuery(viewTarget); int indexOfMemberInProjection = leftCellQuery.GetProjectedMembers().TakeWhile(path => !path.Equals(leftMember)).Count(); //Member with condition is projected, so check opposite CellQuery's condition if (indexOfMemberInProjection < leftCellQuery.GetProjectedMembers().Count()) { MemberPath rightmember = ((MemberProjectedSlot)rightCellQuery.ProjectedSlotAt(indexOfMemberInProjection)).MemberPath; if (HasNotNullCondition(rightCellQuery, rightmember)) { return(true); } } } return(false); }
private static bool IsMemberPartOfNotNullCondition( IEnumerable <LeftCellWrapper> wrappers, MemberPath leftMember, ViewTarget viewTarget) { foreach (LeftCellWrapper wrapper in wrappers) { CellQuery leftQuery = wrapper.OnlyInputCell.GetLeftQuery(viewTarget); if (ErrorPatternMatcher.HasNotNullCondition(leftQuery, leftMember)) { return(true); } CellQuery rightQuery = wrapper.OnlyInputCell.GetRightQuery(viewTarget); int slotNum = leftQuery.GetProjectedMembers().TakeWhile <MemberPath>((Func <MemberPath, bool>)(path => !path.Equals(leftMember))).Count <MemberPath>(); if (slotNum < leftQuery.GetProjectedMembers().Count <MemberPath>()) { MemberPath memberPath = ((MemberProjectedSlot)rightQuery.ProjectedSlotAt(slotNum)).MemberPath; if (ErrorPatternMatcher.HasNotNullCondition(rightQuery, memberPath)) { return(true); } } } return(false); }
private void CheckThatConditionMemberIsNotMapped(MemberPath conditionMember, List <LeftCellWrapper> mappingFragments, Set <MemberPath> mappedConditionMembers) { //Make sure memberPath is not mapped (in any other cells) foreach (var anotherFragment in mappingFragments) { foreach (var anotherCell in anotherFragment.Cells) { CellQuery anotherCellQuery = anotherCell.GetLeftQuery(m_viewgenContext.ViewTarget); if (anotherCellQuery.GetProjectedMembers().Contains(conditionMember)) { mappedConditionMembers.Add(conditionMember); //error condition memer is projected somewhere m_errorLog.AddEntry(new ErrorLog.Record(true, ViewGenErrorCode.ErrorPatternConditionError, Strings.Viewgen_ErrorPattern_ConditionMemberIsMapped(conditionMember.ToString()), anotherCell, "")); } } } }
public static FragmentQuery Create(BoolExpression fromVariable, CellQuery cellQuery) { BoolExpression whereClause = cellQuery.WhereClause; whereClause = whereClause.MakeCopy(); whereClause.ExpensiveSimplify(); return(new FragmentQuery(null /*label*/, fromVariable, new HashSet <MemberPath>(cellQuery.GetProjectedMembers()), whereClause)); }
public static FragmentQuery Create( BoolExpression fromVariable, CellQuery cellQuery) { BoolExpression condition = cellQuery.WhereClause.MakeCopy(); condition.ExpensiveSimplify(); return(new FragmentQuery((string)null, fromVariable, (IEnumerable <MemberPath>) new HashSet <MemberPath>(cellQuery.GetProjectedMembers()), condition)); }