changing the changesets migrations, so that the user id is now the changeset id for...
authorShaun McDonald <shaun@shaunmcdonald.me.uk>
Tue, 30 Sep 2008 14:29:44 +0000 (14:29 +0000)
committerShaun McDonald <shaun@shaunmcdonald.me.uk>
Tue, 30 Sep 2008 14:29:44 +0000 (14:29 +0000)
db/migrate/020_add_changesets.rb

index 40455ec688bea5dad2a0ea61bf8ffe8337571f74..15122957bed767785908375d56bdab96a67668f3 100644 (file)
@@ -1,4 +1,7 @@
 class AddChangesets < ActiveRecord::Migration
+  @@conv_user_tables = ['current_nodes',
+  'current_relations', 'current_ways', 'nodes', 'relations', 'ways' ]
+  
   def self.up
     create_table "changesets", innodb_table do |t|
       t.column "id",             :bigint,   :limit => 20, :null => false
@@ -23,10 +26,26 @@ class AddChangesets < ActiveRecord::Migration
     end
 
     add_index "changeset_tags", ["id"], :name => "changeset_tags_id_idx"
+    
+    #
+    # Initially we will have one changeset for every user containing 
+    # all edits up to the API change,  
+    # all the changesets will have the id of the user that made them.
+    # We need to generate a changeset for each user in the database
+    execute "INSERT INTO changesets (id, user_id, created_at, open)" + 
+      "SELECT user_id, user_id, creation_time, 0 from users;"
+
+    @@conv_user_tables.each { |tbl|
+      rename_column tbl, :user_id, :changeset_id
+      #foreign keys too
+      add_foreign_key tbl, :changeset_id, [:id], :users
+    }
   end
 
   def self.down
-    drop_table "changesets"
-    drop_table "changeset_tags"
+    # It's not easy to generate the user ids from the changesets
+    raise IrreversibleMigration.new
+    #drop_table "changesets"
+    #drop_table "changeset_tags"
   end
 end