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)); } }
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); }
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); }
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); }
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); }