提交 8c65abe5 编写于 作者: R Rafael França 提交者: GitHub

Merge pull request #29405 from kamipo/locked_should_not_build_arel

`Relation#locked?` should not build arel
......@@ -123,6 +123,7 @@ def cache_sql(sql, name, binds)
# 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 @@ class Relation
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 @@ def execute_grouped_calculation(operation, column_name, distinct) #:nodoc:
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 @@ def inherited(child_class)
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 @@ def exists?(conditions = :none)
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 @@ def find_with_associations
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 @@ def limited_ids_for(relation)
"#{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 @@ def test_merging_keeps_lhs_binds
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 @@ def greeting
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册