コード例 #1
0
        public virtual object Execute()
        {
            MysqlVisitor <T> visitor = new MysqlVisitor <T>();

            visitor.Visite(ContentQuery.Expression);

            switch (visitor.CallType)
            {
            case Kooboo.CMS.Content.Query.Expressions.CallType.Count:
                return(Count(visitor));

            case Kooboo.CMS.Content.Query.Expressions.CallType.First:
                return(First(visitor));

            case Kooboo.CMS.Content.Query.Expressions.CallType.LastOrDefault:
                return(LastOrDefault(visitor));

            case Kooboo.CMS.Content.Query.Expressions.CallType.FirstOrDefault:
                return(FirstOrDefault(visitor));

            case Kooboo.CMS.Content.Query.Expressions.CallType.Last:
                return(Last(visitor));

            case Kooboo.CMS.Content.Query.Expressions.CallType.Unspecified:
            default:
                return(List(visitor));
            }
        }
コード例 #2
0
        private MysqlVisitor <T> VisitInner(IExpression expression)
        {
            MysqlVisitor <T> visitor = new MysqlVisitor <T>(this.Parameters);

            visitor.Visite(expression);

            this.CategoryQueries = this.CategoryQueries.Concat(visitor.CategoryQueries);


            return(visitor);
        }
コード例 #3
0
        public override string BuildQuerySQL(MysqlVisitor <TextContent> visitor, out IEnumerable <Parameter> parameters)
        {
            var innerVisitor = new MysqlVisitor <Models.TextContent>(visitor.Parameters);

            innerVisitor.Visite(categoriesQuery.InnerQuery.Expression);
            var innerExecutor = (new TextContentTranslator()).Translate(categoriesQuery.InnerQuery);
            var innerQuerySQL = innerExecutor.BuildQuerySQL(innerVisitor, out parameters);

            string selectClause = "*";

            if (visitor.SelectFields != null && visitor.SelectFields.Length > 0)
            {
                selectClause = string.Join(",", visitor.SelectFields);
            }

            string whereClause = visitor.WhereClause;

            var paraName = visitor.AppendParameter(categoriesQuery.CategoryFolder.FullName);

            whereClause = whereClause + " AND FolderName=" + paraName;


            string sql = string.Format(@"
            SELECT {0} FROM `{1}` category
               WHERE  EXISTS(
                        SELECT ContentCategory.CategoryUUID 
                            FROM `{2}` ContentCategory,
                                ({3})content
                            WHERE content.UUID = ContentCategory.UUID AND ContentCategory.CategoryUUID = category.UUID 
                      ) AND {4}", selectClause
                                       , categoriesQuery.CategoryFolder.GetSchema().GetTableName()
                                       , categoriesQuery.Repository.GetCategoryTableName()
                                       , innerQuerySQL
                                       , whereClause);

            return(sql);
        }
コード例 #4
0
ファイル: ChildrenQueryExecutor.cs プロジェクト: Epitomy/CMS
        public override string BuildQuerySQL(MysqlVisitor <Models.TextContent> visitor, out IEnumerable <Parameter> parameters)
        {
            var innerVisitor = new MysqlVisitor <Models.TextContent>(visitor.Parameters);

            innerVisitor.Visite(childrenQuery.ParentQuery.Expression);
            var innerExecutor = (new TextContentTranslator()).Translate(childrenQuery.ParentQuery);
            var innerQuerySQL = innerExecutor.BuildQuerySQL(innerVisitor, out parameters);

            string selectClause = "*";

            if (visitor.SelectFields != null && visitor.SelectFields.Length > 0)
            {
                selectClause = string.Join(",", visitor.SelectFields);
            }

            string whereClause = visitor.WhereClause;

            if (this.childrenQuery.EmbeddedFolder != null)
            {
                string str = visitor.AppendParameter(this.childrenQuery.EmbeddedFolder.FullName);
                whereClause = whereClause + " AND FolderName=" + str;
            }

            string sql = string.Format(@"
            SELECT {0} FROM `{1}` children                            
               WHERE  EXISTS(
                        SELECT UUID
                            FROM ({2})parent
                            WHERE parent.UUID = children.ParentUUID 
                      ) AND {3}", selectClause
                                       , childrenQuery.ChildSchema.GetTableName()
                                       , innerQuerySQL
                                       , whereClause);

            return(sql);
        }
コード例 #5
0
        private IEnumerable <string> GetCategoryClause(Repository repository, IEnumerable <IContentQuery <TextContent> > categoryQueries, List <Parameter> parameters)
        {
            TextContentTranslator translator        = new TextContentTranslator();
            List <string>         categoryQueryList = new List <string>();

            foreach (var categoryQuery in categoryQueries)
            {
                var executor        = translator.Translate(categoryQuery);
                var categoryVisitor = new MysqlVisitor <TextContent>(parameters);
                categoryVisitor.Visite(categoryQuery.Expression);

                IEnumerable <Parameter> outParameters;
                var categoryQuerySQL = executor.BuildQuerySQL(categoryVisitor, out outParameters);

                categoryQueryList.Add(string.Format(@"EXISTS(
                        SELECT ContentCategory.CategoryUUID 
                            FROM `{0}` ContentCategory,
                                ({1})category
                            WHERE content.UUID = ContentCategory.UUID AND ContentCategory.CategoryUUID = category.UUID 
                      )", repository.GetCategoryTableName()
                                                    , categoryQuerySQL));
            }
            return(categoryQueryList);
        }