Skip to content

Commit d6fedbd

Browse files
authored
Merge pull request #2129 from joto/connection-params
Store db connection parameters in a their own class
2 parents 229d832 + abd6554 commit d6fedbd

35 files changed

+251
-257
lines changed

src/command-line-app.cpp

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,29 +32,44 @@ bool command_line_app_t::want_version() const { return count("--version"); }
3232

3333
void command_line_app_t::init_database_options()
3434
{
35-
add_option("-d,--database", m_database_options.db)
35+
add_option_function<std::string>("-d,--database",
36+
[&](std::string const &value) {
37+
m_connection_params.set("dbname",
38+
value);
39+
})
3640
->description("Database name or PostgreSQL conninfo string.")
3741
->type_name("DB")
3842
->group("Database options");
3943

40-
add_option("-U,--user", m_database_options.username)
44+
add_option_function<std::string>("-U,--user",
45+
[&](std::string const &value) {
46+
m_connection_params.set("user", value);
47+
})
4148
->description("Database user.")
4249
->type_name("USERNAME")
4350
->group("Database options");
4451

45-
add_flag_function(
46-
"-W,--password",
47-
[&](int64_t) { m_database_options.password = util::get_password(); })
52+
add_flag_function("-W,--password",
53+
[&](int64_t) {
54+
m_connection_params.set("password",
55+
util::get_password());
56+
})
4857
->description("Force password prompt.")
4958
->group("Database options");
5059

51-
add_option("-H,--host", m_database_options.host)
60+
add_option_function<std::string>("-H,--host",
61+
[&](std::string const &value) {
62+
m_connection_params.set("host", value);
63+
})
5264
->description(
5365
"Database server hostname or unix domain socket location.")
5466
->type_name("HOST")
5567
->group("Database options");
5668

57-
add_option("-P,--port", m_database_options.port)
69+
add_option_function<std::string>("-P,--port",
70+
[&](std::string const &value) {
71+
m_connection_params.set("port", value);
72+
})
5873
->description("Database server port.")
5974
->type_name("PORT")
6075
->group("Database options");

src/command-line-app.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ class command_line_app_t : public CLI::App
2626

2727
bool want_version() const;
2828

29-
database_options_t database_options() const noexcept
29+
connection_params_t connection_params() const noexcept
3030
{
31-
return m_database_options;
31+
return m_connection_params;
3232
}
3333

3434
private:
35-
database_options_t m_database_options;
35+
connection_params_t m_connection_params;
3636

3737
void init_database_options();
3838
void init_logging_options();

src/command-line-parser.cpp

Lines changed: 1 addition & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -32,48 +32,6 @@
3232
#include <stdexcept>
3333
#include <thread> // for number of threads
3434

35-
static bool compare_prefix(std::string const &str,
36-
std::string const &prefix) noexcept
37-
{
38-
return std::strncmp(str.c_str(), prefix.c_str(), prefix.size()) == 0;
39-
}
40-
41-
std::string build_conninfo(database_options_t const &opt)
42-
{
43-
if (compare_prefix(opt.db, "postgresql://") ||
44-
compare_prefix(opt.db, "postgres://")) {
45-
return opt.db;
46-
}
47-
48-
util::string_joiner_t joiner{' '};
49-
joiner.add("fallback_application_name='osm2pgsql'");
50-
51-
if (std::strchr(opt.db.c_str(), '=') != nullptr) {
52-
joiner.add(opt.db);
53-
return joiner();
54-
}
55-
56-
joiner.add("client_encoding='UTF8'");
57-
58-
if (!opt.db.empty()) {
59-
joiner.add(fmt::format("dbname='{}'", opt.db));
60-
}
61-
if (!opt.username.empty()) {
62-
joiner.add(fmt::format("user='{}'", opt.username));
63-
}
64-
if (!opt.password.empty()) {
65-
joiner.add(fmt::format("password='{}'", opt.password));
66-
}
67-
if (!opt.host.empty()) {
68-
joiner.add(fmt::format("host='{}'", opt.host));
69-
}
70-
if (!opt.port.empty()) {
71-
joiner.add(fmt::format("port='{}'", opt.port));
72-
}
73-
74-
return joiner();
75-
}
76-
7735
static osmium::Box parse_bbox_param(std::string const &arg)
7836
{
7937
double minx = NAN;
@@ -730,7 +688,7 @@ options_t parse_command_line(int argc, char *argv[])
730688

731689
check_options(&options);
732690

733-
options.conninfo = build_conninfo(app.database_options());
691+
options.connection_params = app.connection_params();
734692

735693
if (!options.slim) {
736694
options.middle_database_format = 0;

src/db-copy.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,12 @@ void db_deleter_by_type_and_id_t::delete_rows(std::string const &table,
8181
conn->exec(sql.data());
8282
}
8383

84-
db_copy_thread_t::db_copy_thread_t(std::string const &conninfo)
84+
db_copy_thread_t::db_copy_thread_t(connection_params_t const &connection_params)
8585
{
86-
// conninfo is captured by copy here, because we don't know wether the
87-
// reference will still be valid once we get around to running the thread
88-
m_worker = std::thread{thread_t{conninfo, &m_shared}};
86+
// Connection params are captured by copy here, because we don't know
87+
// whether the reference will still be valid once we get around to running
88+
// the thread.
89+
m_worker = std::thread{thread_t{connection_params, &m_shared}};
8990
}
9091

9192
db_copy_thread_t::~db_copy_thread_t() { finish(); }
@@ -119,14 +120,15 @@ void db_copy_thread_t::finish()
119120
}
120121
}
121122

122-
db_copy_thread_t::thread_t::thread_t(std::string conninfo, shared *shared)
123-
: m_conninfo(std::move(conninfo)), m_shared(shared)
123+
db_copy_thread_t::thread_t::thread_t(connection_params_t connection_params,
124+
shared *shared)
125+
: m_connection_params(std::move(connection_params)), m_shared(shared)
124126
{}
125127

126128
void db_copy_thread_t::thread_t::operator()()
127129
{
128130
try {
129-
m_conn = std::make_unique<pg_conn_t>(m_conninfo);
131+
m_conn = std::make_unique<pg_conn_t>(m_connection_params);
130132

131133
// Let commits happen faster by delaying when they actually occur.
132134
m_conn->exec("SET synchronous_commit = off");

src/db-copy.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ struct db_cmd_finish_t : public db_cmd_t
249249
class db_copy_thread_t
250250
{
251251
public:
252-
explicit db_copy_thread_t(std::string const &conninfo);
252+
explicit db_copy_thread_t(connection_params_t const &connection_params);
253253

254254
db_copy_thread_t(db_copy_thread_t const &) = delete;
255255
db_copy_thread_t &operator=(db_copy_thread_t const &) = delete;
@@ -290,7 +290,7 @@ class db_copy_thread_t
290290
class thread_t
291291
{
292292
public:
293-
thread_t(std::string conninfo, shared *shared);
293+
thread_t(connection_params_t connection_params, shared *shared);
294294

295295
void operator()();
296296

@@ -300,7 +300,7 @@ class db_copy_thread_t
300300
void finish_copy();
301301
void delete_rows(db_cmd_copy_t *buffer);
302302

303-
std::string m_conninfo;
303+
connection_params_t m_connection_params;
304304
std::unique_ptr<pg_conn_t> m_conn;
305305

306306
// Target for copy operation currently ongoing.

src/expire-output.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,16 @@
1616

1717
#include <system_error>
1818

19-
std::size_t expire_output_t::output(quadkey_list_t const &tile_list,
20-
std::string const &conninfo) const
19+
std::size_t
20+
expire_output_t::output(quadkey_list_t const &tile_list,
21+
connection_params_t const &connection_params) const
2122
{
2223
std::size_t num = 0;
2324
if (!m_filename.empty()) {
2425
num = output_tiles_to_file(tile_list);
2526
}
2627
if (!m_table.empty()) {
27-
num = output_tiles_to_table(tile_list, conninfo);
28+
num = output_tiles_to_table(tile_list, connection_params);
2829
}
2930
return num;
3031
}
@@ -51,13 +52,13 @@ std::size_t expire_output_t::output_tiles_to_file(
5152
return count;
5253
}
5354

54-
std::size_t
55-
expire_output_t::output_tiles_to_table(quadkey_list_t const &tiles_at_maxzoom,
56-
std::string const &conninfo) const
55+
std::size_t expire_output_t::output_tiles_to_table(
56+
quadkey_list_t const &tiles_at_maxzoom,
57+
connection_params_t const &connection_params) const
5758
{
5859
auto const qn = qualified_name(m_schema, m_table);
5960

60-
pg_conn_t connection{conninfo};
61+
pg_conn_t connection{connection_params};
6162

6263
auto const result = connection.exec("SELECT * FROM {} LIMIT 1", qn);
6364

src/expire-output.hpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <utility>
1919

2020
class pg_conn_t;
21+
class connection_params_t;
2122

2223
/**
2324
* Output for tile expiry.
@@ -52,7 +53,7 @@ class expire_output_t
5253
void set_maxzoom(uint32_t maxzoom) noexcept { m_maxzoom = maxzoom; }
5354

5455
std::size_t output(quadkey_list_t const &tile_list,
55-
std::string const &conninfo) const;
56+
connection_params_t const &connection_params) const;
5657

5758
/**
5859
* Write the list of tiles to a file.
@@ -66,10 +67,11 @@ class expire_output_t
6667
* Write the list of tiles to a database table.
6768
*
6869
* \param tiles_at_maxzoom The list of tiles at maximum zoom level
69-
* \param conninfo database connection info
70+
* \param connection_params Database connection parameters
7071
*/
71-
std::size_t output_tiles_to_table(quadkey_list_t const &tiles_at_maxzoom,
72-
std::string const &conninfo) const;
72+
std::size_t
73+
output_tiles_to_table(quadkey_list_t const &tiles_at_maxzoom,
74+
connection_params_t const &connection_params) const;
7375

7476
/**
7577
* Create table for tiles.

src/flex-table.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,11 +241,11 @@ bool flex_table_t::has_columns_with_expire() const noexcept
241241
[](auto const &column) { return column.has_expire(); });
242242
}
243243

244-
void table_connection_t::connect(std::string const &conninfo)
244+
void table_connection_t::connect(connection_params_t const &connection_params)
245245
{
246246
assert(!m_db_connection);
247247

248-
m_db_connection = std::make_unique<pg_conn_t>(conninfo);
248+
m_db_connection = std::make_unique<pg_conn_t>(connection_params);
249249
m_db_connection->exec("SET synchronous_commit = off");
250250
}
251251

src/flex-table.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ class table_connection_t
259259
{
260260
}
261261

262-
void connect(std::string const &conninfo);
262+
void connect(connection_params_t const &connection_params);
263263

264264
void start(bool append);
265265

0 commit comments

Comments
 (0)