- prefix = File.join Dir.tmpdir, "006_remove_segments.#{$$}."
-
- cmd = "db/migrate/006_remove_segments_helper"
- src = "#{cmd}.cc"
- if not File.exists? cmd or File.mtime(cmd) < File.mtime(src) then
- system 'c++ -O3 -Wall `mysql_config --cflags --libs` ' +
- "#{src} -o #{cmd}" or fail
+ have_segs = select_value("SELECT count(*) FROM current_segments").to_i != 0
+
+ if have_segs
+ prefix = File.join Dir.tmpdir, "006_remove_segments.#{$$}."
+
+ cmd = "db/migrate/006_remove_segments_helper"
+ src = "#{cmd}.cc"
+ if not File.exists? cmd or File.mtime(cmd) < File.mtime(src) then
+ system 'c++ -O3 -Wall `mysql_config --cflags --libs` ' +
+ "#{src} -o #{cmd}" or fail
+ end
+
+ conn_opts = ActiveRecord::Base.connection.
+ instance_eval { @connection_options }
+ args = conn_opts.map { |arg| arg.to_s } + [prefix]
+ fail "#{cmd} failed" unless system cmd, *args
+
+ tempfiles = ['ways', 'way_nodes', 'way_tags',
+ 'relations', 'relation_members', 'relation_tags'].
+ map { |base| prefix + base }
+ ways, way_nodes, way_tags,
+ relations, relation_members, relation_tags = tempfiles