mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #29405 from kamipo/locked_should_not_build_arel
`Relation#locked?` should not build arel
This commit is contained in:
commit
8c65abe5f8
7 changed files with 13 additions and 9 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ module ActiveRecord
|
|||
attr_reader :table, :klass, :loaded, :predicate_builder
|
||||
alias :model :klass
|
||||
alias :loaded? :loaded
|
||||
alias :locked? :locked
|
||||
alias :locked? :lock_value
|
||||
|
||||
def initialize(klass, table, predicate_builder, values = {})
|
||||
@klass = klass
|
||||
|
|
|
@ -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] }
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -315,7 +315,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
|
||||
|
@ -376,8 +376,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
|
||||
|
@ -424,9 +423,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
|
||||
|
||||
|
|
|
@ -2007,6 +2007,12 @@ class RelationTest < ActiveRecord::TestCase
|
|||
assert_equal binds, merged.bound_attributes
|
||||
end
|
||||
|
||||
def test_locked_should_not_build_arel
|
||||
posts = Post.locked
|
||||
assert posts.locked?
|
||||
assert_nothing_raised { posts.lock!(false) }
|
||||
end
|
||||
|
||||
def test_relation_join_method
|
||||
assert_equal "Thank you for the welcome,Thank you again for the welcome", Post.first.comments.join(",")
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue