// returns true if no more extra tuples are left private bool TryJoin(T_Tile view, ref T_Tile rewriting) { var newRewriting = m_qp.Join(rewriting, view); if (!m_qp.IsEmpty(newRewriting)) { m_usedViews[view] = TileOpKind.Join; rewriting = newRewriting; return(m_qp.IsDisjointFrom(rewriting, m_toAvoid)); } return(false); }
private T_Tile GetRewritingHalf(T_Tile halfRewriting, T_Tile remainingView, TileOpKind viewKind) { switch (viewKind) { case TileOpKind.Join: halfRewriting = m_qp.Join(halfRewriting, remainingView); break; case TileOpKind.AntiSemiJoin: halfRewriting = m_qp.AntiSemiJoin(halfRewriting, remainingView); break; case TileOpKind.Union: halfRewriting = m_qp.Union(halfRewriting, remainingView); break; default: Debug.Fail("unexpected"); break; } return(halfRewriting); }