# File lib/arel/visitors/postgresql.rb, line 44
44: def aliased_orders orders
45: #orders = o.orders.map { |x| visit x }.join(', ').split(',')
46: list = []
47: orders.each_with_index do |o,i|
48: list <<
49: [
50: "id_list.alias_#{i}",
51: (o.index(/desc/) && 'DESC')
52: ].compact.join(' ')
53: end
54: list
55: end
# File lib/arel/visitors/postgresql.rb, line 36
36: def using_distinct_on?(o)
37: o.cores.any? do |core|
38: core.projections.any? do |projection|
39: /DISTINCT ON/ === projection
40: end
41: end
42: end
# File lib/arel/visitors/postgresql.rb, line 32
32: def visit_Arel_Nodes_DoesNotMatch o
33: "#{visit o.left} NOT ILIKE #{visit o.right}"
34: end
# File lib/arel/visitors/postgresql.rb, line 5 5: def visit_Arel_Nodes_Lock o 6: "FOR UPDATE" 7: end
# File lib/arel/visitors/postgresql.rb, line 28
28: def visit_Arel_Nodes_Matches o
29: "#{visit o.left} ILIKE #{visit o.right}"
30: end
# File lib/arel/visitors/postgresql.rb, line 9
9: def visit_Arel_Nodes_SelectStatement o
10: if !o.orders.empty? && using_distinct_on?(o)
11: subquery = o.dup
12: subquery.orders = []
13: subquery.limit = nil
14: subquery.offset = nil
15:
16: sql = super(subquery)
17: [
18: "SELECT * FROM (#{sql}) AS id_list",
19: "ORDER BY #{aliased_orders(o.orders).join(', ')}",
20: ("LIMIT #{o.limit}" if o.limit),
21: (visit(o.offset) if o.offset),
22: ].compact.join ' '
23: else
24: super
25: end
26: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.