コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }