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