13 #undef CATCH // avoids a warning before redefining 14 #define CATCH(returnValue) catch (wxDatabaseException& e) {\ 15 errorCode = e.GetErrorCode();\ 16 wxLogError ( "[%d] %s", errorCode, e.GetErrorMessage() );\ 28 wxASSERT_MSG (
slaveDB ==
nullptr,
"There can be only one instance of yatishDBmysql.");
32 if (
slaveDB->GetTypeName() !=
"MYSQL")
33 throw ( wxDatabaseException (-4, _(
"Slave DB must be MySQL") ) );
35 throw ( wxDatabaseException (-5, _(
"Yatish tables not created (MySQL)") ) );
37 catch (wxDatabaseException& e) {
38 wxLogError (
"[%d] %s", e.GetErrorCode(), e.GetErrorMessage() );
53 if (
slaveDB->TableExists (
"yatish_client") )
54 slaveDB->RunQuery (
"DELETE FROM yatish_client;");
56 slaveDB->RunQuery (
"CREATE TABLE yatish_client (" 57 "id INT NOT NULL AUTO_INCREMENT," 58 "name VARCHAR (20) NOT NULL UNIQUE," 59 "PRIMARY KEY (id));");
60 if (
slaveDB->TableExists (
"yatish_project") )
61 slaveDB->RunQuery (
"DELETE FROM yatish_project;");
63 slaveDB->RunQuery (
"CREATE TABLE yatish_project (" 64 "id INT NOT NULL AUTO_INCREMENT," 65 "name VARCHAR (20) NOT NULL UNIQUE," 66 "client_id INT NOT NULL," 68 "FOREIGN KEY (client_id) REFERENCES yatish_client (id)" 69 "ON DELETE CASCADE ON UPDATE CASCADE);");
70 if (
slaveDB->TableExists (
"yatish_task") )
71 slaveDB->RunQuery (
"DELETE FROM yatish_task;");
73 slaveDB->RunQuery (
"CREATE TABLE yatish_task (" 74 "id INT NOT NULL AUTO_INCREMENT," 75 "name VARCHAR (20) NOT NULL UNIQUE," 76 "PRIMARY KEY (id));");
77 if (
slaveDB->TableExists (
"yatish_tool") )
78 slaveDB->RunQuery (
"DELETE FROM yatish_tool;");
80 slaveDB->RunQuery (
"CREATE TABLE yatish_tool (" 81 "id INT NOT NULL AUTO_INCREMENT," 82 "name VARCHAR (20) NOT NULL UNIQUE," 83 "PRIMARY KEY (id));");
84 if (
slaveDB->TableExists (
"yatish_activity") )
85 slaveDB->RunQuery (
"DELETE FROM yatish_activity;");
87 slaveDB->RunQuery (
"CREATE TABLE yatish_activity (" 88 "id INT NOT NULL AUTO_INCREMENT," 89 "project_id INT NOT NULL," 90 "task_id INT NOT NULL," 91 "tool_id INT NOT NULL," 93 "UNIQUE (project_id,task_id,tool_id)," 94 "FOREIGN KEY (project_id) REFERENCES yatish_project (id)" 95 "ON DELETE CASCADE ON UPDATE CASCADE," 96 "FOREIGN KEY (task_id) REFERENCES yatish_task (id)" 97 "ON DELETE CASCADE ON UPDATE CASCADE," 98 "FOREIGN KEY (tool_id) REFERENCES yatish_tool (id)" 99 "ON DELETE CASCADE ON UPDATE CASCADE);");
100 if (
slaveDB->TableExists (
"yatish_timeslot") )
101 slaveDB->RunQuery (
"DELETE FROM yatish_timeslot;");
103 slaveDB->RunQuery (
"CREATE TABLE yatish_timeslot (" 104 "id INT NOT NULL AUTO_INCREMENT," 107 "activity_id INT NOT NULL," 109 "FOREIGN KEY (activity_id) REFERENCES yatish_activity (id)" 110 "ON DELETE CASCADE ON UPDATE CASCADE);");
165 slaveDB->RunQuery (
"DELETE FROM yatish_client;");
166 slaveDB->RunQuery (
"DELETE FROM yatish_project;");
167 slaveDB->RunQuery (
"DELETE FROM yatish_task;");
168 slaveDB->RunQuery (
"DELETE FROM yatish_tool;");
169 slaveDB->RunQuery (
"DELETE FROM yatish_activity;");
170 slaveDB->RunQuery (
"DELETE FROM yatish_timeslot;");
184 masterDB->RunQuery (
"DELETE FROM yatish_client;");
185 masterDB->RunQuery (
"DELETE FROM yatish_project;");
186 masterDB->RunQuery (
"DELETE FROM yatish_task;");
187 masterDB->RunQuery (
"DELETE FROM yatish_tool;");
188 masterDB->RunQuery (
"DELETE FROM yatish_activity;");
189 masterDB->RunQuery (
"DELETE FROM yatish_timeslot;");
203 masterDB->RunQuery (
"UPDATE yatish_client SET sync='I';");
204 masterDB->RunQuery (
"UPDATE yatish_project SET sync='I';");
205 masterDB->RunQuery (
"UPDATE yatish_task SET sync='I';");
206 masterDB->RunQuery (
"UPDATE yatish_tool SET sync='I';");
207 masterDB->RunQuery (
"UPDATE yatish_activity SET sync='I';");
208 masterDB->RunQuery (
"UPDATE yatish_timeslot SET sync='I';");
225 for (
int i = 0; i < 6; i++) {
228 sql.Printf(
"SELECT id FROM yatish_%s WHERE sync = 'D';", n);
229 wxDatabaseResultSet * results =
masterDB->RunQueryWithResults (sql);
230 while ( results->Next() ) {
231 id = results->GetResultLong (1);
232 sql.Printf (
"DELETE FROM yatish_%s WHERE id = %ld;", n,
id);
256 for (
int i = 0; i < 3; i++) {
259 sql.Printf(
"SELECT id,name FROM yatish_%s WHERE sync = 'I';", n);
260 wxDatabaseResultSet * results =
masterDB->RunQueryWithResults (sql);
261 while ( results->Next() ) {
262 id = results->GetResultLong (1);
263 name = results->GetResultString (2);
264 sql.Printf (
"INSERT INTO yatish_%s (id,name) VALUES (%ld,'%s');", n,
id, name);
266 sql.Printf (
"UPDATE yatish_%s SET sync='S' WHERE id = %ld;", n,
id);
289 for (
int i = 0; i < 3; i++) {
292 sql.Printf(
"SELECT id,name FROM yatish_%s;", n);
293 wxDatabaseResultSet * results =
slaveDB->RunQueryWithResults (sql);
294 while ( results->Next() ) {
295 id = results->GetResultLong (1);
296 name = results->GetResultString (2);
297 sql.Printf (
"INSERT INTO yatish_%s (id,name,sync) VALUES (%ld,'%s','S');", n,
id, name);
300 slaveDB->CloseResultSet (results);
321 for (
int i = 0; i < 3; i++) {
324 sql.Printf(
"SELECT id,name FROM yatish_%s WHERE sync = 'U';", n);
325 wxDatabaseResultSet * results =
masterDB->RunQueryWithResults (sql);
326 while ( results->Next() ) {
327 id = results->GetResultLong (1);
328 name = results->GetResultString (2);
329 sql.Printf (
"UPDATE yatish_%s SET name='%s' WHERE id = %ld;", n, name,
id);
331 sql.Printf (
"UPDATE yatish_%s SET sync='S' WHERE id = %ld;", n,
id);
351 sql.Printf(
"SELECT id,name,client_id FROM yatish_project WHERE sync = 'I';");
352 wxDatabaseResultSet * results =
masterDB->RunQueryWithResults (sql);
353 while ( results->Next() ) {
354 id = results->GetResultLong (1);
355 name = results->GetResultString (2);
356 client_id = results->GetResultLong (3);
357 sql.Printf (
"INSERT INTO yatish_project (id,name,client_id)" 358 " VALUES (%ld,'%s',%ld);",
id, name, client_id);
360 sql.Printf (
"UPDATE yatish_project SET sync='S' WHERE id = %ld;",
id);
379 sql.Printf(
"SELECT id,name,client_id FROM yatish_project;");
380 wxDatabaseResultSet * results =
slaveDB->RunQueryWithResults (sql);
381 while ( results->Next() ) {
382 id = results->GetResultLong (1);
383 name = results->GetResultString (2);
384 client_id = results->GetResultLong (3);
385 sql.Printf (
"INSERT INTO yatish_project (id,name,client_id,sync)" 386 " VALUES (%ld,'%s',%ld,'S');",
id, name, client_id);
389 slaveDB->CloseResultSet (results);
405 sql.Printf(
"SELECT id,name,client_id FROM yatish_project WHERE sync = 'U';");
406 wxDatabaseResultSet * results =
masterDB->RunQueryWithResults (sql);
407 while ( results->Next() ) {
408 id = results->GetResultLong (1);
409 name = results->GetResultString (2);
410 client_id = results->GetResultLong (3);
411 sql.Printf (
"UPDATE yatish_project SET name='%s',client_id=%ld" 412 " WHERE id = %ld;", name, client_id,
id);
414 sql.Printf (
"UPDATE yatish_project SET sync='S' WHERE id = %ld;",
id);
431 long id1, id2, id3, id4;
433 sql.Printf(
"SELECT id,project_id,task_id,tool_id FROM yatish_activity WHERE sync = 'I';");
434 wxDatabaseResultSet * results =
masterDB->RunQueryWithResults (sql);
435 while ( results->Next() ) {
436 id1 = results->GetResultLong (1);
437 id2 = results->GetResultLong (2);
438 id3 = results->GetResultLong (3);
439 id4 = results->GetResultLong (4);
440 sql.Printf (
"INSERT INTO yatish_activity (id,project_id,task_id,tool_id)" 441 " VALUES (%ld,%ld,%ld,%ld);", id1, id2, id3, id4);
443 sql.Printf (
"UPDATE yatish_activity SET sync='S' WHERE id = %ld;", id1);
460 long id1, id2, id3, id4;
462 sql.Printf(
"SELECT id,project_id,task_id,tool_id FROM yatish_activity;");
463 wxDatabaseResultSet * results =
slaveDB->RunQueryWithResults (sql);
464 while ( results->Next() ) {
465 id1 = results->GetResultLong (1);
466 id2 = results->GetResultLong (2);
467 id3 = results->GetResultLong (3);
468 id4 = results->GetResultLong (4);
469 sql.Printf (
"INSERT INTO yatish_activity (id,project_id,task_id,tool_id,sync)" 470 " VALUES (%ld,%ld,%ld,%ld,'S');", id1, id2, id3, id4);
473 slaveDB->CloseResultSet (results);
487 long id1, id2, id3, id4;
489 sql.Printf(
"SELECT id,project_id,task_id,tool_id FROM yatish_activity WHERE sync = 'U';");
490 wxDatabaseResultSet * results =
masterDB->RunQueryWithResults (sql);
491 while ( results->Next() ) {
492 id1 = results->GetResultLong (1);
493 id2 = results->GetResultLong (2);
494 id3 = results->GetResultLong (3);
495 id4 = results->GetResultLong (4);
496 sql.Printf (
"UPDATE yatish_activity SET project_id=%ld,task_id=%ld,tool_id=%ld" 497 " WHERE id = %ld;", id2, id3, id4, id1);
499 sql.Printf (
"UPDATE yatish_activity SET sync='S' WHERE id = %ld;", id1);
515 wxString sql, start, stop;
516 long id, activity_id;
518 sql.Printf(
"SELECT id,start,stop,activity_id FROM yatish_timeslot WHERE sync = 'I';");
519 wxDatabaseResultSet * results =
masterDB->RunQueryWithResults (sql);
520 while ( results->Next() ) {
521 id = results->GetResultLong (1);
522 start = results->GetResultString (2);
523 stop = results->GetResultString (3);
524 activity_id = results->GetResultLong (4);
525 sql.Printf (
"INSERT INTO yatish_timeslot (id,start,stop,activity_id)" 526 " VALUES (%ld,'%s','%s',%ld);",
id, start, stop, activity_id);
528 sql.Printf (
"UPDATE yatish_timeslot SET sync='S' WHERE id = %ld;",
id);
544 wxString sql, start, stop;
545 long id, activity_id;
547 sql.Printf(
"SELECT id,start,stop,activity_id FROM yatish_timeslot;");
548 wxDatabaseResultSet * results =
slaveDB->RunQueryWithResults (sql);
549 while ( results->Next() ) {
550 id = results->GetResultLong (1);
551 start = results->GetResultDate (2) .FormatISOCombined (
' ');
552 stop = results->GetResultDate (3) .FormatISOCombined (
' ');
553 activity_id = results->GetResultLong (4);
554 sql.Printf (
"INSERT INTO yatish_timeslot (id,start,stop,activity_id,sync)" 555 " VALUES (%ld,'%s','%s',%ld,'S');",
id, start, stop, activity_id);
558 slaveDB->CloseResultSet (results);
571 wxString sql, start, stop;
572 long id, activity_id;
574 sql.Printf(
"SELECT id,start,stop,activity_id FROM yatish_timeslot WHERE sync = 'U';");
575 wxDatabaseResultSet * results =
masterDB->RunQueryWithResults (sql);
576 while ( results->Next() ) {
577 id = results->GetResultLong (1);
578 start = results->GetResultString (2);
579 stop = results->GetResultString (3);
580 activity_id = results->GetResultLong (4);
581 sql.Printf (
"UPDATE yatish_timeslot SET start='%s',stop='%s',activity_id=%ld" 582 " WHERE id = %ld;", start, stop, activity_id,
id);
584 sql.Printf (
"UPDATE yatish_timeslot SET sync='S' WHERE id = %ld;",
id);
bool EmptySlaveTables()
Empties all yatish tables in slaveDB.
bool Delete()
Takes care of DELETEs in yatish tables.
bool DownloadActivity()
Downloads yatish_activity.
bool DownloadProject()
Downloads yatish_project.
#define CATCH(returnValue)
int Download()
Downloads slaveDB into masterDB.
bool UpdateTimeslot()
Takes care of UPDATEs in yatish_timeslot.
wxDatabase * GetDatabase(const wxString &)
Sets up a (configuration) flux using its argument then calls wxDatabase::GetDatabase().
static wxDatabase * masterDB
yatishDBmysql()
Mainly connects to the MySQL database specified in yatish.auth
bool InsertActivity()
Takes care of INSERTs in yatish_activity.
bool TablesOk(wxDatabase *)
Returns false if any of the yatish table is missings.
bool OutdateMasterTables()
Sets the sync field to 'I' in all records of all yatish tables in masterDB.
bool Update()
Takes care of UPDATEs in yatish tables with a single name column.
bool InsertProject()
Takes care of INSERTs in yatish_project.
bool EmptyMasterTables()
Empties all yatish tables in masterDB.
bool UpdateProject()
Takes care of UPDATEs in yatish_project.
int Upload()
Uploads masterDB into slaveDB.
static wxDatabase * slaveDB
bool DownloadNames()
Downloads yatish tables with a single name column.
bool UpdateActivity()
Takes care of UPDATEs in yatish_activity.
int Commit()
Updates slaveDB with records of masterDB where the sync field is not 'S'.
bool Insert()
Takes care of INSERTs in yatish tables with a single name column.
bool NewTables()
Creates the yatish tables.
static const char * tableName[]
Must be defined in the same order as enum tableID.
bool InsertTimeslot()
Takes care of INSERTs in yatish_timeslot.
bool DownloadTimeslot()
Download yatish_timeslot.