aboutsummaryrefslogtreecommitdiffstats
path: root/lib/arel/engines/sql/compilers/postgresql_compiler.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/arel/engines/sql/compilers/postgresql_compiler.rb')
-rw-r--r--lib/arel/engines/sql/compilers/postgresql_compiler.rb50
1 files changed, 0 insertions, 50 deletions
diff --git a/lib/arel/engines/sql/compilers/postgresql_compiler.rb b/lib/arel/engines/sql/compilers/postgresql_compiler.rb
deleted file mode 100644
index 3079451064..0000000000
--- a/lib/arel/engines/sql/compilers/postgresql_compiler.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-module Arel
- module SqlCompiler
- class PostgreSQLCompiler < GenericCompiler
-
- def select_sql
- if !relation.orders.blank? && using_distinct_on?
- selects = relation.select_clauses
- joins = relation.joins(self)
- wheres = relation.where_clauses
- groups = relation.group_clauses
- havings = relation.having_clauses
- orders = relation.order_clauses
-
- subquery_clauses = [ "",
- "SELECT #{selects.kind_of?(::Array) ? selects.join("") : selects.to_s}",
- "FROM #{relation.from_clauses}",
- joins,
- ("WHERE #{wheres.join(' AND ')}" unless wheres.empty?),
- ("GROUP BY #{groups.join(', ')}" unless groups.empty?),
- ("HAVING #{havings.join(' AND ')}" unless havings.empty?)
- ].compact.join ' '
- subquery_clauses << " #{locked}" unless locked.blank?
-
- build_query \
- "SELECT * FROM (#{build_query subquery_clauses}) AS id_list",
- "ORDER BY #{aliased_orders(orders)}",
- ("LIMIT #{relation.taken}" unless relation.taken.blank? ),
- ("OFFSET #{relation.skipped}" unless relation.skipped.blank? )
- else
- super
- end
- end
-
- def using_distinct_on?
- relation.select_clauses.any? { |x| x =~ /DISTINCT ON/ }
- end
-
- def aliased_orders(orders)
- # PostgreSQL does not allow arbitrary ordering when using DISTINCT ON, so we work around this
- # by wrapping the +sql+ string as a sub-select and ordering in that query.
- order = orders.join(', ').split(/,/).map { |s| s.strip }.reject(&:blank?)
- order = order.zip((0...order.size).to_a).map { |s,i| "id_list.alias_#{i} #{'DESC' if s =~ /\bdesc$/i}" }.join(', ')
- end
-
- def supports_insert_with_returning?
- engine.connection.send(:postgresql_version) >= 80200
- end
- end
- end
-end