1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Remove delegating to arel in a relation

The delegation was needed since passing `relation` with
`relation.bound_attributes`. It should use `relation.arel` in that case.
This commit is contained in:
Ryuta Kamizono 2017-06-29 02:11:28 +09:00
parent 686e8fb52e
commit 425f2cacaf
6 changed files with 7 additions and 9 deletions

View file

@ -123,6 +123,7 @@ module ActiveRecord
# If arel is locked this is a SELECT ... FOR UPDATE or somesuch. Such
# queries should not be cached.
def locked?(arel)
arel = arel.arel if arel.is_a?(Relation)
arel.respond_to?(:locked) && arel.locked
end

View file

@ -311,7 +311,7 @@ module ActiveRecord
relation.group_values = group_fields
relation.select_values = select_values
calculated_data = @klass.connection.select_all(relation, nil, relation.bound_attributes)
calculated_data = @klass.connection.select_all(relation.arel, nil, relation.bound_attributes)
if association
key_ids = calculated_data.collect { |row| row[group_aliases.first] }

View file

@ -44,8 +44,6 @@ module ActiveRecord
delegate :table_name, :quoted_table_name, :primary_key, :quoted_primary_key,
:connection, :columns_hash, to: :klass
delegate :ast, :locked, to: :arel
module ClassSpecificRelation # :nodoc:
extend ActiveSupport::Concern

View file

@ -316,7 +316,7 @@ module ActiveRecord
relation = construct_relation_for_exists(relation, conditions)
connection.select_value(relation, "#{name} Exists", relation.bound_attributes) ? true : false
connection.select_value(relation.arel, "#{name} Exists", relation.bound_attributes) ? true : false
rescue ::RangeError
false
end
@ -377,8 +377,7 @@ module ActiveRecord
if ActiveRecord::NullRelation === relation
[]
else
arel = relation.arel
rows = connection.select_all(arel, "SQL", relation.bound_attributes)
rows = connection.select_all(relation.arel, "SQL", relation.bound_attributes)
join_dependency.instantiate(rows, aliases)
end
end
@ -425,9 +424,8 @@ module ActiveRecord
"#{quoted_table_name}.#{quoted_primary_key}", relation.order_values)
relation = relation.except(:select).select(values).distinct!
arel = relation.arel
id_rows = @klass.connection.select_all(arel, "SQL", relation.bound_attributes)
id_rows = @klass.connection.select_all(relation.arel, "SQL", relation.bound_attributes)
id_rows.map { |row| row[primary_key] }
end

View file

@ -2002,7 +2002,7 @@ class RelationTest < ActiveRecord::TestCase
end
def test_locked_should_not_build_arel
posts = Post.lock
posts = Post.locked
assert posts.locked?
assert_nothing_raised { posts.lock!(false) }
end

View file

@ -22,6 +22,7 @@ class Post < ActiveRecord::Base
scope :ranked_by_comments, -> { order("comments_count DESC") }
scope :limit_by, lambda { |l| limit(l) }
scope :locked, -> { lock }
belongs_to :author
belongs_to :readonly_author, -> { readonly }, class_name: "Author", foreign_key: :author_id