Skip to content

Instantly share code, notes, and snippets.

@AquaGeek
Created May 14, 2011 02:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AquaGeek/971734 to your computer and use it in GitHub Desktop.
Save AquaGeek/971734 to your computer and use it in GitHub Desktop.
Rails Lighthouse ticket #6058
From 4b1b962281fb018be81862d4398fddf3a82ecdcb Mon Sep 17 00:00:00 2001
From: Neeraj Singh <neerajdotname@gmail.com>
Date: Wed, 24 Nov 2010 14:20:25 -0500
Subject: [PATCH] failing test for #6058
---
activerecord/test/cases/persistence_test.rb | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/activerecord/test/cases/persistence_test.rb b/activerecord/test/cases/persistence_test.rb
index 8ca9d62..243a859 100644
--- a/activerecord/test/cases/persistence_test.rb
+++ b/activerecord/test/cases/persistence_test.rb
@@ -62,6 +62,12 @@ class PersistencesTest < ActiveRecord::TestCase
assert_equal "bulk updated!", Topic.find(2).content
end
+ def test_update_by_condition_with_limit_and_order
+ Topic.update_all "content = 'bulk updated!'", ["approved = ?", true], :limit => 100, :order => 'id'
+ assert_equal "Have a nice day", Topic.find(1).content
+ assert_equal "bulk updated!", Topic.find(2).content
+ end
+
def test_increment_attribute
assert_equal 50, accounts(:signals37).credit_limit
accounts(:signals37).increment! :credit_limit
--
1.7.2
From d8fe2e9dbf6070440e820e3b6b82242a34b4fffe Mon Sep 17 00:00:00 2001
From: Hugo Peixoto <hugo.peixoto@gmail.com>
Date: Sun, 6 Mar 2011 10:28:46 +0000
Subject: [PATCH] Fixes rails bug #6058.
Propagates 'where' clauses when subquerying is triggered on the UpdateManager.
---
lib/arel/visitors/to_sql.rb | 1 +
test/test_select_manager.rb | 14 ++++++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index f76c149..035d906 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -35,6 +35,7 @@ module Arel
stmt = Nodes::SelectStatement.new
core = stmt.cores.first
core.froms = o.relation
+ core.wheres = o.wheres
core.projections = [key]
stmt.limit = o.limit
stmt.orders = o.orders
diff --git a/test/test_select_manager.rb b/test/test_select_manager.rb
index 2fe43aa..410fe38 100644
--- a/test/test_select_manager.rb
+++ b/test/test_select_manager.rb
@@ -713,6 +713,20 @@ module Arel
}
end
+ it 'copies where clauses when nesting is triggered' do
+ engine = EngineProxy.new Table.engine
+ table = Table.new :users
+ manager = Arel::SelectManager.new engine
+ manager.where table[:foo].eq 10
+ manager.take 42
+ manager.from table
+ stmt = manager.compile_update(table[:id] => 1)
+
+ stmt.to_sql.must_be_like %{
+ UPDATE "users" SET "id" = 1 WHERE "users"."id" IN (SELECT "users"."id" FROM "users" WHERE "users"."foo" = 10 LIMIT 42)
+ }
+ end
+
it 'executes an update statement' do
engine = EngineProxy.new Table.engine
table = Table.new :users
--
1.7.1
From ebcb274e6acbc19698d97909460285555fe395cd Mon Sep 17 00:00:00 2001
From: Hugo Peixoto <hugo.peixoto@gmail.com>
Date: Sun, 6 Mar 2011 10:28:46 +0000
Subject: [PATCH] Fixes rails bug #6058.
Propagates 'where' clauses when subquerying is triggered on the UpdateManager.
---
lib/arel/visitors/to_sql.rb | 1 +
test/test_select_manager.rb | 14 ++++++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index 2a07a82..18b9d50 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -35,6 +35,7 @@ module Arel
stmt = Nodes::SelectStatement.new
core = stmt.cores.first
core.froms = o.relation
+ core.wheres = o.wheres
core.projections = [o.relation.primary_key]
stmt.limit = o.limit
stmt.orders = o.orders
diff --git a/test/test_select_manager.rb b/test/test_select_manager.rb
index f4a07f4..15185ee 100644
--- a/test/test_select_manager.rb
+++ b/test/test_select_manager.rb
@@ -499,6 +499,20 @@ module Arel
}
end
+ it 'copies where clauses when nesting is triggered' do
+ engine = EngineProxy.new Table.engine
+ table = Table.new :users
+ manager = Arel::SelectManager.new engine
+ manager.where table[:name].eq 'foo'
+ manager.take 42
+ manager.from table
+ stmt = manager.update(table[:id] => 1)
+
+ engine.executed.last.must_be_like %{
+ UPDATE "users" SET "id" = 1 WHERE "users"."id" IN (SELECT "users"."id" FROM "users" WHERE "users"."name" = 'foo' LIMIT 42)
+ }
+ end
+
it 'executes an update statement' do
engine = EngineProxy.new Table.engine
table = Table.new :users
--
1.7.1
From 4b0b9a95bcda37c43780cbab341191608ad9fea8 Mon Sep 17 00:00:00 2001
From: Hugo Peixoto <hugo.peixoto@gmail.com>
Date: Sat, 5 Mar 2011 22:34:03 +0000
Subject: [PATCH] Fixes rails bug #6058.
Propagates 'where' clauses when subquerying is triggered on the UpdateManager.
---
lib/arel/visitors/to_sql.rb | 2 +-
test/test_select_manager.rb | 14 ++++++++++++++
2 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index f76c149..51a6fd1 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -55,7 +55,7 @@ key on UpdateManager using UpdateManager#key=
key = o.relation.primary_key
end
- wheres = [Nodes::In.new(key, [build_subselect(key, o)])]
+ wheres = o.wheres + [Nodes::In.new(key, [build_subselect(key, o)])]
end
[
diff --git a/test/test_select_manager.rb b/test/test_select_manager.rb
index 2fe43aa..13a719a 100644
--- a/test/test_select_manager.rb
+++ b/test/test_select_manager.rb
@@ -713,6 +713,20 @@ module Arel
}
end
+ it 'copies where clauses when nesting is triggered' do
+ engine = EngineProxy.new Table.engine
+ table = Table.new :users
+ manager = Arel::SelectManager.new engine
+ manager.where table[:foo].eq 10
+ manager.take 42
+ manager.from table
+ stmt = manager.compile_update(table[:id] => 1)
+
+ stmt.to_sql.must_be_like %{
+ UPDATE "users" SET "id" = 1 WHERE "users"."foo" = 10 AND "users"."id" IN (SELECT "users"."id" FROM "users" LIMIT 42)
+ }
+ end
+
it 'executes an update statement' do
engine = EngineProxy.new Table.engine
table = Table.new :users
--
1.7.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment