Пример #1
0
 public RewritingPass(T_Tile toFill, T_Tile toAvoid, List <T_Tile> views, RewritingProcessor <T_Tile> qp)
 {
     m_toFill  = toFill;
     m_toAvoid = toAvoid;
     m_views   = views;
     m_qp      = qp;
 }
 // used for union simplification
 private RewritingSimplifier(T_Tile rewriting, T_Tile toFill, T_Tile toAvoid, RewritingProcessor <T_Tile> qp)
 {
     m_originalRewriting = toFill;
     m_toAvoid           = toAvoid;
     m_qp        = qp;
     m_usedViews = new Dictionary <T_Tile, TileOpKind>();
     GatherUnionedSubqueriesInUsedViews(rewriting);
 }
 // used for join/antisemijoin simplification
 private RewritingSimplifier(T_Tile originalRewriting, T_Tile toAvoid, Dictionary <T_Tile, TileOpKind> usedViews,
                             RewritingProcessor <T_Tile> qp)
 {
     m_originalRewriting = originalRewriting;
     m_toAvoid           = toAvoid;
     m_qp        = qp;
     m_usedViews = usedViews;
 }
        // modifies usedViews - removes all redundant views from it
        internal static bool TrySimplifyJoinRewriting(ref T_Tile rewriting, T_Tile toAvoid, Dictionary <T_Tile, TileOpKind> usedViews, RewritingProcessor <T_Tile> qp)
        {
            RewritingSimplifier <T_Tile> simplifier = new RewritingSimplifier <T_Tile>(rewriting, toAvoid, usedViews, qp);
            T_Tile simplifiedRewriting;

            if (simplifier.SimplifyRewriting(out simplifiedRewriting))
            {
                rewriting = simplifiedRewriting;
                return(true);
            }
            return(false);
        }
        // called for top query only
        internal static bool TrySimplifyUnionRewriting(ref T_Tile rewriting, T_Tile toFill, T_Tile toAvoid, RewritingProcessor <T_Tile> qp)
        {
            RewritingSimplifier <T_Tile> simplifier = new RewritingSimplifier <T_Tile>(rewriting, toFill, toAvoid, qp);
            // gather all unioned subqueries
            T_Tile simplifiedRewriting;

            if (simplifier.SimplifyRewriting(out simplifiedRewriting))
            {
                rewriting = simplifiedRewriting;
                return(true);
            }
            return(false);
        }
Пример #6
0
        private static bool RewriteQueryInternal(T_Tile toFill, T_Tile toAvoid, out T_Tile rewriting, List <T_Tile> views, HashSet <T_Tile> recentlyUsedViews, RewritingProcessor <T_Tile> qp)
        {
            if (qp.REORDER_VIEWS && recentlyUsedViews.Count > 0)
            {
                // move recently used views toward the end
                List <T_Tile> reorderedViews = new List <T_Tile>();
                foreach (T_Tile view in views)
                {
                    if (false == recentlyUsedViews.Contains(view))
                    {
                        reorderedViews.Add(view);
                    }
                }
                reorderedViews.AddRange(recentlyUsedViews);
                views = reorderedViews;
            }

            RewritingPass <T_Tile> rewritingPass = new RewritingPass <T_Tile>(toFill, toAvoid, views, qp);

            return(rewritingPass.RewriteQuery(out rewriting));
        }
Пример #7
0
        public static bool RewriteQuery(T_Tile toFill, T_Tile toAvoid, out T_Tile rewriting, List <T_Tile> views, RewritingProcessor <T_Tile> qp)
        {
            RewritingPass <T_Tile> rewritingPass = new RewritingPass <T_Tile>(toFill, toAvoid, views, qp);

            if (rewritingPass.RewriteQuery(out rewriting))
            {
                RewritingSimplifier <T_Tile> .TrySimplifyUnionRewriting(ref rewriting, toFill, toAvoid, qp);

                return(true);
            }
            return(false);
        }