1 # frozen_string_literal: true
 
   3 class TileNodes < ActiveRecord::Migration[4.2]
 
   4   class Node < ApplicationRecord
 
   5     self.table_name = "current_nodes"
 
   8   class OldNode < ApplicationRecord
 
   9     self.table_name = "nodes"
 
  12   def self.upgrade_table(from_table, to_table, model)
 
  14     INSERT INTO #{to_table} (id, latitude, longitude, user_id, visible, tags, timestamp, tile)
 
  15     SELECT id, ROUND(latitude * 10000000), ROUND(longitude * 10000000),
 
  16             user_id, visible, tags, timestamp, 0
 
  20     model.all.each(&:save!)
 
  23   def self.downgrade_table(from_table, to_table)
 
  25     INSERT INTO #{to_table} (id, latitude, longitude, user_id, visible, tags, timestamp)
 
  26     SELECT id, latitude / 10000000, longitude / 10000000,
 
  27            user_id, visible, tags, timestamp
 
  33     remove_index "current_nodes", :name => "current_nodes_timestamp_idx"
 
  35     rename_table "current_nodes", "current_nodes_v5"
 
  37     create_table "current_nodes", :id => false do |t|
 
  38       t.column "id",        :bigserial, :primary_key => true, :null => false
 
  39       t.column "latitude",  :integer, :null => false
 
  40       t.column "longitude", :integer, :null => false
 
  41       t.column "user_id",   :bigint, :null => false
 
  42       t.column "visible",   :boolean, :null => false
 
  43       t.column "tags",      :text, :default => "", :null => false
 
  44       t.column "timestamp", :datetime, :null => false
 
  45       t.column "tile",      :integer, :null => false
 
  48     add_index "current_nodes", ["timestamp"], :name => "current_nodes_timestamp_idx"
 
  49     add_index "current_nodes", ["tile"], :name => "current_nodes_tile_idx"
 
  51     change_column "current_nodes", "tile", :bigint
 
  53     upgrade_table "current_nodes_v5", "current_nodes", Node
 
  55     drop_table "current_nodes_v5"
 
  57     remove_index "nodes", :name => "nodes_uid_idx"
 
  58     remove_index "nodes", :name => "nodes_timestamp_idx"
 
  59     rename_table "nodes", "nodes_v5"
 
  61     create_table "nodes", :id => false do |t|
 
  62       t.column "id",        :bigint, :null => false
 
  63       t.column "latitude",  :integer, :null => false
 
  64       t.column "longitude", :integer, :null => false
 
  65       t.column "user_id",   :bigint, :null => false
 
  66       t.column "visible",   :boolean, :null => false
 
  67       t.column "tags",      :text, :default => "", :null => false
 
  68       t.column "timestamp", :datetime, :null => false
 
  69       t.column "tile",      :integer, :null => false
 
  72     add_index "nodes", ["id"], :name => "nodes_uid_idx"
 
  73     add_index "nodes", ["timestamp"], :name => "nodes_timestamp_idx"
 
  74     add_index "nodes", ["tile"], :name => "nodes_tile_idx"
 
  76     change_column "nodes", "tile", :bigint
 
  78     upgrade_table "nodes_v5", "nodes", OldNode
 
  84     rename_table "current_nodes", "current_nodes_v6"
 
  86     create_table "current_nodes", :id => false do |t|
 
  87       t.column "id",        :bigserial, :primary_key => true, :null => false
 
  88       t.column "latitude",  :float, :limit => 53, :null => false
 
  89       t.column "longitude", :float, :limit => 53, :null => false
 
  90       t.column "user_id",   :bigint, :null => false
 
  91       t.column "visible",   :boolean, :null => false
 
  92       t.column "tags",      :text, :default => "", :null => false
 
  93       t.column "timestamp", :datetime, :null => false
 
  96     add_index "current_nodes", %w[latitude longitude], :name => "current_nodes_lat_lon_idx"
 
  97     add_index "current_nodes", ["timestamp"], :name => "current_nodes_timestamp_idx"
 
  99     downgrade_table "current_nodes_v6", "current_nodes"
 
 101     drop_table "current_nodes_v6"
 
 103     rename_table "nodes", "nodes_v6"
 
 105     create_table "nodes", :id => false do |t|
 
 106       t.column "id",        :bigint, :null => false
 
 107       t.column "latitude",  :float, :limit => 53, :null => false
 
 108       t.column "longitude", :float, :limit => 53, :null => false
 
 109       t.column "user_id",   :bigint, :null => false
 
 110       t.column "visible",   :boolean, :null => false
 
 111       t.column "tags",      :text, :default => "", :null => false
 
 112       t.column "timestamp", :datetime, :null => false
 
 115     add_index "nodes", ["id"], :name => "nodes_uid_idx"
 
 116     add_index "nodes", %w[latitude longitude], :name => "nodes_latlon_idx"
 
 117     add_index "nodes", ["timestamp"], :name => "nodes_timestamp_idx"
 
 119     downgrade_table "nodes_v6", "nodes"
 
 121     drop_table "nodes_v6"