Various constructors. The default one creates the session in the disconnected state.
The others expect the backend factory object, or the backend name, or the URL-like
- composed connection string. The last constructor creates a session proxy associated
+ composed connection string or the special parameters object containing both the backend
+ and the connection string as well as possibly other connection options.
+ The last constructor creates a session proxy associated
with the session that is available in the given pool and releases it back to the pool
when its lifetime ends. Example:
@@ -198,6 +202,39 @@ class session
See Connections and simple queries for more
examples.
+class connection_parameters
+
+The connection_parameters
class is a simple container for the backend pointer, connection string and any other connection options. It is used together with session
constructor and open()
method.
+
+
+class connection_parameters
+{
+public:
+ connection_parameters();
+ connection_parameters(backend_factory const & factory, std::string const & connectString);
+ connection_parameters(std::string const & backendName, std::string const & connectString);
+ explicit connection_parameters(std::string const & fullConnectString);
+
+ void set_option(const char * name, std::string const & value);
+ bool get_option(const char * name, std::string & value) const
+};
+
+
+The methods of this class are:
+
+ - Default constructor is rarely used as it creates an uninitialized
+ object and the only way to initialize it later is to assign another, valid,
+ connection_parameters object to this one.
+ - The other constructors correspond to the similar constructors of the
+
session
class and specify both the backend, either as a
+ pointer to it or by name, and the connection string.
+ set_option
can be used to set the value of an option with
+ the given name. Currently all option values are strings, so if you need to
+ set a numeric option you need to convert it to a string first. If an option
+ with the given name had been already set before, its old value is
+ overwritten.
+
+
class connection_pool
The connection_pool
class encapsulates the thread-safe pool of connections
diff --git a/src/backends/db2/factory.cpp b/src/backends/db2/factory.cpp
index ac76e2843..a94bb1e5f 100644
--- a/src/backends/db2/factory.cpp
+++ b/src/backends/db2/factory.cpp
@@ -16,9 +16,9 @@ using namespace soci::details;
// concrete factory for ODBC concrete strategies
db2_session_backend * db2_backend_factory::make_session(
- std::string const &connectString) const
+ connection_parameters const & parameters) const
{
- return new db2_session_backend(connectString);
+ return new db2_session_backend(parameters);
}
db2_backend_factory const soci::db2;
diff --git a/src/backends/db2/session.cpp b/src/backends/db2/session.cpp
index 25538b918..2c82213f0 100644
--- a/src/backends/db2/session.cpp
+++ b/src/backends/db2/session.cpp
@@ -8,6 +8,7 @@
#define SOCI_DB2_SOURCE
#include "soci-db2.h"
+#include
#ifdef _MSC_VER
#pragma warning(disable:4355)
@@ -61,6 +62,7 @@ void db2_session_backend::parseKeyVal(std::string const & keyVal) {
}
}
+/* DSN=SAMPLE;Uid=db2inst1;Pwd=db2inst1;AutoCommit=off */
void db2_session_backend::parseConnectString(std::string const & connectString) {
std::string processingString(connectString);
size_t delimiter=processingString.find_first_of(";");
@@ -76,10 +78,10 @@ void db2_session_backend::parseConnectString(std::string const & connectString)
}
db2_session_backend::db2_session_backend(
- std::string const & connectString /* DSN=SAMPLE;Uid=db2inst1;Pwd=db2inst1;AutoCommit=off */) :
+ connection_parameters const & parameters) :
in_transaction(false)
{
- parseConnectString(connectString);
+ parseConnectString(parameters.get_connect_string());
SQLRETURN cliRC = SQL_SUCCESS;
/* Prepare handles */
diff --git a/src/backends/db2/soci-db2.h b/src/backends/db2/soci-db2.h
index 4bcc682b4..70ecb8b97 100644
--- a/src/backends/db2/soci-db2.h
+++ b/src/backends/db2/soci-db2.h
@@ -230,7 +230,7 @@ struct db2_blob_backend : details::blob_backend
struct db2_session_backend : details::session_backend
{
- db2_session_backend(std::string const& connectString);
+ db2_session_backend(connection_parameters const& parameters);
~db2_session_backend();
@@ -262,7 +262,8 @@ struct db2_session_backend : details::session_backend
struct SOCI_DB2_DECL db2_backend_factory : backend_factory
{
db2_backend_factory() {}
- db2_session_backend* make_session(std::string const& connectString) const;
+ db2_session_backend* make_session(
+ connection_parameters const & parameters) const;
};
extern SOCI_DB2_DECL db2_backend_factory const db2;
diff --git a/src/backends/empty/factory.cpp b/src/backends/empty/factory.cpp
index f880cf851..ed744dcb3 100644
--- a/src/backends/empty/factory.cpp
+++ b/src/backends/empty/factory.cpp
@@ -18,9 +18,9 @@ using namespace soci::details;
// concrete factory for Empty concrete strategies
empty_session_backend* empty_backend_factory::make_session(
- std::string const& connectString) const
+ connection_parameters const& parameters) const
{
- return new empty_session_backend(connectString);
+ return new empty_session_backend(parameters);
}
empty_backend_factory const soci::empty;
diff --git a/src/backends/empty/session.cpp b/src/backends/empty/session.cpp
index 3c60dba1e..819547382 100644
--- a/src/backends/empty/session.cpp
+++ b/src/backends/empty/session.cpp
@@ -17,7 +17,7 @@ using namespace soci::details;
empty_session_backend::empty_session_backend(
- std::string const & /* connectString */)
+ connection_parameters const & /* parameters */)
{
// ...
}
diff --git a/src/backends/empty/soci-empty.h b/src/backends/empty/soci-empty.h
index e3d5d5e45..ae63fe47a 100644
--- a/src/backends/empty/soci-empty.h
+++ b/src/backends/empty/soci-empty.h
@@ -154,7 +154,7 @@ struct empty_blob_backend : details::blob_backend
struct empty_session_backend : details::session_backend
{
- empty_session_backend(std::string const& connectString);
+ empty_session_backend(connection_parameters const& parameters);
~empty_session_backend();
@@ -173,8 +173,8 @@ struct empty_session_backend : details::session_backend
struct SOCI_EMPTY_DECL empty_backend_factory : backend_factory
{
- empty_backend_factory() {}
- empty_session_backend* make_session(std::string const& connectString) const;
+ empty_backend_factory() {}
+ empty_session_backend* make_session(connection_parameters const& parameters) const;
};
extern SOCI_EMPTY_DECL empty_backend_factory const empty;
diff --git a/src/backends/firebird/factory.cpp b/src/backends/firebird/factory.cpp
index 7b2c88d2f..cea362b81 100644
--- a/src/backends/firebird/factory.cpp
+++ b/src/backends/firebird/factory.cpp
@@ -12,9 +12,9 @@
using namespace soci;
firebird_session_backend * firebird_backend_factory::make_session(
- std::string const &connectString) const
+ connection_parameters const & parameters) const
{
- return new firebird_session_backend(connectString);
+ return new firebird_session_backend(parameters);
}
firebird_backend_factory const soci::firebird;
diff --git a/src/backends/firebird/session.cpp b/src/backends/firebird/session.cpp
index d8d163a37..6a0b8c78e 100644
--- a/src/backends/firebird/session.cpp
+++ b/src/backends/firebird/session.cpp
@@ -199,12 +199,12 @@ bool getISCConnectParameter(std::map const & m, std::s
} // namespace anonymous
firebird_session_backend::firebird_session_backend(
- std::string const & connectString) : dbhp_(0), trhp_(0)
+ connection_parameters const & parameters) : dbhp_(0), trhp_(0)
, decimals_as_strings_(false)
{
// extract connection parameters
std::map
- params(explodeISCConnectString(connectString));
+ params(explodeISCConnectString(parameters.get_connect_string()));
ISC_STATUS stat[stat_size];
std::string param;
diff --git a/src/backends/firebird/soci-firebird.h b/src/backends/firebird/soci-firebird.h
index 36e704e9a..192727898 100644
--- a/src/backends/firebird/soci-firebird.h
+++ b/src/backends/firebird/soci-firebird.h
@@ -291,7 +291,7 @@ struct firebird_blob_backend : details::blob_backend
struct firebird_session_backend : details::session_backend
{
- firebird_session_backend(std::string const &connectString);
+ firebird_session_backend(connection_parameters const & parameters);
~firebird_session_backend();
@@ -322,9 +322,9 @@ struct firebird_session_backend : details::session_backend
struct firebird_backend_factory : backend_factory
{
- firebird_backend_factory() {}
+ firebird_backend_factory() {}
virtual firebird_session_backend * make_session(
- std::string const &connectString) const;
+ connection_parameters const & parameters) const;
};
extern SOCI_FIREBIRD_DECL firebird_backend_factory const firebird;
diff --git a/src/backends/mysql/factory.cpp b/src/backends/mysql/factory.cpp
index ee8e41720..2940f0ab1 100644
--- a/src/backends/mysql/factory.cpp
+++ b/src/backends/mysql/factory.cpp
@@ -21,9 +21,9 @@ using namespace soci::details;
// concrete factory for MySQL concrete strategies
mysql_session_backend * mysql_backend_factory::make_session(
- std::string const &connectString) const
+ connection_parameters const & parameters) const
{
- return new mysql_session_backend(connectString);
+ return new mysql_session_backend(parameters);
}
mysql_backend_factory const soci::mysql;
diff --git a/src/backends/mysql/session.cpp b/src/backends/mysql/session.cpp
index cb96d7cd1..20b70bca6 100644
--- a/src/backends/mysql/session.cpp
+++ b/src/backends/mysql/session.cpp
@@ -8,6 +8,7 @@
#define SOCI_MYSQL_SOURCE
#include "soci-mysql.h"
+#include
// std
#include
#include
@@ -272,14 +273,14 @@ void parse_connect_string(const string & connectString,
} // namespace anonymous
mysql_session_backend::mysql_session_backend(
- std::string const & connectString)
+ connection_parameters const & parameters)
{
string host, user, password, db, unix_socket, ssl_ca, ssl_cert, ssl_key,
charset;
int port, local_infile;
bool host_p, user_p, password_p, db_p, unix_socket_p, port_p,
ssl_ca_p, ssl_cert_p, ssl_key_p, local_infile_p, charset_p;
- parse_connect_string(connectString, &host, &host_p, &user, &user_p,
+ parse_connect_string(parameters.get_connect_string(), &host, &host_p, &user, &user_p,
&password, &password_p, &db, &db_p,
&unix_socket, &unix_socket_p, &port, &port_p,
&ssl_ca, &ssl_ca_p, &ssl_cert, &ssl_cert_p, &ssl_key, &ssl_key_p,
diff --git a/src/backends/mysql/soci-mysql.h b/src/backends/mysql/soci-mysql.h
index aa79896a2..cd9eeaa81 100644
--- a/src/backends/mysql/soci-mysql.h
+++ b/src/backends/mysql/soci-mysql.h
@@ -228,7 +228,7 @@ struct mysql_blob_backend : details::blob_backend
struct mysql_session_backend : details::session_backend
{
- mysql_session_backend(std::string const &connectString);
+ mysql_session_backend(connection_parameters const & parameters);
~mysql_session_backend();
@@ -250,9 +250,9 @@ struct mysql_session_backend : details::session_backend
struct mysql_backend_factory : backend_factory
{
- mysql_backend_factory() {}
+ mysql_backend_factory() {}
virtual mysql_session_backend * make_session(
- std::string const &connectString) const;
+ connection_parameters const & parameters) const;
};
extern SOCI_MYSQL_DECL mysql_backend_factory const mysql;
diff --git a/src/backends/odbc/factory.cpp b/src/backends/odbc/factory.cpp
index 97189d415..27f0d04d8 100644
--- a/src/backends/odbc/factory.cpp
+++ b/src/backends/odbc/factory.cpp
@@ -15,9 +15,9 @@ using namespace soci::details;
// concrete factory for ODBC concrete strategies
odbc_session_backend * odbc_backend_factory::make_session(
- std::string const &connectString) const
+ connection_parameters const & parameters) const
{
- return new odbc_session_backend(connectString);
+ return new odbc_session_backend(parameters);
}
odbc_backend_factory const soci::odbc;
diff --git a/src/backends/odbc/session.cpp b/src/backends/odbc/session.cpp
index cf95ee4a6..4f51777fe 100644
--- a/src/backends/odbc/session.cpp
+++ b/src/backends/odbc/session.cpp
@@ -9,10 +9,15 @@
#include "soci-odbc.h"
#include "session.h"
+#include
+
using namespace soci;
using namespace soci::details;
-odbc_session_backend::odbc_session_backend(std::string const & connectString)
+char const * soci::odbc_option_driver_complete = "odbc.driver_complete";
+
+odbc_session_backend::odbc_session_backend(
+ connection_parameters const & parameters)
: henv_(0), hdbc_(0), product_(prod_uninitialized)
{
SQLRETURN rc;
@@ -43,11 +48,36 @@ odbc_session_backend::odbc_session_backend(std::string const & connectString)
SQLCHAR outConnString[1024];
SQLSMALLINT strLength;
- rc = SQLDriverConnect(hdbc_, NULL, // windows handle
+ // Prompt the user for any missing information (typically UID/PWD) in the
+ // connection string by default but allow overriding this using "prompt"
+ // option.
+ SQLHWND hwnd_for_prompt = NULL;
+ unsigned completion = SQL_DRIVER_COMPLETE;
+ std::string completionString;
+ if (parameters.get_option(odbc_option_driver_complete, completionString))
+ {
+ // The value of the option is supposed to be just the integer value of
+ // one of SQL_DRIVER_XXX constants but don't check for the exact value in
+ // case more of them are added in the future, the ODBC driver will return
+ // an error if we pass it an invalid value anyhow.
+ if (std::sscanf(completionString.c_str(), "%u", &completion) != 1)
+ {
+ throw soci_error("Invalid non-numeric driver completion option value \"" +
+ completionString + "\".");
+ }
+ }
+
+#ifdef _WIN32
+ if (completion != SQL_DRIVER_NOPROMPT)
+ hwnd_for_prompt = ::GetDesktopWindow();
+#endif // _WIN32
+
+ std::string const & connectString = parameters.get_connect_string();
+ rc = SQLDriverConnect(hdbc_, hwnd_for_prompt,
(SQLCHAR *)connectString.c_str(),
(SQLSMALLINT)connectString.size(),
- outConnString, 1024,
- &strLength, SQL_DRIVER_NOPROMPT);
+ outConnString, 1024, &strLength,
+ static_cast(completion));
if (is_odbc_error(rc))
{
diff --git a/src/backends/odbc/soci-odbc.h b/src/backends/odbc/soci-odbc.h
index 2a47c5159..d97629b70 100644
--- a/src/backends/odbc/soci-odbc.h
+++ b/src/backends/odbc/soci-odbc.h
@@ -40,6 +40,12 @@ namespace details
std::size_t const odbc_max_buffer_length = 100 * 1024 * 1024;
}
+// Option allowing to specify the "driver completion" parameter of
+// SQLDriverConnect(). Its possible values are the same as the allowed values
+// for this parameter in the official ODBC, i.e. one of SQL_DRIVER_XXX (in
+// string form as all options are strings currently).
+extern SOCI_ODBC_DECL char const * odbc_option_driver_complete;
+
struct odbc_statement_backend;
// Helper of into and use backends.
@@ -259,7 +265,7 @@ struct odbc_blob_backend : details::blob_backend
struct odbc_session_backend : details::session_backend
{
- odbc_session_backend(std::string const &connectString);
+ odbc_session_backend(connection_parameters const & parameters);
~odbc_session_backend();
@@ -403,9 +409,9 @@ inline bool odbc_standard_type_backend_base::use_string_for_bigint() const
struct odbc_backend_factory : backend_factory
{
- odbc_backend_factory() {}
+ odbc_backend_factory() {}
virtual odbc_session_backend * make_session(
- std::string const &connectString) const;
+ connection_parameters const & parameters) const;
};
extern SOCI_ODBC_DECL odbc_backend_factory const odbc;
diff --git a/src/backends/oracle/factory.cpp b/src/backends/oracle/factory.cpp
index 7e76bb0ff..7c8098967 100644
--- a/src/backends/oracle/factory.cpp
+++ b/src/backends/oracle/factory.cpp
@@ -7,6 +7,7 @@
#define SOCI_ORACLE_SOURCE
#include "soci-oracle.h"
+#include
#include
#include
#include
@@ -106,13 +107,13 @@ void chop_connect_string(std::string const & connectString,
// concrete factory for Empty concrete strategies
oracle_session_backend * oracle_backend_factory::make_session(
- std::string const &connectString) const
+ connection_parameters const & parameters) const
{
std::string serviceName, userName, password;
int mode;
bool decimals_as_strings;
- chop_connect_string(connectString, serviceName, userName, password,
+ chop_connect_string(parameters.get_connect_string(), serviceName, userName, password,
mode, decimals_as_strings);
return new oracle_session_backend(serviceName, userName, password,
diff --git a/src/backends/oracle/soci-oracle.h b/src/backends/oracle/soci-oracle.h
index d59d6fe0e..c6ffb60a1 100644
--- a/src/backends/oracle/soci-oracle.h
+++ b/src/backends/oracle/soci-oracle.h
@@ -274,9 +274,9 @@ struct oracle_session_backend : details::session_backend
struct oracle_backend_factory : backend_factory
{
- oracle_backend_factory() {}
+ oracle_backend_factory() {}
virtual oracle_session_backend * make_session(
- std::string const &connectString) const;
+ connection_parameters const & parameters) const;
};
extern SOCI_ORACLE_DECL oracle_backend_factory const oracle;
diff --git a/src/backends/postgresql/factory.cpp b/src/backends/postgresql/factory.cpp
index b80d5bcf6..fe845985a 100644
--- a/src/backends/postgresql/factory.cpp
+++ b/src/backends/postgresql/factory.cpp
@@ -23,9 +23,9 @@ using namespace soci::details;
// concrete factory for Empty concrete strategies
postgresql_session_backend * postgresql_backend_factory::make_session(
- std::string const & connectString) const
+ connection_parameters const & parameters) const
{
- return new postgresql_session_backend(connectString);
+ return new postgresql_session_backend(parameters);
}
postgresql_backend_factory const soci::postgresql;
diff --git a/src/backends/postgresql/session.cpp b/src/backends/postgresql/session.cpp
index e66fd0b23..c56a4b0b5 100644
--- a/src/backends/postgresql/session.cpp
+++ b/src/backends/postgresql/session.cpp
@@ -8,6 +8,7 @@
#define SOCI_POSTGRESQL_SOURCE
#include "soci-postgresql.h"
#include "error.h"
+#include
#include // libpq
#include
#include
@@ -27,10 +28,11 @@ using namespace soci;
using namespace soci::details;
using namespace soci::details::postgresql;
-postgresql_session_backend::postgresql_session_backend(std::string const& connectString)
+postgresql_session_backend::postgresql_session_backend(
+ connection_parameters const& parameters)
: statementCount_(0)
{
- PGconn* conn = PQconnectdb(connectString.c_str());
+ PGconn* conn = PQconnectdb(parameters.get_connect_string().c_str());
if (0 == conn || CONNECTION_OK != PQstatus(conn))
{
std::string msg = "Cannot establish connection to the database.";
diff --git a/src/backends/postgresql/soci-postgresql.h b/src/backends/postgresql/soci-postgresql.h
index 1508f9b29..14add2189 100644
--- a/src/backends/postgresql/soci-postgresql.h
+++ b/src/backends/postgresql/soci-postgresql.h
@@ -229,7 +229,7 @@ struct postgresql_blob_backend : details::blob_backend
struct postgresql_session_backend : details::session_backend
{
- postgresql_session_backend(std::string const & connectString);
+ postgresql_session_backend(connection_parameters const & parameters);
~postgresql_session_backend();
@@ -258,7 +258,7 @@ struct postgresql_backend_factory : backend_factory
{
postgresql_backend_factory() {}
virtual postgresql_session_backend * make_session(
- std::string const & connectString) const;
+ connection_parameters const & parameters) const;
};
extern SOCI_POSTGRESQL_DECL postgresql_backend_factory const postgresql;
diff --git a/src/backends/sqlite3/factory.cpp b/src/backends/sqlite3/factory.cpp
index 734f12d3b..02691f597 100644
--- a/src/backends/sqlite3/factory.cpp
+++ b/src/backends/sqlite3/factory.cpp
@@ -18,9 +18,9 @@ using namespace soci::details;
// concrete factory for Empty concrete strategies
sqlite3_session_backend * sqlite3_backend_factory::make_session(
- std::string const &connectString) const
+ connection_parameters const & parameters) const
{
- return new sqlite3_session_backend(connectString);
+ return new sqlite3_session_backend(parameters);
}
sqlite3_backend_factory const soci::sqlite3;
diff --git a/src/backends/sqlite3/session.cpp b/src/backends/sqlite3/session.cpp
index 4e9487cce..84c19901c 100644
--- a/src/backends/sqlite3/session.cpp
+++ b/src/backends/sqlite3/session.cpp
@@ -8,6 +8,8 @@
#include "soci-sqlite3.h"
+#include
+
#include
#include
@@ -40,10 +42,11 @@ void execude_hardcoded(sqlite_api::sqlite3* conn, char const* const query, char
sqlite3_session_backend::sqlite3_session_backend(
- std::string const & connectString)
+ connection_parameters const & parameters)
{
int timeout = 0;
std::string synchronous;
+ std::string const & connectString = parameters.get_connect_string();
std::string dbname(connectString);
std::stringstream ssconn(connectString);
while (!ssconn.eof() && ssconn.str().find('=') != std::string::npos)
diff --git a/src/backends/sqlite3/soci-sqlite3.h b/src/backends/sqlite3/soci-sqlite3.h
index 3f9d2fe4a..87d2d9803 100644
--- a/src/backends/sqlite3/soci-sqlite3.h
+++ b/src/backends/sqlite3/soci-sqlite3.h
@@ -234,7 +234,7 @@ struct sqlite3_blob_backend : details::blob_backend
struct sqlite3_session_backend : details::session_backend
{
- sqlite3_session_backend(std::string const &connectString);
+ sqlite3_session_backend(connection_parameters const & parameters);
~sqlite3_session_backend();
@@ -255,9 +255,9 @@ struct sqlite3_session_backend : details::session_backend
struct sqlite3_backend_factory : backend_factory
{
- sqlite3_backend_factory() {}
+ sqlite3_backend_factory() {}
virtual sqlite3_session_backend * make_session(
- std::string const &connectString) const;
+ connection_parameters const & parameters) const;
};
extern SOCI_SQLITE3_DECL sqlite3_backend_factory const sqlite3;
diff --git a/src/core/connection-parameters.cpp b/src/core/connection-parameters.cpp
new file mode 100644
index 000000000..30d3e2fa4
--- /dev/null
+++ b/src/core/connection-parameters.cpp
@@ -0,0 +1,62 @@
+//
+// Copyright (C) 2013 Vadim Zeitlin
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#define SOCI_SOURCE
+#include "connection-parameters.h"
+#include "soci-backend.h"
+#include "backend-loader.h"
+
+using namespace soci;
+
+namespace // anonymous
+{
+
+void parseConnectString(std::string const & connectString,
+ std::string & backendName,
+ std::string & connectionParameters)
+{
+ std::string const protocolSeparator = "://";
+
+ std::string::size_type const p = connectString.find(protocolSeparator);
+ if (p == std::string::npos)
+ {
+ throw soci_error("No backend name found in " + connectString);
+ }
+
+ backendName = connectString.substr(0, p);
+ connectionParameters = connectString.substr(p + protocolSeparator.size());
+}
+
+} // namespace anonymous
+
+connection_parameters::connection_parameters()
+ : factory_(NULL)
+{
+}
+
+connection_parameters::connection_parameters(backend_factory const & factory,
+ std::string const & connectString)
+ : factory_(&factory), connectString_(connectString)
+{
+}
+
+connection_parameters::connection_parameters(std::string const & backendName,
+ std::string const & connectString)
+ : factory_(&dynamic_backends::get(backendName)), connectString_(connectString)
+{
+}
+
+connection_parameters::connection_parameters(std::string const & fullConnectString)
+{
+ std::string backendName;
+ std::string connectString;
+
+ parseConnectString(fullConnectString, backendName, connectString);
+
+ factory_ = &dynamic_backends::get(backendName);
+ connectString_ = connectString;
+}
diff --git a/src/core/connection-parameters.h b/src/core/connection-parameters.h
new file mode 100644
index 000000000..86483a33a
--- /dev/null
+++ b/src/core/connection-parameters.h
@@ -0,0 +1,68 @@
+//
+// Copyright (C) 2013 Vadim Zeitlin
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef SOCI_CONNECTION_PARAMETERS_H_INCLUDED
+#define SOCI_CONNECTION_PARAMETERS_H_INCLUDED
+
+#include "soci-config.h"
+
+#include