aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/arel/nodes/delete_statement.rb5
-rw-r--r--spec/arel/nodes/delete_statement_spec.rb17
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