X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/fc9046ce6fcb3b4c4962285737767ea094b4cb00..919021e41e7ad9ed376ef24dea39fb418639793a:/db/migrate/006_tile_nodes.rb?ds=sidebyside diff --git a/db/migrate/006_tile_nodes.rb b/db/migrate/006_tile_nodes.rb index f3a1edbb2..a7f9b1af0 100644 --- a/db/migrate/006_tile_nodes.rb +++ b/db/migrate/006_tile_nodes.rb @@ -1,78 +1,77 @@ -class TileNodes < ActiveRecord::Migration +class TileNodes < ActiveRecord::Migration[4.2] + class Node < ApplicationRecord + self.table_name = "current_nodes" + end + + class OldNode < ApplicationRecord + self.table_name = "nodes" + end + def self.upgrade_table(from_table, to_table, model) - begin - execute <<-END_SQL - INSERT INTO #{to_table} (id, latitude, longitude, user_id, visible, tags, timestamp, tile) - SELECT id, ROUND(latitude * 10000000), ROUND(longitude * 10000000), - user_id, visible, tags, timestamp, - tile_for_point(CAST(ROUND(latitude * 10000000) AS UNSIGNED), - CAST(ROUND(longitude * 10000000) AS UNSIGNED)) - FROM #{from_table} - END_SQL - rescue ActiveRecord::StatementInvalid => ex - execute <<-END_SQL - INSERT INTO #{to_table} (id, latitude, longitude, user_id, visible, tags, timestamp, tile) - SELECT id, ROUND(latitude * 10000000), ROUND(longitude * 10000000), - user_id, visible, tags, timestamp, 0 - FROM #{from_table} - END_SQL - - model.find(:all).each do |n| - n.save! - end - end + execute <<-SQL.squish + INSERT INTO #{to_table} (id, latitude, longitude, user_id, visible, tags, timestamp, tile) + SELECT id, ROUND(latitude * 10000000), ROUND(longitude * 10000000), + user_id, visible, tags, timestamp, 0 + FROM #{from_table} + SQL + + model.all.each(&:save!) end def self.downgrade_table(from_table, to_table) - execute <<-END_SQL + execute <<-SQL.squish INSERT INTO #{to_table} (id, latitude, longitude, user_id, visible, tags, timestamp) SELECT id, latitude / 10000000, longitude / 10000000, user_id, visible, tags, timestamp FROM #{from_table} - END_SQL + SQL end def self.up + remove_index "current_nodes", :name => "current_nodes_timestamp_idx" + rename_table "current_nodes", "current_nodes_v5" - create_table "current_nodes", innodb_table do |t| - t.column "id", :bigint_pk_64, :null => false - t.column "latitude", :integer, :null => false - t.column "longitude", :integer, :null => false - t.column "user_id", :bigint, :limit => 20, :null => false - t.column "visible", :boolean, :null => false - t.column "tags", :text, :default => "", :null => false - t.column "timestamp", :datetime, :null => false - t.column "tile", :integer, :null => false + create_table "current_nodes", :id => false do |t| + t.column "id", :bigserial, :primary_key => true, :null => false + t.column "latitude", :integer, :null => false + t.column "longitude", :integer, :null => false + t.column "user_id", :bigint, :null => false + t.column "visible", :boolean, :null => false + t.column "tags", :text, :default => "", :null => false + t.column "timestamp", :datetime, :null => false + t.column "tile", :integer, :null => false end add_index "current_nodes", ["timestamp"], :name => "current_nodes_timestamp_idx" add_index "current_nodes", ["tile"], :name => "current_nodes_tile_idx" - change_column "current_nodes", "tile", :integer, :null => false, :unsigned => true + change_column "current_nodes", "tile", :bigint upgrade_table "current_nodes_v5", "current_nodes", Node - + drop_table "current_nodes_v5" + remove_index "nodes", :name => "nodes_uid_idx" + remove_index "nodes", :name => "nodes_timestamp_idx" rename_table "nodes", "nodes_v5" - create_table "nodes", myisam_table do |t| - t.column "id", :bigint, :limit => 64, :null => false - t.column "latitude", :integer, :null => false - t.column "longitude", :integer, :null => false - t.column "user_id", :bigint, :limit => 20, :null => false - t.column "visible", :boolean, :null => false - t.column "tags", :text, :default => "", :null => false - t.column "timestamp", :datetime, :null => false - t.column "tile", :integer, :null => false + create_table "nodes", :id => false do |t| + t.column "id", :bigint, :null => false + t.column "latitude", :integer, :null => false + t.column "longitude", :integer, :null => false + t.column "user_id", :bigint, :null => false + t.column "visible", :boolean, :null => false + t.column "tags", :text, :default => "", :null => false + t.column "timestamp", :datetime, :null => false + t.column "tile", :integer, :null => false end add_index "nodes", ["id"], :name => "nodes_uid_idx" add_index "nodes", ["timestamp"], :name => "nodes_timestamp_idx" add_index "nodes", ["tile"], :name => "nodes_tile_idx" - change_column "nodes", "tile", :integer, :null => false, :unsigned => true + change_column "nodes", "tile", :bigint upgrade_table "nodes_v5", "nodes", OldNode @@ -82,17 +81,17 @@ class TileNodes < ActiveRecord::Migration def self.down rename_table "current_nodes", "current_nodes_v6" - create_table "current_nodes", innodb_table do |t| - t.column "id", :bigint_pk_64, :null => false - t.column "latitude", :double, :null => false - t.column "longitude", :double, :null => false - t.column "user_id", :bigint, :limit => 20, :null => false - t.column "visible", :boolean, :null => false - t.column "tags", :text, :default => "", :null => false - t.column "timestamp", :datetime, :null => false + create_table "current_nodes", :id => false do |t| + t.column "id", :bigserial, :primary_key => true, :null => false + t.column "latitude", :float, :limit => 53, :null => false + t.column "longitude", :float, :limit => 53, :null => false + t.column "user_id", :bigint, :null => false + t.column "visible", :boolean, :null => false + t.column "tags", :text, :default => "", :null => false + t.column "timestamp", :datetime, :null => false end - add_index "current_nodes", ["latitude", "longitude"], :name => "current_nodes_lat_lon_idx" + add_index "current_nodes", %w[latitude longitude], :name => "current_nodes_lat_lon_idx" add_index "current_nodes", ["timestamp"], :name => "current_nodes_timestamp_idx" downgrade_table "current_nodes_v6", "current_nodes" @@ -101,18 +100,18 @@ class TileNodes < ActiveRecord::Migration rename_table "nodes", "nodes_v6" - create_table "nodes", myisam_table do |t| - t.column "id", :bigint, :limit => 64, :null => false - t.column "latitude", :double, :null => false - t.column "longitude", :double, :null => false - t.column "user_id", :bigint, :limit => 20, :null => false - t.column "visible", :boolean, :null => false - t.column "tags", :text, :default => "", :null => false - t.column "timestamp", :datetime, :null => false + create_table "nodes", :id => false do |t| + t.column "id", :bigint, :null => false + t.column "latitude", :float, :limit => 53, :null => false + t.column "longitude", :float, :limit => 53, :null => false + t.column "user_id", :bigint, :null => false + t.column "visible", :boolean, :null => false + t.column "tags", :text, :default => "", :null => false + t.column "timestamp", :datetime, :null => false end add_index "nodes", ["id"], :name => "nodes_uid_idx" - add_index "nodes", ["latitude", "longitude"], :name => "nodes_latlon_idx" + add_index "nodes", %w[latitude longitude], :name => "nodes_latlon_idx" add_index "nodes", ["timestamp"], :name => "nodes_timestamp_idx" downgrade_table "nodes_v6", "nodes"