in the environment. This could possibly be revisited when we move to
rails 2.3 by using a nested transaction to try the function without
causing the surrounding transaction to abort.
add_index "gps_points", ["tile"], :name => "points_tile_idx"
remove_index "gps_points", :name => "points_idx"
add_index "gps_points", ["tile"], :name => "points_tile_idx"
remove_index "gps_points", :name => "points_idx"
+ if ENV["USE_DB_FUNCTIONS"]
Tracepoint.update_all("latitude = latitude * 10, longitude = longitude * 10, tile = tile_for_point(latitude * 10, longitude * 10)")
Tracepoint.update_all("latitude = latitude * 10, longitude = longitude * 10, tile = tile_for_point(latitude * 10, longitude * 10)")
- rescue ActiveRecord::StatementInvalid => ex
Tracepoint.find(:all).each do |tp|
tp.latitude = tp.latitude * 10
tp.longitude = tp.longitude * 10
Tracepoint.find(:all).each do |tp|
tp.latitude = tp.latitude * 10
tp.longitude = tp.longitude * 10
class TileNodes < ActiveRecord::Migration
def self.upgrade_table(from_table, to_table, model)
class TileNodes < ActiveRecord::Migration
def self.upgrade_table(from_table, to_table, model)
+ if ENV["USE_DB_FUNCTIONS"]
execute <<-END_SQL
INSERT INTO #{to_table} (id, latitude, longitude, user_id, visible, tags, timestamp, tile)
SELECT id, ROUND(latitude * 10000000), ROUND(longitude * 10000000),
execute <<-END_SQL
INSERT INTO #{to_table} (id, latitude, longitude, user_id, visible, tags, timestamp, tile)
SELECT id, ROUND(latitude * 10000000), ROUND(longitude * 10000000),
CAST(ROUND(longitude * 10000000) AS INTEGER))
FROM #{from_table}
END_SQL
CAST(ROUND(longitude * 10000000) AS INTEGER))
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),
execute <<-END_SQL
INSERT INTO #{to_table} (id, latitude, longitude, user_id, visible, tags, timestamp, tile)
SELECT id, ROUND(latitude * 10000000), ROUND(longitude * 10000000),