diff options
author | Matt Jones <al2o3cr@gmail.com> | 2015-02-08 18:36:11 -0500 |
---|---|---|
committer | Matt Jones <al2o3cr@gmail.com> | 2015-02-08 19:06:52 -0500 |
commit | 1a836b21b93acd6851bcb4f83c8b2678282d9122 (patch) | |
tree | d8c5a57a97b9e53b22d67dafebe3690ce2017541 /activerecord/lib/active_record | |
parent | 6f8d9bd6da6349d3d179f2e72db5bc7044a8e5c1 (diff) | |
download | rails-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.rb | 8 |
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) |