module Card::Query::SqlStatement::Order

build ORDER BY clause

Public Instance Methods

order() click to toggle source
# File lib/card/query/sql_statement/order.rb, line 19
def order
  full_syntax do
    dirs = order_directives
    "ORDER BY #{dirs.join ', '}" if dirs.present?
  end
end
order_as() { || ... } click to toggle source
# File lib/card/query/sql_statement/order.rb, line 51
def order_as
  field = yield
  return field unless (as = @mods[:sort_as])

  "CAST(#{field} AS #{cast_type(safe_sql(as))})"
end
order_dir(order_key, index) click to toggle source
# File lib/card/query/sql_statement/order.rb, line 58
def order_dir order_key, index
  dir = @mods[:sort_dir] || @mods[:dir] # dir is DEPRECATED
  if dir.blank?
    DEFAULT_ORDER_DIRS[order_key.to_sym] || "asc"
  else
    safe_sql Array.wrap(dir)[index]
  end
end
order_directive(order_key, index) click to toggle source
# File lib/card/query/sql_statement/order.rb, line 35
def order_directive order_key, index
  field = order_field order_key
  @fields += ", #{field}"
  "#{field} #{order_dir order_key, index}"
end
order_directives() click to toggle source
# File lib/card/query/sql_statement/order.rb, line 26
def order_directives
  sort_mod = @mods[:sort_by] || @mods[:sort]
  return if sort_mod.blank?

  Array.wrap(sort_mod).map.with_index do |order_key, index|
    order_directive order_key, index
  end
end
order_field(order_key) click to toggle source
# File lib/card/query/sql_statement/order.rb, line 41
def order_field order_key
  order_as do
    if (field = ORDER_MAP[order_key])
      "#{@query.table_alias}.#{field}"
    else
      safe_sql order_key
    end
  end
end