internal QueryRewriter(EdmType generatedType, ViewgenContext context, ViewGenMode typesGenerationMode) { Debug.Assert(typesGenerationMode != ViewGenMode.GenerateAllViews); _typesGenerationMode = typesGenerationMode; _context = context; _generatedType = generatedType; _domainMap = context.MemberMaps.LeftDomainMap; _config = context.Config; _identifiers = context.CqlIdentifiers; _qp = new RewritingProcessor<Tile<FragmentQuery>>(new DefaultTileProcessor<FragmentQuery>(context.LeftFragmentQP)); _extentPath = new MemberPath(context.Extent); _keyAttributes = new List<MemberPath>(MemberPath.GetKeyMembers(context.Extent, _domainMap)); // populate _fragmentQueries and _views foreach (var leftCellWrapper in _context.AllWrappersForExtent) { var query = leftCellWrapper.FragmentQuery; Tile<FragmentQuery> tile = CreateTile(query); _fragmentQueries.Add(query); _views.Add(tile); } Debug.Assert(_views.Count > 0); AdjustMemberDomainsForUpdateViews(); // must be done after adjusting domains _domainQuery = GetDomainQuery(FragmentQueries, generatedType); _usedViews = new HashSet<FragmentQuery>(); }
private void PrintStatistics(RewritingProcessor<Tile<FragmentQuery>> qp) { int numSATChecks; int numIntersection; int numDifference; int numUnion; int numErrors; qp.GetStatistics(out numSATChecks, out numIntersection, out numUnion, out numDifference, out numErrors); TraceVerbose( "{0} containment checks, {4} set operations ({1} intersections + {2} unions + {3} differences)", numSATChecks, numIntersection, numUnion, numDifference, numIntersection + numUnion + numDifference); TraceVerbose("{0} errors", numErrors); }