Sha256: 85fec27ab4e2a1ca227d0acafcd4684e0c4f1f3515f13e76a6275e758b3acfd7
Contents?: true
Size: 1.64 KB
Versions: 3
Compression:
Stored size: 1.64 KB
Contents
class Card module Query # convert @query sort rep into order by statement # order information is stored in @mods[:sort], @mods[:sort_as], and # @mods[:dir] class SqlStatement ORDER_MAP = { "id" => "id", "update" => "updated_at", "create" => "created_at", "name" => "key", "content" => "db_content", "alpha" => "key", # DEPRECATED "relevance" => "updated_at" # DEPRECATED }.freeze # build ORDER BY clause module Order def order full_syntax do dirs = order_directives "ORDER BY #{dirs.join ', '}" if dirs.present? end end def order_directives return if @mods[:sort].blank? Array.wrap(@mods[:sort]).map do |order_key| order_directive order_key end end def order_directive order_key field = order_field order_key @fields += ", #{field}" "#{field} #{order_dir order_key}" end 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 def order_as field = yield return field unless (as = @mods[:sort_as]) "CAST(#{field} AS #{cast_type(safe_sql(as))})" end def order_dir order_key if @mods[:dir].blank? DEFAULT_ORDER_DIRS[order_key.to_sym] || "asc" else safe_sql @mods[:dir] end end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
card-1.104.2 | lib/card/query/sql_statement/order.rb |
card-1.104.1 | lib/card/query/sql_statement/order.rb |
card-1.104.0 | lib/card/query/sql_statement/order.rb |