public string GetWhereClause(IRepoQuery query) { return(Conn.GetWhereClause(query)); }
public virtual int Count(IRepoQuery query) { return(Conn.Count(query)); }
public virtual async Task <int> CountAsync(IRepoQuery query) { return(await Conn.CountAsync(query)); }
public virtual IEnumerable <T> Get(IRepoQuery query) { return(Conn.Get <T>(query).ToList()); }
public virtual async Task <IEnumerable <T> > GetAsync(IRepoQuery query) { return((await Conn.GetAsync <T>(query)).ToList()); }
public virtual T GetFirstOrDefault(IRepoQuery query) { return(Conn.Get <T>(query).FirstOrDefault()); }
public virtual async Task <T> GetFirstOrDefaultAsync(IRepoQuery query) { return((await Conn.GetAsync <T>(query)).FirstOrDefault()); }
public string GetWhereClause(IRepoQuery query) { return(new QueryBuilder(query, Context.QueryStrategy).WhereClause()); }
internal override string Select(IRepoQuery query, bool isCount, QueryBuilder queryBuilder) { return ($"SELECT {(isCount ? "COUNT(*)" : queryBuilder.CreateSelectColumnList(query.Columns.ToList(), query.Target))} FROM {query.Target}"); }
/// <summary> /// Returns the where clause of the resulting query /// </summary> /// <param name="connection">Open MySqlConnection</param> /// <param name="query"></param> /// <returns>Entity of T</returns> public static string GetWhereClause(this IDbConnection connection, IRepoQuery query) { return(GetRetriveQuery(query, false, true)); }
internal override string Select(IRepoQuery query, bool isCount, QueryBuilder queryBuilder) { return(string.Format("SELECT {0} {1} FROM " + query.Target, query.Limit != null ? " TOP " + query.Limit : "", isCount ? "COUNT(*)" : queryBuilder.CreateSelectColumnList(query.Columns.ToList(), query.Target))); }
/// <summary> /// Return all asynchronously /// </summary> /// <typeparam name="T">Interface type to create and populate</typeparam> /// <param name="connection">Open MySqlConnection</param> /// <param name="query"></param> /// <returns>Entity of T</returns> public static async Task <IEnumerable <T> > GetAsync <T>(this IDbConnection connection, IRepoQuery query) { using (connection = new MySqlConnection(connection.ConnectionString)) { connection.Open(); return(await connection.QueryAsync <T>(GetRetriveQuery(query), transaction : query.Transaction)); } }
private static string GetRetriveQuery(IRepoQuery query, bool isCount = false, bool whereOnly = false) { var queryBuilder = new StringBuilder(whereOnly ? "" : string.Format("select {0} from " + query.Target, isCount ? "count(*)" : CreateSelectColumnList(query.Columns, query.Target))); var where = query.Where == null ? new Queue <string>() : new Queue <string>(query.Where); var order = query.Order == null ? new Queue <string>() : new Queue <string>(query.Order); if (where.Count > 0) { queryBuilder.Append(" where "); var first = true; var previous = ""; while (where.Count > 0) { var current = where.Dequeue(); if (AndOrOr(current)) { if (first) { first = false; previous = current; continue; } if (AndOrOr(previous)) { previous = current; continue; } previous = current; queryBuilder.Append($" {current} "); } else if (current == ")" || current == "(") { if (current == "(" && !first && !AndOrOr(previous)) { queryBuilder.Append(" and "); } previous = current; queryBuilder.Append($" {current} "); } else { if (!first && (previous != "(" && previous != ")") && !AndOrOr(previous)) { queryBuilder.Append(" and "); } previous = current; queryBuilder.Append($" {current} "); } first = false; } } if (whereOnly) { return(queryBuilder.ToString()); } if (order.Count > 0) { queryBuilder.Append(" order by "); while (order.Count > 0) { var item = order.Dequeue(); queryBuilder.Append($" {item} "); } } if (query.Page != null && query.PageSize != null) { queryBuilder.Append($" LIMIT {query.Page * query.PageSize}, {query.PageSize} "); } else if (query.Skip != null || query.Take != null || query.Limit != null) { queryBuilder.Append($" LIMIT {query.Skip??0}, {query.Take??query.Limit??0} "); } return(queryBuilder.ToString()); }
internal abstract string Page(IRepoQuery query);
internal abstract string Select(IRepoQuery query, bool isCount, QueryBuilder queryBuilder);
internal QueryBuilder(IRepoQuery repoQuery, QueryStrategy strategy) { _repoQuery = repoQuery; _builder = new StringBuilder(); _strategy = strategy; }