Browse files

More incremental work on active schema for MySQL

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@884 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent 4f2f408 commit 65786805ca89bbcaf7aa89e74f99964e0f5fd89e @dhh dhh committed Mar 10, 2005
View
5 activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
@@ -377,8 +377,9 @@ def drop_table(name)
end
def add_column(table_name, column_name, type, options = {})
- add_column_sql = "ALTER TABLE #{table_name} ADD #{column_name} #{native_database_types[type]}"
- add_column_sql << "(#{limit})" if options[:limit]
+ native_type = native_database_types[type]
+ add_column_sql = "ALTER TABLE #{table_name} ADD #{column_name} #{native_type[:name]}"
+ add_column_sql << "(#{options[:limit] || native_type[:limit]})" if options[:limit] || native_type[:limit]
add_column_sql << " DEFAULT '#{options[:default]}'" if options[:default]
execute(add_column_sql)
end
View
22 activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
@@ -66,17 +66,17 @@ class MysqlAdapter < AbstractAdapter
def native_database_types
{
- :primary_key => "int(11) DEFAULT NULL auto_increment PRIMARY KEY",
- :string => "varchar(255)",
- :text => "text",
- :integer => "int(11)",
- :float => "float",
- :datetime => "datetime",
- :timestamp => "datetime",
- :time => "datetime",
- :date => "date",
- :binary => "blob",
- :boolean => "tinyint(1)"
+ :primary_key => { :name => "int(11) DEFAULT NULL auto_increment PRIMARY KEY" },
+ :string => { :name => "varchar", :limit => 255 },
+ :text => { :name => "text" },
+ :integer => { :name => "int", :limit => 11 },
+ :float => { :name => "float" },
+ :datetime => { :name => "datetime" },
+ :timestamp => { :name => "datetime" },
+ :time => { :name => "datetime" },
+ :date => { :name => "date" },
+ :binary => { :name => "blob" },
+ :boolean => { :name => "tinyint", :limit => 1 }
}
end
View
31 activerecord/test/active_schema_mysql.rb
@@ -0,0 +1,31 @@
+require 'abstract_unit'
+
+class ActiveSchemaTest < Test::Unit::TestCase
+ def setup
+ ActiveRecord::ConnectionAdapters::MysqlAdapter.class_eval do
+ alias_method :real_execute, :execute
+ def execute(sql, name = nil) return sql end
+ end
+ end
+
+ def teardown
+ ActiveRecord::ConnectionAdapters::MysqlAdapter.send(:alias_method, :execute, :real_execute)
+ end
+
+ def test_drop_table
+ assert_equal "DROP TABLE people", drop_table(:people)
+ end
+
+ def test_add_column
+ assert_equal "ALTER TABLE people ADD last_name varchar(255)", add_column(:people, :last_name, :string)
+ end
+
+ def test_add_column_with_limit
+ assert_equal "ALTER TABLE people ADD key varchar(32)", add_column(:people, :key, :string, :limit => 32)
+ end
+
+ private
+ def method_missing(method_symbol, *arguments)
+ ActiveRecord::Base.connection.send(method_symbol, *arguments)
+ end
+end

0 comments on commit 6578680

Please sign in to comment.