35 #include "vtkMySQLDatabase.h"
36 #include "vtkSQLQuery.h"
37 #include "vtkStdString.h"
38 #include "vtkVariant.h"
46 std::pair< bool, vtkMySQLDatabase * >
ConnectToServer(std::string ServerName, std::string login,
49 std::pair< bool, vtkMySQLDatabase * > ConnectionServer;
50 vtkMySQLDatabase * ServerConnector = vtkMySQLDatabase::New();
51 ServerConnector->SetHostName( ServerName.c_str() );
52 ServerConnector->SetUser( login.c_str() );
53 ServerConnector->SetPassword( Password.c_str() );
55 if ( !ServerConnector->Open() )
57 std::cout <<
"Could not connect to the server." << std::endl;
58 std::cout <<
"Debug: In " << __FILE__ <<
", line " << __LINE__;
59 std::cout << std::endl;
60 ConnectionServer.first =
false;
61 return ConnectionServer;
63 ConnectionServer.first =
true;
64 ConnectionServer.second = ServerConnector;
65 return ConnectionServer;
71 std::pair< bool, vtkMySQLDatabase * >
ConnectToDatabase(std::string ServerName, std::string login,
72 std::string Password, std::string DBName)
74 std::pair< bool, vtkMySQLDatabase * > ConnectionDatabase(
false, (vtkMySQLDatabase *)0);
75 vtkMySQLDatabase * DatabaseConnector = vtkMySQLDatabase::New();
76 DatabaseConnector->SetHostName( ServerName.c_str() );
77 DatabaseConnector->SetUser( login.c_str() );
78 DatabaseConnector->SetPassword( Password.c_str() );
79 DatabaseConnector->SetDatabaseName( DBName.c_str() );
80 if ( !DatabaseConnector->Open() )
82 itkGenericExceptionMacro(
83 <<
"Could not open database."
84 <<
"DB will not be created.");
85 std::cout <<
"Could not connect to the database." << std::endl;
86 std::cout <<
"Debug: In " << __FILE__ <<
", line " << __LINE__;
87 std::cout << std::endl;
88 return ConnectionDatabase;
91 ConnectionDatabase.first =
true;
92 ConnectionDatabase.second = DatabaseConnector;
94 return ConnectionDatabase;
101 std::string ServerName, std::string login,
102 std::string Password, std::string DBName)
105 ServerName, login, Password, DBName);
107 if ( !ConnectionDatabase.first )
109 std::cout <<
"No connection open for QGoOpenOrCreateImgSession" << std::endl;
110 std::cout <<
"Debug: In " << __FILE__ <<
", line " << __LINE__;
111 std::cout << std::endl;
114 return ConnectionDatabase.second;
121 vtkMySQLDatabase *DatabaseConnector)
123 if ( DatabaseConnector != NULL )
125 DatabaseConnector->Close();
126 DatabaseConnector->Delete();
135 void ExecuteQuery(vtkMySQLDatabase *iDatabaseConnector, std::string iQuery)
137 vtkSQLQuery *query = iDatabaseConnector->GetQueryInstance();
139 query->SetQuery( iQuery.c_str() );
140 if ( !query->Execute() )
142 itkGenericExceptionMacro(
143 <<
"Execute query failed"
144 << query->GetLastErrorText() );
145 iDatabaseConnector->Close();
146 iDatabaseConnector->Delete();
156 std::vector< std::string > result;
157 vtkSQLQuery * query = ServerConnector->GetQueryInstance();
158 query->SetQuery(
"Show Databases;");
159 if ( !query->Execute() )
161 itkGenericExceptionMacro(
162 <<
"Show Databases query failed."
163 << query->GetLastErrorText() );
172 while ( query->NextRow() )
174 result.push_back( query->DataValue(0).ToString() );
184 std::vector< std::string >
ListTables(vtkMySQLDatabase *DatabaseConnector)
186 std::vector< std::string > result;
187 vtkSQLQuery * query = DatabaseConnector->GetQueryInstance();
188 query->SetQuery(
"Show tables;");
189 if ( !query->Execute() )
191 itkGenericExceptionMacro(
192 <<
"Show tables query failed"
193 << query->GetLastErrorText() );
194 DatabaseConnector->Close();
195 DatabaseConnector->Delete();
204 while ( query->NextRow() )
206 result.push_back( query->DataValue(0).ToString() );
216 void DropDatabase(vtkMySQLDatabase *ServerConnector, std::string DBName)
218 vtkSQLQuery * query = ServerConnector->GetQueryInstance();
219 std::ostringstream insertQuery;
221 insertQuery <<
"DROP DATABASE " << DBName;
222 query->SetQuery( insertQuery.str().c_str() );
223 if ( !query->Execute() )
225 itkGenericExceptionMacro(
226 <<
"Drop query failed"
227 << query->GetLastErrorText() );
237 void DropTable(vtkMySQLDatabase *DatabaseConnector, std::string TableName)
239 vtkSQLQuery * query = DatabaseConnector->GetQueryInstance();
240 std::ostringstream insertQuery;
242 insertQuery <<
"DROP TABLE " << TableName;
243 query->SetQuery( insertQuery.str().c_str() );
244 if ( !query->Execute() )
246 itkGenericExceptionMacro(
247 <<
"Drop query failed"
248 << query->GetLastErrorText() );
259 std::string TableName, std::string field, std::string value)
261 std::stringstream querystream;
263 querystream <<
"DELETE FROM ";
264 querystream << TableName;
265 querystream <<
" WHERE ";
266 querystream << field;
267 querystream <<
" = '";
268 querystream << value;
277 void DeleteRows(vtkMySQLDatabase *DatabaseConnector, std::string TableName,
278 std::string field, std::vector< std::string > VectorValues)
280 std::stringstream querystream;
282 querystream <<
"DELETE FROM ";
283 querystream << TableName;
284 querystream <<
" WHERE (";
286 for ( i = 0; i < VectorValues.size() - 1; i++ )
288 querystream << field;
289 querystream <<
" = '";
290 querystream << VectorValues[i];
291 querystream <<
"' OR ";
293 querystream << field;
294 querystream <<
" = '";
295 querystream << VectorValues[i];
296 querystream <<
"');";
306 std::vector< std::string > list;
308 std::string myString(DBName);
309 std::vector< std::string >::iterator start = list.begin();
310 std::vector< std::string >::iterator end = list.end();
311 while ( start != end )
313 if ( ( *start ) == myString )
326 std::string TableName)
328 std::vector< std::string > list;
330 std::string myString(TableName);
331 std::vector< std::string >::iterator start = list.begin();
332 std::vector< std::string >::iterator end = list.end();
333 while ( start != end )
335 if ( ( *start ) == myString )
348 std::string iColumnName, std::string iNewValue, std::string iField,
349 std::vector< unsigned int > iVectIDs)
351 std::stringstream querystream;
353 querystream <<
"UPDATE ";
354 querystream << iTableName;
355 querystream <<
" SET ";
356 querystream << iColumnName;
357 querystream <<
" = '";
358 querystream << iNewValue;
359 querystream <<
"' WHERE ";
360 querystream << GetConditions< unsigned int >(iField, iVectIDs,
"OR");
368 std::string TableName, std::string field, std::string newValue,
369 std::string ColumnName, std::string value)
372 std::stringstream querystream;
374 querystream <<
"UPDATE ";
375 querystream << TableName;
376 querystream <<
" SET ";
377 querystream << field;
378 querystream <<
" = '";
379 querystream << newValue;
380 querystream <<
"' WHERE ";
381 querystream << ColumnName;
382 querystream <<
" = '";
383 querystream << value;
393 std::string iTableName, std::string ifield,
394 std::string inewValue, std::vector< unsigned int > iVectIDs)
396 std::stringstream querystream;
398 querystream <<
"UPDATE ";
399 querystream << iTableName;
400 querystream <<
" SET ";
401 querystream << ifield;
402 querystream <<
" = '";
403 querystream << inewValue;
404 querystream <<
" WHERE (";
406 for ( i = 0; i < iVectIDs.size() - 1; i++ )
408 querystream << ifield;
409 querystream <<
" = '";
410 querystream << iVectIDs[i];
411 querystream <<
"' OR ";
413 querystream << ifield;
414 querystream <<
" = '";
415 querystream << iVectIDs[i];
416 querystream <<
"');";
425 vtkMySQLDatabase *DatabaseConnector)
427 std::vector< std::string > result;
429 vtkSQLQuery * query = DatabaseConnector->GetQueryInstance();
430 std::stringstream querystream;
431 querystream <<
"DESCRIBE ";
432 querystream << TableName;
435 query->SetQuery( querystream.str().c_str() );
436 if ( !query->Execute() )
438 itkGenericExceptionMacro(
439 <<
"describe table query failed"
440 << query->GetLastErrorText() );
441 DatabaseConnector->Close();
442 DatabaseConnector->Delete();
446 while ( query->NextRow() )
448 result.push_back( query->DataValue(0).ToString() );
bool CloseDatabaseConnection(vtkMySQLDatabase *DatabaseConnector)
return true if the connection has been closed, false if the connection was already closed ...
bool DoesDatabaseExist(vtkMySQLDatabase *ServerConnector, std::string DBName)
vtkMySQLDatabase * OpenDatabaseConnection(std::string ServerName, std::string login, std::string Password, std::string DBName)
std::vector< std::string > ListDatabases(vtkMySQLDatabase *ServerConnector)
void DropDatabase(vtkMySQLDatabase *ServerConnector, std::string DBName)
void UpdateValueInDB(vtkMySQLDatabase *DatabaseConnector, std::string iTableName, std::string iColumnName, std::string iNewValue, std::string iField, std::vector< unsigned int > iVectIDs)
std::vector< std::string > GetFieldNames(std::string TableName, vtkMySQLDatabase *DatabaseConnector)
void DeleteRows(vtkMySQLDatabase *DatabaseConnector, std::string TableName, std::string field, std::vector< std::string > VectorValues)
void ExecuteQuery(vtkMySQLDatabase *iDatabaseConnector, std::string iQuery)
void DropTable(vtkMySQLDatabase *DatabaseConnector, std::string TableName)
std::pair< bool, vtkMySQLDatabase * > ConnectToDatabase(std::string ServerName, std::string login, std::string Password, std::string DBName)
bool DoesTableExist(vtkMySQLDatabase *DatabaseConnector, std::string TableName)
std::pair< bool, vtkMySQLDatabase * > ConnectToServer(std::string ServerName, std::string login, std::string Password)
std::vector< std::string > ListTables(vtkMySQLDatabase *DatabaseConnector)
void DeleteRow(vtkMySQLDatabase *DatabaseConnector, std::string TableName, std::string field, std::string value)