From 0c61aa1b6be696b4b1b8a9b96128b201b2be8393 Mon Sep 17 00:00:00 2001 From: Gavin Stark Date: Sat, 19 Mar 2011 10:51:49 -0400 Subject: [PATCH] MySQL schema dumps no longer create VIEWs as if they were TABLEs --- .../connection_adapters/mysql_adapter.rb | 14 ++++++-------- activerecord/test/cases/schema_dumper_test.rb | 5 +++++ activerecord/test/schema/mysql_specific_schema.rb | 4 ++++ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb index 368c5b2..5e08b1e 100644 --- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb @@ -453,13 +453,7 @@ module ActiveRecord # SCHEMA STATEMENTS ======================================== def structure_dump #:nodoc: - if supports_views? - sql = "SHOW FULL TABLES WHERE Table_type = 'BASE TABLE'" - else - sql = "SHOW TABLES" - end - - select_all(sql).map do |table| + select_all(show_tables_sql).map do |table| table.delete('Table_type') sql = "SHOW CREATE TABLE #{quote_table_name(table.to_a.first.last)}" exec_without_stmt(sql).first['Create Table'] + ";\n\n" @@ -506,7 +500,7 @@ module ActiveRecord def tables(name = nil) #:nodoc: tables = [] - result = execute("SHOW TABLES", name) + result = execute(show_tables_sql, name) result.each { |field| tables << field[0] } result.free tables @@ -789,6 +783,10 @@ module ActiveRecord end column end + + def show_tables_sql + supports_views? ? "SHOW FULL TABLES WHERE Table_type = 'BASE TABLE'" : "SHOW TABLES" + end end end end diff --git a/activerecord/test/cases/schema_dumper_test.rb b/activerecord/test/cases/schema_dumper_test.rb index 9b2c7c0..433179a 100644 --- a/activerecord/test/cases/schema_dumper_test.rb +++ b/activerecord/test/cases/schema_dumper_test.rb @@ -162,6 +162,11 @@ class SchemaDumperTest < ActiveRecord::TestCase assert_equal 'add_index "companies", ["firm_id", "type", "rating", "ruby_type"], :name => "company_index"', index_definition end + def test_schema_dump_should_not_include_views + output = standard_dump + assert_no_match %r{view_binary_fields}, output + end + def test_schema_dump_should_honor_nonstandard_primary_keys output = standard_dump match = output.match(%r{create_table "movies"(.*)do}) diff --git a/activerecord/test/schema/mysql_specific_schema.rb b/activerecord/test/schema/mysql_specific_schema.rb index 30e1c5a..3e66a90 100644 --- a/activerecord/test/schema/mysql_specific_schema.rb +++ b/activerecord/test/schema/mysql_specific_schema.rb @@ -11,6 +11,10 @@ ActiveRecord::Schema.define do end ActiveRecord::Base.connection.execute <<-SQL +CREATE OR REPLACE VIEW view_binary_fields AS SELECT * FROM binary_fields +SQL + + ActiveRecord::Base.connection.execute <<-SQL DROP PROCEDURE IF EXISTS ten; SQL -- 1.7.3.4