Module: Card::Query::SqlStatement::Order

Included in:
Card::Query::SqlStatement
Defined in:
lib/card/query/sql_statement/order.rb

Overview

build ORDER BY clause

Instance Method Summary collapse

Instance Method Details

#orderObject



19
20
21
22
23
24
# 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_asObject



50
51
52
53
54
55
# File 'lib/card/query/sql_statement/order.rb', line 50

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) ⇒ Object



57
58
59
60
61
62
63
# File 'lib/card/query/sql_statement/order.rb', line 57

def order_dir order_key
  if @mods[:dir].blank?
    DEFAULT_ORDER_DIRS[order_key.to_sym] || "asc"
  else
    safe_sql @mods[:dir]
  end
end

#order_directive(order_key) ⇒ Object



34
35
36
37
38
# File 'lib/card/query/sql_statement/order.rb', line 34

def order_directive order_key
  field = order_field order_key
  @fields += ", #{field}"
  "#{field} #{order_dir order_key}"
end

#order_directivesObject



26
27
28
29
30
31
32
# File 'lib/card/query/sql_statement/order.rb', line 26

def order_directives
  return if @mods[:sort].blank?

  Array.wrap(@mods[:sort]).map do |order_key|
    order_directive order_key
  end
end

#order_field(order_key) ⇒ Object



40
41
42
43
44
45
46
47
48
# File 'lib/card/query/sql_statement/order.rb', line 40

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