Skip to content

Commit 89f34a8

Browse files
authored
Merge pull request #2175 from joto/gen-append-flag
All generalizers can now differentiate between create and append mode, use this to not run ANALYZE in append mode
2 parents 8d2e4b8 + 3f8fff5 commit 89f34a8

17 files changed

+68
-48
lines changed

src/gen/gen-base.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414

1515
#include <fmt/args.h>
1616

17-
gen_base_t::gen_base_t(pg_conn_t *connection, params_t *params)
18-
: m_connection(connection), m_params(params)
17+
gen_base_t::gen_base_t(pg_conn_t *connection, bool append, params_t *params)
18+
: m_connection(connection), m_params(params), m_append(append)
1919
{
2020
assert(connection);
2121
assert(params);

src/gen/gen-base.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,10 @@ class gen_base_t
6767
}
6868
}
6969

70+
bool append_mode() const noexcept { return m_append; }
71+
7072
protected:
71-
gen_base_t(pg_conn_t *connection, params_t *params);
73+
gen_base_t(pg_conn_t *connection, bool append, params_t *params);
7274

7375
/**
7476
* Check that the 'src_table' and 'dest_table' parameters exist and that
@@ -106,6 +108,7 @@ class gen_base_t
106108
std::vector<util::timer_t> m_timers;
107109
pg_conn_t *m_connection;
108110
params_t *m_params;
111+
bool m_append;
109112
bool m_debug = false;
110113
}; // class gen_base_t
111114

src/gen/gen-create.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,25 @@
1818

1919
std::unique_ptr<gen_base_t> create_generalizer(std::string const &strategy,
2020
pg_conn_t *connection,
21-
params_t *params)
21+
bool append, params_t *params)
2222
{
2323
auto generalizer = [&]() -> std::unique_ptr<gen_base_t> {
2424
if (strategy == "builtup") {
25-
return std::make_unique<gen_tile_builtup_t>(connection, params);
25+
return std::make_unique<gen_tile_builtup_t>(connection, append,
26+
params);
2627
}
2728
if (strategy == "discrete-isolation") {
28-
return std::make_unique<gen_di_t>(connection, params);
29+
return std::make_unique<gen_di_t>(connection, append, params);
2930
}
3031
if (strategy == "raster-union") {
31-
return std::make_unique<gen_tile_raster_union_t>(connection,
32+
return std::make_unique<gen_tile_raster_union_t>(connection, append,
3233
params);
3334
}
3435
if (strategy == "rivers") {
35-
return std::make_unique<gen_rivers_t>(connection, params);
36+
return std::make_unique<gen_rivers_t>(connection, append, params);
3637
}
3738
if (strategy == "vector-union") {
38-
return std::make_unique<gen_tile_vector_union_t>(connection,
39+
return std::make_unique<gen_tile_vector_union_t>(connection, append,
3940
params);
4041
}
4142
throw fmt_error("Unknown generalization strategy '{}'.", strategy);

src/gen/gen-create.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ class pg_conn_t;
2121
/// Instantiate a generalizer for the specified strategy.
2222
std::unique_ptr<gen_base_t> create_generalizer(std::string const &strategy,
2323
pg_conn_t *connection,
24-
params_t *params);
24+
bool append, params_t *params);
2525

2626
#endif // OSM2PGSQL_GEN_CREATE_HPP

src/gen/gen-discrete-isolation.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
#include <algorithm>
1818
#include <vector>
1919

20-
gen_di_t::gen_di_t(pg_conn_t *connection, params_t *params)
21-
: gen_base_t(connection, params), m_timer_get(add_timer("get")),
20+
gen_di_t::gen_di_t(pg_conn_t *connection, bool append, params_t *params)
21+
: gen_base_t(connection, append, params), m_timer_get(add_timer("get")),
2222
m_timer_sort(add_timer("sort")), m_timer_di(add_timer("di")),
2323
m_timer_reorder(add_timer("reorder")), m_timer_write(add_timer("write"))
2424
{
@@ -143,7 +143,9 @@ FROM {src} WHERE {importance_column} > 0
143143
connection().exec("COMMIT");
144144
timer(m_timer_write).stop();
145145

146-
dbexec("ANALYZE {src}");
146+
if (!append_mode()) {
147+
dbexec("ANALYZE {src}");
148+
}
147149

148150
log_gen("Done.");
149151
}

src/gen/gen-discrete-isolation.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
class gen_di_t : public gen_base_t
1818
{
1919
public:
20-
gen_di_t(pg_conn_t *connection, params_t *params);
20+
gen_di_t(pg_conn_t *connection, bool append, params_t *params);
2121

2222
void process() override;
2323

src/gen/gen-rivers.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@
2222
#include <unordered_map>
2323
#include <vector>
2424

25-
gen_rivers_t::gen_rivers_t(pg_conn_t *connection, params_t *params)
26-
: gen_base_t(connection, params), m_timer_area(add_timer("area")),
25+
gen_rivers_t::gen_rivers_t(pg_conn_t *connection, bool append, params_t *params)
26+
: gen_base_t(connection, append, params), m_timer_area(add_timer("area")),
2727
m_timer_prep(add_timer("prep")), m_timer_get(add_timer("get")),
2828
m_timer_sort(add_timer("sort")), m_timer_net(add_timer("net")),
2929
m_timer_remove(add_timer("remove")), m_timer_width(add_timer("width")),
30-
m_timer_write(add_timer("write")),
31-
m_delete_existing(params->has("delete_existing"))
30+
m_timer_write(add_timer("write"))
3231
{
3332
check_src_dest_table_params_exist();
3433

@@ -197,7 +196,11 @@ void gen_rivers_t::process()
197196
dbexec(R"(UPDATE {qualified_src_areas} SET width =)"
198197
R"( (ST_MaximumInscribedCircle("{geom_column}")).radius * 2)"
199198
R"( WHERE width IS NULL)");
200-
dbexec("ANALYZE {qualified_src_areas}");
199+
200+
if (!append_mode()) {
201+
dbexec("ANALYZE {qualified_src_areas}");
202+
}
203+
201204
timer(m_timer_area).stop();
202205

203206
log_gen("Get 'width' from areas onto lines...");
@@ -323,7 +326,7 @@ SELECT "{id_column}", "{width_column}", "{name_column}", "{geom_column}"
323326
}
324327
timer(m_timer_width).stop();
325328

326-
if (m_delete_existing) {
329+
if (append_mode()) {
327330
dbexec("TRUNCATE {dest}");
328331
}
329332

@@ -343,7 +346,9 @@ SELECT "{id_column}", "{width_column}", "{name_column}", "{geom_column}"
343346
connection().exec("COMMIT");
344347
timer(m_timer_write).stop();
345348

346-
dbexec("ANALYZE {dest}");
349+
if (!append_mode()) {
350+
dbexec("ANALYZE {dest}");
351+
}
347352

348353
log_gen("Done.");
349354
}

src/gen/gen-rivers.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
class gen_rivers_t : public gen_base_t
1818
{
1919
public:
20-
gen_rivers_t(pg_conn_t *connection, params_t *params);
20+
gen_rivers_t(pg_conn_t *connection, bool append, params_t *params);
2121

2222
void process() override;
2323

@@ -37,7 +37,6 @@ class gen_rivers_t : public gen_base_t
3737

3838
std::size_t m_num_waterways = 0;
3939
std::size_t m_num_points = 0;
40-
bool m_delete_existing;
4140
};
4241

4342
#endif // OSM2PGSQL_GEN_RIVERS_HPP

src/gen/gen-tile-builtup.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ static std::size_t round_up(std::size_t value, std::size_t multiple) noexcept
2626
return ((value + multiple - 1U) / multiple) * multiple;
2727
}
2828

29-
gen_tile_builtup_t::gen_tile_builtup_t(pg_conn_t *connection, params_t *params)
30-
: gen_tile_t(connection, params), m_timer_draw(add_timer("draw")),
29+
gen_tile_builtup_t::gen_tile_builtup_t(pg_conn_t *connection, bool append,
30+
params_t *params)
31+
: gen_tile_t(connection, append, params), m_timer_draw(add_timer("draw")),
3132
m_timer_simplify(add_timer("simplify")),
3233
m_timer_vectorize(add_timer("vectorize")), m_timer_write(add_timer("write"))
3334
{
@@ -278,5 +279,8 @@ void gen_tile_builtup_t::post()
278279
}
279280
}
280281
}
281-
dbexec("ANALYZE {dest}");
282+
283+
if (!append_mode()) {
284+
dbexec("ANALYZE {dest}");
285+
}
282286
}

src/gen/gen-tile-builtup.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
class gen_tile_builtup_t final : public gen_tile_t
2020
{
2121
public:
22-
gen_tile_builtup_t(pg_conn_t *connection, params_t *params);
22+
gen_tile_builtup_t(pg_conn_t *connection, bool append, params_t *params);
2323

2424
~gen_tile_builtup_t() override = default;
2525

0 commit comments

Comments
 (0)