aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorMatt Jones <al2o3cr@gmail.com>2015-02-08 18:36:11 -0500
committerMatt Jones <al2o3cr@gmail.com>2015-02-08 19:06:52 -0500
commit1a836b21b93acd6851bcb4f83c8b2678282d9122 (patch)
treed8c5a57a97b9e53b22d67dafebe3690ce2017541 /activerecord/lib/active_record
parent6f8d9bd6da6349d3d179f2e72db5bc7044a8e5c1 (diff)
downloadrails-1a836b21b93acd6851bcb4f83c8b2678282d9122.tar.gz
rails-1a836b21b93acd6851bcb4f83c8b2678282d9122.tar.bz2
rails-1a836b21b93acd6851bcb4f83c8b2678282d9122.zip
Match table names exactly on MySQL
The `SHOW TABLES LIKE` command accepts metacharacters `%` and `_` in potentially unexpected ways. This can be avoided by querying `information_schema.tables` directly. Fixes #17897
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb8
1 files changed, 5 insertions, 3 deletions
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 5c8c4b883a..48e1ec008b 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
@@ -422,9 +422,11 @@ module ActiveRecord
end
def tables(name = nil, database = nil, like = nil) #:nodoc:
- sql = "SHOW TABLES "
- sql << "IN #{quote_table_name(database)} " if database
- sql << "LIKE #{quote(like)}" if like
+ database ||= current_database
+
+ sql = "SELECT table_name FROM information_schema.tables "
+ sql << "WHERE table_schema = #{quote(database)}"
+ sql << " AND table_name = #{quote(like)}" if like
execute_and_free(sql, 'SCHEMA') do |result|
result.collect(&:first)