private static bool RewriteQueryInternal( T_Tile toFill, T_Tile toAvoid, out T_Tile rewriting, List <T_Tile> views, RewritingProcessor <T_Tile> qp) { var rewritingPass = new RewritingPass <T_Tile>(toFill, toAvoid, views, qp); return(rewritingPass.RewriteQuery(out rewriting)); }
public bool RewriteQueryOnce( T_Tile toFill, T_Tile toAvoid, IEnumerable <T_Tile> views, out T_Tile rewriting) { List <T_Tile> views1 = new List <T_Tile>(views); return(RewritingPass <T_Tile> .RewriteQuery(toFill, toAvoid, out rewriting, views1, this)); }
private bool RewriteQuery(out T_Tile rewriting) { rewriting = this.m_toFill; T_Tile rewriting1; if (!this.FindRewritingByIncludedAndDisjoint(out rewriting1) && !this.FindContributingView(out rewriting1)) { return(false); } bool flag = !this.m_qp.IsDisjointFrom(rewriting1, this.m_toAvoid); if (flag) { foreach (T_Tile availableView in this.AvailableViews) { if (this.TryJoin(availableView, ref rewriting1)) { flag = false; break; } } } if (flag) { foreach (T_Tile availableView in this.AvailableViews) { if (this.TryAntiSemiJoin(availableView, ref rewriting1)) { flag = false; break; } } } if (flag) { return(false); } RewritingSimplifier <T_Tile> .TrySimplifyJoinRewriting(ref rewriting1, this.m_toAvoid, this.m_usedViews, this.m_qp); T_Tile tile = this.m_qp.AntiSemiJoin(this.m_toFill, rewriting1); if (!this.m_qp.IsEmpty(tile)) { T_Tile rewriting2; if (!RewritingPass <T_Tile> .RewriteQueryInternal(tile, this.m_toAvoid, out rewriting2, this.m_views, this.m_qp)) { rewriting = rewriting2; return(false); } rewriting1 = !this.m_qp.IsContainedIn(rewriting1, rewriting2) ? this.m_qp.Union(rewriting1, rewriting2) : rewriting2; } rewriting = rewriting1; return(true); }
public static bool RewriteQuery( T_Tile toFill, T_Tile toAvoid, out T_Tile rewriting, List <T_Tile> views, RewritingProcessor <T_Tile> qp) { var 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); }