Exemplo n.º 1
0
 public string GetWhereClause(IRepoQuery query)
 {
     return(Conn.GetWhereClause(query));
 }
Exemplo n.º 2
0
 public virtual int Count(IRepoQuery query)
 {
     return(Conn.Count(query));
 }
Exemplo n.º 3
0
 public virtual async Task <int> CountAsync(IRepoQuery query)
 {
     return(await Conn.CountAsync(query));
 }
Exemplo n.º 4
0
 public virtual IEnumerable <T> Get(IRepoQuery query)
 {
     return(Conn.Get <T>(query).ToList());
 }
Exemplo n.º 5
0
 public virtual async Task <IEnumerable <T> > GetAsync(IRepoQuery query)
 {
     return((await Conn.GetAsync <T>(query)).ToList());
 }
Exemplo n.º 6
0
 public virtual T GetFirstOrDefault(IRepoQuery query)
 {
     return(Conn.Get <T>(query).FirstOrDefault());
 }
Exemplo n.º 7
0
 public virtual async Task <T> GetFirstOrDefaultAsync(IRepoQuery query)
 {
     return((await Conn.GetAsync <T>(query)).FirstOrDefault());
 }
Exemplo n.º 8
0
 public string GetWhereClause(IRepoQuery query)
 {
     return(new QueryBuilder(query, Context.QueryStrategy).WhereClause());
 }
Exemplo n.º 9
0
 internal override string Select(IRepoQuery query, bool isCount, QueryBuilder queryBuilder)
 {
     return
         ($"SELECT {(isCount ? "COUNT(*)" : queryBuilder.CreateSelectColumnList(query.Columns.ToList(), query.Target))} FROM {query.Target}");
 }
Exemplo n.º 10
0
 /// <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));
 }
Exemplo n.º 11
0
 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)));
 }
Exemplo n.º 12
0
 /// <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));
     }
 }
Exemplo n.º 13
0
        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());
        }
Exemplo n.º 14
0
 internal abstract string Page(IRepoQuery query);
Exemplo n.º 15
0
 internal abstract string Select(IRepoQuery query, bool isCount, QueryBuilder queryBuilder);
Exemplo n.º 16
0
 internal QueryBuilder(IRepoQuery repoQuery, QueryStrategy strategy)
 {
     _repoQuery = repoQuery;
     _builder   = new StringBuilder();
     _strategy  = strategy;
 }