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);
 }