From 69c7f024882f8150a2bda8536e1480d19c982e04 Mon Sep 17 00:00:00 2001
From: kennyj <kennyj@gmail.com>
Date: Sat, 3 Mar 2012 22:25:15 +0900
Subject: Fix GH #3163. Should quote database on mysql/mysql2.

---
 .../connection_adapters/abstract_mysql_adapter.rb             |  2 +-
 activerecord/test/cases/adapters/mysql/mysql_adapter_test.rb  | 10 ++++++++++
 activerecord/test/cases/adapters/mysql2/schema_test.rb        | 11 +++++++++++
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
index e33903622b..731c07547a 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
@@ -375,7 +375,7 @@ module ActiveRecord
 
       def tables(name = nil, database = nil, like = nil) #:nodoc:
         sql = "SHOW TABLES "
-        sql << "IN #{database} " if database
+        sql << "IN #{quote_table_name(database)} " if database
         sql << "LIKE #{quote(like)}" if like
 
         execute_and_free(sql, 'SCHEMA') do |result|
diff --git a/activerecord/test/cases/adapters/mysql/mysql_adapter_test.rb b/activerecord/test/cases/adapters/mysql/mysql_adapter_test.rb
index 7fe2c02c04..073d0b0e73 100644
--- a/activerecord/test/cases/adapters/mysql/mysql_adapter_test.rb
+++ b/activerecord/test/cases/adapters/mysql/mysql_adapter_test.rb
@@ -46,6 +46,16 @@ module ActiveRecord
         assert_equal str, value
       end
 
+      def test_tables_quoting
+        begin
+          @conn.tables(nil, "foo-bar", nil)
+          flunk
+        rescue => e
+          # assertion for *quoted* database properly
+          assert_match(/Access denied for user/, e.inspect)
+        end
+      end
+
       private
       def insert(ctx, data)
         binds   = data.map { |name, value|
diff --git a/activerecord/test/cases/adapters/mysql2/schema_test.rb b/activerecord/test/cases/adapters/mysql2/schema_test.rb
index d5676bc522..fd9996c937 100644
--- a/activerecord/test/cases/adapters/mysql2/schema_test.rb
+++ b/activerecord/test/cases/adapters/mysql2/schema_test.rb
@@ -35,6 +35,17 @@ module ActiveRecord
       def test_table_exists_wrong_schema
         assert(!@connection.table_exists?("#{@db_name}.zomg"), "table should not exist")
       end
+
+      def test_tables_quoting
+        begin
+          @connection.tables(nil, "foo-bar", nil)
+          flunk
+        rescue => e
+          # assertion for *quoted* database properly
+          assert_match(/Access denied for user/, e.inspect)
+        end
+      end
+
     end
   end
 end
-- 
cgit v1.2.3