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