From 096719ce2a378ecbf7f07a2e586bd9ffd75e37b9 Mon Sep 17 00:00:00 2001 From: Ryuta Kamizono Date: Mon, 15 Mar 2021 23:50:44 +0900 Subject: [PATCH] Move `where` from `TreeManager` to `SelectManager` `TreeManager` is inherited by `InsertManager` but `where` on `InsertManager` doesn't work. And also, remove `@ctx` since the instance variable is used only for the `SelectManager`. --- activerecord/lib/arel/delete_manager.rb | 2 -- activerecord/lib/arel/insert_manager.rb | 1 - activerecord/lib/arel/select_manager.rb | 9 ++++++++- activerecord/lib/arel/tree_manager.rb | 12 ------------ activerecord/lib/arel/update_manager.rb | 2 -- 5 files changed, 8 insertions(+), 18 deletions(-) diff --git a/activerecord/lib/arel/delete_manager.rb b/activerecord/lib/arel/delete_manager.rb index 707376a5669..3ca64de62df 100644 --- a/activerecord/lib/arel/delete_manager.rb +++ b/activerecord/lib/arel/delete_manager.rb @@ -5,9 +5,7 @@ module Arel # :nodoc: all include TreeManager::StatementMethods def initialize(table = nil) - super() @ast = Nodes::DeleteStatement.new(table) - @ctx = @ast end def from(relation) diff --git a/activerecord/lib/arel/insert_manager.rb b/activerecord/lib/arel/insert_manager.rb index 1fa7612e162..2bf57b7d020 100644 --- a/activerecord/lib/arel/insert_manager.rb +++ b/activerecord/lib/arel/insert_manager.rb @@ -3,7 +3,6 @@ module Arel # :nodoc: all class InsertManager < Arel::TreeManager def initialize(table = nil) - super() @ast = Nodes::InsertStatement.new(table) end diff --git a/activerecord/lib/arel/select_manager.rb b/activerecord/lib/arel/select_manager.rb index 5f3e39a7f12..e02c602b832 100644 --- a/activerecord/lib/arel/select_manager.rb +++ b/activerecord/lib/arel/select_manager.rb @@ -7,7 +7,6 @@ module Arel # :nodoc: all STRING_OR_SYMBOL_CLASS = [Symbol, String] def initialize(table = nil) - super() @ast = Nodes::SelectStatement.new(table) @ctx = @ast.cores.last end @@ -182,6 +181,14 @@ module Arel # :nodoc: all @ast.orders end + def where(expr) + if Arel::TreeManager === expr + expr = expr.ast + end + @ctx.wheres << expr + self + end + def where_sql(engine = Table.engine) return if @ctx.wheres.empty? diff --git a/activerecord/lib/arel/tree_manager.rb b/activerecord/lib/arel/tree_manager.rb index 0476399618c..ed16033806d 100644 --- a/activerecord/lib/arel/tree_manager.rb +++ b/activerecord/lib/arel/tree_manager.rb @@ -40,10 +40,6 @@ module Arel # :nodoc: all attr_reader :ast - def initialize - @ctx = nil - end - def to_dot collector = Arel::Collectors::PlainString.new collector = Visitors::Dot.new.accept @ast, collector @@ -60,13 +56,5 @@ module Arel # :nodoc: all super @ast = @ast.clone end - - def where(expr) - if Arel::TreeManager === expr - expr = expr.ast - end - @ctx.wheres << expr - self - end end end diff --git a/activerecord/lib/arel/update_manager.rb b/activerecord/lib/arel/update_manager.rb index 434e82a0b02..ccdd9f8d1d1 100644 --- a/activerecord/lib/arel/update_manager.rb +++ b/activerecord/lib/arel/update_manager.rb @@ -5,9 +5,7 @@ module Arel # :nodoc: all include TreeManager::StatementMethods def initialize(table = nil) - super() @ast = Nodes::UpdateStatement.new(table) - @ctx = @ast end ###