]> git.openstreetmap.org Git - rails.git/blob - db/migrate/006_tile_nodes.rb
Require user names to be unique after unicode normalisation
[rails.git] / db / migrate / 006_tile_nodes.rb
1 class TileNodes < ActiveRecord::Migration[4.2]
2   class Node < ApplicationRecord
3     self.table_name = "current_nodes"
4   end
5
6   class OldNode < ApplicationRecord
7     self.table_name = "nodes"
8   end
9
10   def self.upgrade_table(from_table, to_table, model)
11     execute <<-SQL.squish
12     INSERT INTO #{to_table} (id, latitude, longitude, user_id, visible, tags, timestamp, tile)
13     SELECT id, ROUND(latitude * 10000000), ROUND(longitude * 10000000),
14             user_id, visible, tags, timestamp, 0
15     FROM #{from_table}
16     SQL
17
18     model.all.each(&:save!)
19   end
20
21   def self.downgrade_table(from_table, to_table)
22     execute <<-SQL.squish
23     INSERT INTO #{to_table} (id, latitude, longitude, user_id, visible, tags, timestamp)
24     SELECT id, latitude / 10000000, longitude / 10000000,
25            user_id, visible, tags, timestamp
26     FROM #{from_table}
27     SQL
28   end
29
30   def self.up
31     remove_index "current_nodes", :name => "current_nodes_timestamp_idx"
32
33     rename_table "current_nodes", "current_nodes_v5"
34
35     create_table "current_nodes", :id => false do |t|
36       t.column "id",        :bigserial, :primary_key => true, :null => false
37       t.column "latitude",  :integer, :null => false
38       t.column "longitude", :integer, :null => false
39       t.column "user_id",   :bigint, :null => false
40       t.column "visible",   :boolean, :null => false
41       t.column "tags",      :text, :default => "", :null => false
42       t.column "timestamp", :datetime, :null => false
43       t.column "tile",      :integer, :null => false
44     end
45
46     add_index "current_nodes", ["timestamp"], :name => "current_nodes_timestamp_idx"
47     add_index "current_nodes", ["tile"], :name => "current_nodes_tile_idx"
48
49     change_column "current_nodes", "tile", :bigint
50
51     upgrade_table "current_nodes_v5", "current_nodes", Node
52
53     drop_table "current_nodes_v5"
54
55     remove_index "nodes", :name => "nodes_uid_idx"
56     remove_index "nodes", :name => "nodes_timestamp_idx"
57     rename_table "nodes", "nodes_v5"
58
59     create_table "nodes", :id => false do |t|
60       t.column "id",        :bigint, :null => false
61       t.column "latitude",  :integer, :null => false
62       t.column "longitude", :integer, :null => false
63       t.column "user_id",   :bigint, :null => false
64       t.column "visible",   :boolean, :null => false
65       t.column "tags",      :text, :default => "", :null => false
66       t.column "timestamp", :datetime, :null => false
67       t.column "tile",      :integer, :null => false
68     end
69
70     add_index "nodes", ["id"], :name => "nodes_uid_idx"
71     add_index "nodes", ["timestamp"], :name => "nodes_timestamp_idx"
72     add_index "nodes", ["tile"], :name => "nodes_tile_idx"
73
74     change_column "nodes", "tile", :bigint
75
76     upgrade_table "nodes_v5", "nodes", OldNode
77
78     drop_table "nodes_v5"
79   end
80
81   def self.down
82     rename_table "current_nodes", "current_nodes_v6"
83
84     create_table "current_nodes", :id => false do |t|
85       t.column "id",        :bigserial, :primary_key => true, :null => false
86       t.column "latitude",  :float, :limit => 53, :null => false
87       t.column "longitude", :float, :limit => 53, :null => false
88       t.column "user_id",   :bigint, :null => false
89       t.column "visible",   :boolean, :null => false
90       t.column "tags",      :text, :default => "", :null => false
91       t.column "timestamp", :datetime, :null => false
92     end
93
94     add_index "current_nodes", %w[latitude longitude], :name => "current_nodes_lat_lon_idx"
95     add_index "current_nodes", ["timestamp"], :name => "current_nodes_timestamp_idx"
96
97     downgrade_table "current_nodes_v6", "current_nodes"
98
99     drop_table "current_nodes_v6"
100
101     rename_table "nodes", "nodes_v6"
102
103     create_table "nodes", :id => false do |t|
104       t.column "id",        :bigint, :null => false
105       t.column "latitude",  :float, :limit => 53, :null => false
106       t.column "longitude", :float, :limit => 53, :null => false
107       t.column "user_id",   :bigint, :null => false
108       t.column "visible",   :boolean, :null => false
109       t.column "tags",      :text, :default => "", :null => false
110       t.column "timestamp", :datetime, :null => false
111     end
112
113     add_index "nodes", ["id"], :name => "nodes_uid_idx"
114     add_index "nodes", %w[latitude longitude], :name => "nodes_latlon_idx"
115     add_index "nodes", ["timestamp"], :name => "nodes_timestamp_idx"
116
117     downgrade_table "nodes_v6", "nodes"
118
119     drop_table "nodes_v6"
120   end
121 end