private static string Pagineted(string sql, PaginatorFilter filter) { if (filter == null || filter.PageSize <= 0) return sql; sql = @"SELECT * FROM (SELECT v.*, ROWNUM rn FROM (" + sql + ") v WHERE rownum <= " + (filter.Skip > 0 ? filter.Take - 1 : filter.Take) + ") WHERE rn >= " + filter.Skip; return sql; }
private static string OrderBy(string sql, PaginatorFilter filter) { if (filter == null || string.IsNullOrEmpty(filter.OrderBy)) return sql; sql += string.Format(" ORDER BY \"{0}\" {1}", filter.OrderBy.ToUpper(), filter.Order.ToString()); return sql; }
public string Apply(string sql, PaginatorFilter filter) { return Pagineted(OrderBy(sql, filter), filter); }