Beispiel #1
0
            internal override bool VisitLeaf(LeafCellTreeNode node, bool dummy)
            {
                CellQuery         rightCellQuery1 = this.m_wrapper.RightCellQuery;
                CellQuery         rightCellQuery2 = node.LeftCellWrapper.RightCellQuery;
                List <MemberPath> memberPathList  = new List <MemberPath>();

                if (rightCellQuery1 != rightCellQuery2)
                {
                    for (int slotNum = 0; slotNum < rightCellQuery1.NumProjectedSlots; ++slotNum)
                    {
                        MemberProjectedSlot memberProjectedSlot1 = rightCellQuery1.ProjectedSlotAt(slotNum) as MemberProjectedSlot;
                        if (memberProjectedSlot1 != null)
                        {
                            MemberProjectedSlot memberProjectedSlot2 = rightCellQuery2.ProjectedSlotAt(slotNum) as MemberProjectedSlot;
                            if (memberProjectedSlot2 != null)
                            {
                                MemberPath projectedSlot = this.m_viewgenContext.MemberMaps.ProjectedSlotMap[slotNum];
                                if (!projectedSlot.IsPartOfKey && !MemberPath.EqualityComparer.Equals(memberProjectedSlot1.MemberPath, memberProjectedSlot2.MemberPath))
                                {
                                    memberPathList.Add(projectedSlot);
                                }
                            }
                        }
                    }
                }
                if (memberPathList.Count > 0)
                {
                    this.m_errorLog.AddEntry(new ErrorLog.Record(ViewGenErrorCode.NonKeyProjectedWithOverlappingPartitions, Strings.ViewGen_NonKeyProjectedWithOverlappingPartitions((object)MemberPath.PropertiesToUserString((IEnumerable <MemberPath>)memberPathList, false)), (IEnumerable <LeftCellWrapper>) new LeftCellWrapper[2]
                    {
                        this.m_wrapper,
                        node.LeftCellWrapper
                    }, string.Empty));
                }
                return(true);
            }
Beispiel #2
0
        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);
 }
Beispiel #4
0
        private MemberPath GetRightMemberPath(MemberPath conditionMember, LeftCellWrapper leftCellWrapper)
        {
            CellQuery rightCellQuery   = leftCellWrapper.OnlyInputCell.GetRightQuery(ViewTarget.QueryView);
            var       projectPositions = rightCellQuery.GetProjectedPositions(conditionMember);

            //Make the case simple. If the member is mapped more than once in the same cell wrapper
            //we are not going try and guess the pattern
            if (projectPositions.Count != 1)
            {
                return(null);
            }
            int       firstProjectedPosition = projectPositions.First();
            CellQuery leftCellQuery          = leftCellWrapper.OnlyInputCell.GetLeftQuery(ViewTarget.QueryView);

            return(((MemberProjectedSlot)leftCellQuery.ProjectedSlotAt(firstProjectedPosition)).MemberPath);
        }
Beispiel #5
0
            internal override bool VisitLeaf(LeafCellTreeNode node, bool dummy)
            {
                // make sure all projected attributes in wrapper correspond exactly to those in node
                CellQuery         thisQuery        = m_wrapper.RightCellQuery;
                CellQuery         thatQuery        = node.LeftCellWrapper.RightCellQuery;
                List <MemberPath> collidingColumns = new List <MemberPath>();

                if (thisQuery != thatQuery)
                {
                    for (int i = 0; i < thisQuery.NumProjectedSlots; i++)
                    {
                        MemberProjectedSlot thisSlot = thisQuery.ProjectedSlotAt(i) as MemberProjectedSlot;
                        if (thisSlot != null)
                        {
                            MemberProjectedSlot thatSlot = thatQuery.ProjectedSlotAt(i) as MemberProjectedSlot;
                            if (thatSlot != null)
                            {
                                MemberPath tableMember = m_viewgenContext.MemberMaps.ProjectedSlotMap[i];
                                if (!tableMember.IsPartOfKey)
                                {
                                    if (!MemberPath.EqualityComparer.Equals(thisSlot.MemberPath, thatSlot.MemberPath))
                                    {
                                        collidingColumns.Add(tableMember);
                                    }
                                }
                            }
                        }
                    }
                }
                if (collidingColumns.Count > 0)
                {
                    string          columnsString = MemberPath.PropertiesToUserString(collidingColumns, false);
                    string          message       = Strings.ViewGen_NonKeyProjectedWithOverlappingPartitions(columnsString);
                    ErrorLog.Record record        = new ErrorLog.Record(true, ViewGenErrorCode.NonKeyProjectedWithOverlappingPartitions, message,
                                                                        new LeftCellWrapper[] { m_wrapper, node.LeftCellWrapper }, String.Empty);
                    m_errorLog.AddEntry(record);
                }
                return(true);
            }