schemas set by set_table_name are respected by the mysql adapter. [#5322 state:resolved]

This commit is contained in:
Aaron Patterson
2011-03-21 11:19:14 -07:00
parent 96b9fc4400
commit ea8fcfb729
2 changed files with 52 additions and 2 deletions

View File

@@ -504,14 +504,28 @@ module ActiveRecord
show_variable 'collation_database'
end
def tables(name = nil) #:nodoc:
def tables(name = nil, database = nil) #:nodoc:
tables = []
result = execute("SHOW TABLES", name)
result = execute(["SHOW TABLES", database].compact.join(' IN '), name)
result.each { |field| tables << field[0] }
result.free
tables
end
def table_exists?(name)
return true if super
name = name.to_s
schema, table = name.split('.', 2)
unless table # A table was provided without a schema
table = schema
schema = nil
end
tables(nil, schema).include? table
end
def drop_table(table_name, options = {})
super(table_name, options)
end

View File

@@ -0,0 +1,36 @@
require "cases/helper"
require 'models/post'
require 'models/comment'
module ActiveRecord
module ConnectionAdapters
class MysqlSchemaTest < ActiveRecord::TestCase
fixtures :posts
def setup
@connection = ActiveRecord::Base.connection
db = Post.connection_pool.spec.config[:database]
table = Post.table_name
@db_name = db
@omgpost = Class.new(Post) do
set_table_name "#{db}.#{table}"
def self.name; 'Post'; end
end
end
def test_schema
assert @omgpost.find(:first)
end
def test_table_exists?
name = @omgpost.table_name
assert @connection.table_exists?(name), "#{name} table should exist"
end
def test_table_exists_wrong_schema
assert(!@connection.table_exists?("#{@db_name}.zomg"), "table should not exist")
end
end if current_adapter?(:MysqlAdapter)
end
end