diff options
-rw-r--r-- | lib/arel/nodes/delete_statement.rb | 5 | ||||
-rw-r--r-- | spec/arel/nodes/delete_statement_spec.rb | 17 |
2 files changed, 22 insertions, 0 deletions
diff --git a/lib/arel/nodes/delete_statement.rb b/lib/arel/nodes/delete_statement.rb index 54bf513c2b..b65177af05 100644 --- a/lib/arel/nodes/delete_statement.rb +++ b/lib/arel/nodes/delete_statement.rb @@ -7,6 +7,11 @@ module Arel @from = nil @wheres = [] end + + def initialize_copy other + super + @wheres = @wheres.map { |o| o.clone } + end end end end diff --git a/spec/arel/nodes/delete_statement_spec.rb b/spec/arel/nodes/delete_statement_spec.rb new file mode 100644 index 0000000000..dd43b70d35 --- /dev/null +++ b/spec/arel/nodes/delete_statement_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe Arel::Nodes::SelectStatement do + describe "#clone" do + it "clones where" do + statement = Arel::Nodes::DeleteStatement.new + statement.wheres = %w[a b c] + + statement.wheres.each_with_index do |o, j| + o.should_receive(:clone).and_return("#{o}#{j}") + end + + dolly = statement.clone + dolly.wheres.should == %w[a0 b1 c2] + end + end +end |