@@ -44,7 +44,7 @@ void show_memory_usage()
4444 }
4545}
4646
47- file_info run (options_t const &options, properties_t const & properties)
47+ file_info run (options_t const &options, properties_t * properties)
4848{
4949 auto const files = prepare_input_files (
5050 options.input_files , options.input_format , options.append );
@@ -57,10 +57,15 @@ file_info run(options_t const &options, properties_t const &properties)
5757 middle->start ();
5858
5959 auto output = output_t::create_output (middle->get_query_instance (),
60- thread_pool, options, properties);
60+ thread_pool, options, * properties);
6161
6262 middle->set_requirements (output->get_requirements ());
6363
64+ if (!options.append ) {
65+ properties->init_table ();
66+ }
67+ properties->store ();
68+
6469 osmdata_t osmdata{middle, output, options};
6570
6671 // Processing: In this phase the input file(s) are read and parsed,
@@ -93,8 +98,8 @@ void check_db(options_t const &options)
9398 check_schema (options.output_dbschema );
9499}
95100
96- // This is called in "create" mode to store properties into the database .
97- void store_properties (properties_t *properties, options_t const &options)
101+ // This is called in "create" mode to initialize properties.
102+ void set_up_properties (properties_t *properties, options_t const &options)
98103{
99104 properties->set_bool (" attributes" , options.extra_attributes );
100105
@@ -121,8 +126,6 @@ void store_properties(properties_t *properties, options_t const &options)
121126 std::filesystem::absolute (std::filesystem::path{options.style })
122127 .string ());
123128 }
124-
125- properties->store ();
126129}
127130
128131void store_data_properties (properties_t *properties, file_info const &finfo)
@@ -139,8 +142,6 @@ void store_data_properties(properties_t *properties, file_info const &finfo)
139142 properties->set_string (" replication_" + s, value);
140143 }
141144 }
142-
143- properties->store ();
144145}
145146
146147void check_updatable (properties_t const &properties)
@@ -348,6 +349,7 @@ int main(int argc, char *argv[])
348349
349350 properties_t properties{options.connection_params ,
350351 options.middle_dbschema };
352+
351353 if (options.append ) {
352354 if (!properties.load ()) {
353355 throw std::runtime_error{
@@ -358,7 +360,7 @@ int main(int argc, char *argv[])
358360 check_and_update_properties (&properties, &options);
359361 properties.store ();
360362
361- auto const finfo = run (options, properties);
363+ auto const finfo = run (options, & properties);
362364
363365 if (finfo.last_timestamp .valid ()) {
364366 auto const current_timestamp =
@@ -369,17 +371,17 @@ int main(int argc, char *argv[])
369371 osmium::Timestamp{current_timestamp})) {
370372 properties.set_string (" current_timestamp" ,
371373 finfo.last_timestamp .to_iso ());
372- properties.store ();
373374 }
374375 }
375376 } else {
376- properties.init_table ();
377377 set_option_defaults (&options);
378- store_properties (&properties, options);
379- auto const finfo = run (options, properties);
378+ set_up_properties (&properties, options);
379+ auto const finfo = run (options, & properties);
380380 store_data_properties (&properties, finfo);
381381 }
382382
383+ properties.store ();
384+
383385 show_memory_usage ();
384386 log_info (" osm2pgsql took {} overall." ,
385387 util::human_readable_duration (timer_overall.stop ()));
0 commit comments