Enhacements to the migration library code.
authorTom Hughes <tom@compton.nu>
Sun, 24 Jun 2007 16:00:46 +0000 (16:00 +0000)
committerTom Hughes <tom@compton.nu>
Sun, 24 Jun 2007 16:00:46 +0000 (16:00 +0000)
db/migrate/001_create_osm_db.rb
lib/migrate.rb

index 3a98d6d..2c80dd8 100644 (file)
@@ -2,9 +2,6 @@ require 'lib/migrate'
 
 class CreateOsmDb < ActiveRecord::Migration
   def self.up
-    myisam_table = { :id => false, :force => true, :options => "ENGINE=MyIsam DEFAULT CHARSET=utf8" }
-    innodb_table = { :id => false, :force => true, :options => "ENGINE=InnoDB DEFAULT CHARSET=utf8" }
-
     create_table "current_nodes", innodb_table do |t|
       t.column "id",        :bigint,   :limit => 64,                 :null => false
       t.column "latitude",  :double
index 4cbabd6..c31e315 100644 (file)
@@ -7,17 +7,15 @@ module ActiveRecord
         execute "ALTER TABLE #{table_name} ADD PRIMARY KEY (#{quoted_column_names})"
       end
 
-      alias_method :old_add_column_options!, :add_column_options!
-
-      def add_column_options!(sql, options)
-        old_add_column_options!(sql, options)
-        sql << " #{options[:options]}"
+      def remove_primary_key(table_name)
+        execute "ALTER TABLE #{table_name} DROP PRIMARY KEY"
       end
 
       alias_method :old_options_include_default?, :options_include_default?
 
       def options_include_default?(options)
-        old_options_include_default?(options) && !(options[:options] =~ /AUTO_INCREMENT/i)
+        return false if options[:options] =~ /AUTO_INCREMENT/i
+        return old_options_include_default?(options)
       end
     end
 
@@ -27,11 +25,32 @@ module ActiveRecord
       def native_database_types
         types = old_native_database_types
         types[:bigint] = { :name => "bigint", :limit => 20 }
+        types[:double] = { :name => "double" }
         types
       end
+
+      def change_column(table_name, column_name, type, options = {})
+        unless options_include_default?(options)
+          options[:default] = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Default"]
+
+          unless type == :string or type == :text
+            options.delete(:default) if options[:default] = "";
+          end
+        end
+
+        change_column_sql = "ALTER TABLE #{table_name} CHANGE #{column_name} #{column_name} #{type_to_sql(type, options[:limit], options[:precision], options[:scale])}"
+        add_column_options!(change_column_sql, options)
+        change_column_sql << " #{options[:options]}"
+        execute(change_column_sql) 
+      end
+
+      def myisam_table
+        return { :id => false, :force => true, :options => "ENGINE=MyIsam" }
+      end
+
+      def innodb_table
+        return { :id => false, :force => true, :options => "ENGINE=InnoDB" }
+      end
     end
   end
 end
-
-myisam_table = { :id => false, :force => true, :options => "ENGINE=MyIsam" }
-innodb_table = { :id => false, :force => true, :options => "ENGINE=InnoDB" }