private static FragmentQuery GenerateFragmentQuery(IEnumerable <CellTreeNode> children, bool isLeft, ViewgenContext context, CellTreeOpType OpType) { Debug.Assert(children.Any()); FragmentQuery fragmentQuery = isLeft ? children.First().LeftFragmentQuery : children.First().RightFragmentQuery; FragmentQueryProcessor qp = isLeft ? context.LeftFragmentQP : context.RightFragmentQP; foreach (var child in children.Skip(1)) { FragmentQuery nextQuery = isLeft ? child.LeftFragmentQuery : child.RightFragmentQuery; switch (OpType) { case CellTreeOpType.IJ: fragmentQuery = qp.Intersect(fragmentQuery, nextQuery); break; case CellTreeOpType.LOJ: // Left outer join means keeping the domain of the leftmost child break; case CellTreeOpType.LASJ: // not used in basic view generation but current validation calls Simplify, so add this for debugging fragmentQuery = qp.Difference(fragmentQuery, nextQuery); break; default: // All other operators (Union, FOJ) require union of the domains fragmentQuery = qp.Union(fragmentQuery, nextQuery); break; } } return(fragmentQuery); }
private static FragmentQuery GenerateFragmentQuery( IEnumerable <CellTreeNode> children, bool isLeft, ViewgenContext context, CellTreeOpType OpType) { FragmentQuery fragmentQuery1 = isLeft ? children.First <CellTreeNode>().LeftFragmentQuery : children.First <CellTreeNode>().RightFragmentQuery; FragmentQueryProcessor fragmentQueryProcessor = isLeft ? context.LeftFragmentQP : context.RightFragmentQP; foreach (CellTreeNode cellTreeNode in children.Skip <CellTreeNode>(1)) { FragmentQuery fragmentQuery2 = isLeft ? cellTreeNode.LeftFragmentQuery : cellTreeNode.RightFragmentQuery; switch (OpType) { case CellTreeOpType.LOJ: continue; case CellTreeOpType.IJ: fragmentQuery1 = fragmentQueryProcessor.Intersect(fragmentQuery1, fragmentQuery2); continue; case CellTreeOpType.LASJ: fragmentQuery1 = fragmentQueryProcessor.Difference(fragmentQuery1, fragmentQuery2); continue; default: fragmentQuery1 = fragmentQueryProcessor.Union(fragmentQuery1, fragmentQuery2); continue; } } return(fragmentQuery1); }