Пример #1
0
        // returns true if no more extra tuples are left
        private bool TryJoin(T_Tile view, ref T_Tile rewriting)
        {
            T_Tile 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);
        }