53# ifndef DOXYGEN_SHOULD_SKIP_THIS
65 void DBInitializerFromSQL::_connect_(
const std::string& connection_string,
long timeout) {
70 = (connection_string.size() > 4) && (connection_string.compare(0, 4,
"gum ") == 0);
73 if (!agrum_connection) {
74 _connection_.connect(connection_string, timeout);
76 std::size_t deb_index, end_index;
77 const std::string delimiter =
"|";
79 deb_index = connection_string.find(delimiter, 0);
80 if (deb_index == std::string::npos)
82 "could not determine the datasource from string " << connection_string);
83 deb_index += std::size_t(1);
84 end_index = connection_string.find(delimiter, deb_index);
85 if (end_index == std::string::npos)
87 "could not determine the datasource from string " << connection_string);
88 std::string dataSource = connection_string.substr(deb_index, end_index - deb_index);
90 deb_index = connection_string.find(delimiter, end_index + std::size_t(1));
91 if (deb_index == std::string::npos)
93 "could not determine the database login from string " << connection_string);
94 deb_index += std::size_t(1);
95 end_index = connection_string.find(delimiter, deb_index);
96 if (end_index == std::string::npos)
98 "could not determine the database login from string " << connection_string);
99 std::string login = connection_string.substr(deb_index, end_index - deb_index);
101 deb_index = connection_string.find(delimiter, end_index + std::size_t(1));
102 if (deb_index == std::string::npos)
104 "could not determine the database password from string " << connection_string);
105 deb_index += std::size_t(1);
106 end_index = connection_string.find(delimiter, deb_index);
107 if (end_index == std::string::npos)
109 "could not determine the database password from string " << connection_string);
110 std::string password = connection_string.substr(deb_index, end_index - deb_index);
112 _connection_.connect(dataSource, login, password, timeout);
118 const std::string& query,
121 _query_(query), _timeout_(timeout) {
124 const std::string current_locale = std::setlocale(LC_NUMERIC, NULL);
127 _connect_(connection_string, timeout);
130 std::setlocale(LC_NUMERIC, current_locale.c_str());
133 _parser_.useNewQuery(_connection_, _query_);
136 const std::size_t nb_cols = std::size_t(_parser_.nbColumns());
137 for (std::size_t i = 0; i < nb_cols; ++i) {
138 _var_names_.push_back(_parser_.columnName(i));
141 GUM_CONSTRUCTOR(DBInitializerFromSQL);
145 DBInitializerFromSQL::DBInitializerFromSQL(
const std::string& dataSource,
146 const std::string& login,
147 const std::string& password,
148 const std::string& query,
150 DBInitializerFromSQL(
"gum datasource=|" + dataSource +
"|; login=|" + login
151 +
"|; password=|" + password +
"|",
156 DBInitializerFromSQL::DBInitializerFromSQL(
const DBInitializerFromSQL& from) :
157 DBInitializerFromSQL(from._connection_string_, from._query_, from._timeout_) {}
160 DBInitializerFromSQL::DBInitializerFromSQL(DBInitializerFromSQL&& from) :
161 DBInitializerFromSQL(from._connection_string_, from._query_, from._timeout_) {}
164 DBInitializerFromSQL* DBInitializerFromSQL::clone()
const {
165 return new DBInitializerFromSQL(*
this);
169 DBInitializerFromSQL::~DBInitializerFromSQL() { GUM_DESTRUCTOR(DBInitializerFromSQL); }
172 DBInitializerFromSQL& DBInitializerFromSQL::operator=(
const DBInitializerFromSQL& from) {
174 IDBInitializer::operator=(from);
176 const bool connexion_changed = (_connection_string_ != from._connection_string_);
179 _connection_string_ = from._connection_string_;
180 _query_ = from._query_;
181 _timeout_ = from._timeout_;
184 if (connexion_changed) {
185 if (_connection_.connected()) _connection_.disconnect();
186 _connect_(_connection_string_, _timeout_);
190 _parser_.useNewQuery(_connection_, _query_);
194 const std::size_t nb_cols = std::size_t(_parser_.nbColumns());
195 for (std::size_t i = 0; i < nb_cols; ++i) {
196 _var_names_.push_back(_parser_.columnName(i));
204 DBInitializerFromSQL& DBInitializerFromSQL::operator=(DBInitializerFromSQL&& from) {
205 return operator=(from);
The class for initializing DatabaseTable and RawDatabaseTable instances from SQL databases.
The class for initializing DatabaseTable and RawDatabaseTable instances from SQL databases.
DBInitializerFromSQL(const std::string &dataSource, const std::string &login, const std::string &password, const std::string &query, long timeout=0L)
default constructor, especially for postgresql databases
The base class for initializing DatabaseTable and RawDatabaseTable instances from CSV files or SQL da...
#define GUM_ERROR(type, msg)
include the inlined functions if necessary
gum is the global namespace for all aGrUM entities