------------------------------------------------------------ revno: 227 committer: John Deal <bassd...@yahoo.com> branch nick: dbBackEnd timestamp: Sun 2011-06-05 22:30:14 -0400 message: Fixed problem with creating and subscribing to workplaces. modified: mira-server/src/directory/db/sqlite/DbSqliteDirectory.cpp
-- lp:~mira-dev/mira/dbBackEnd https://code.launchpad.net/~mira-dev/mira/dbBackEnd You are subscribed to branch lp:~mira-dev/mira/dbBackEnd. To unsubscribe from this branch go to https://code.launchpad.net/~mira-dev/mira/dbBackEnd/+edit-subscription
=== modified file 'mira-server/src/directory/db/sqlite/DbSqliteDirectory.cpp' --- mira-server/src/directory/db/sqlite/DbSqliteDirectory.cpp 2011-05-31 14:00:52 +0000 +++ mira-server/src/directory/db/sqlite/DbSqliteDirectory.cpp 2011-06-06 02:30:14 +0000 @@ -340,7 +340,7 @@ continue; } - if ((current_size == 0) || (current_size < count)) + if ((current_size == 0) || (current_size <= count)) { // Anything still in target_list should be added. add_list.push_back(*target_itr); target_itr++; @@ -460,6 +460,7 @@ const std::string& workplace_name) { int error_code; + unsigned int return_id; Field work_field; std::string work_string; SubscriptionList work_subscription_list; @@ -493,8 +494,9 @@ return (unsigned int) 0; } + return_id = (unsigned int) sqlite3_column_int64(m_prep_get_workplace_id, 0); sqlite3_reset(m_prep_get_workplace_id); - return (unsigned int) sqlite3_column_int64(m_prep_get_workplace_id, 0); + return return_id; } bool DbSqliteDirectory::beginTransaction(const std::string& moduleName) @@ -1638,21 +1640,12 @@ return false; } - if (error_code != SQLITE_DONE) - { // Begin transaction failed. - cout << "Error (DbSqliteDirectory::add_workplace): Begin of transaction failed. Error Code: " - << error_code << " Message: " << sqlite3_errmsg(m_db) << endl; - sqlite3_reset(m_prep_begin_transaction_exclusive); - return false; - } - -// Add the workplace to the DB. + // Add the workplace to the DB. error_code = sqlite3_step(m_prep_put_workplace); if (error_code != SQLITE_DONE) { // Insert failed. - cout << "Error (DbSqliteDirectory::add_workplace): Insert of workplace '" << - workplace.get_name() << "' failed. Error Code: " + cout << "Error (DbSqliteDirectory::add_workplace): Insert of workplace '" << workplace.get_name() << "' failed. Error Code: " << error_code << " Message: " << sqlite3_errmsg(m_db) << endl; // Note: No rollback since 1st insert failed. @@ -1661,6 +1654,20 @@ return false; } + if (commitTransaction(m_max_commit_tries, + "DbSqliteDirectory::add_workplace") == false) + { // Commit failed. + // Rollback the failed transaction. Note may automatically be rolled + // back and return error if done expecitly so return not checked. + sqlite3_reset(m_prep_rollback_transaction); + sqlite3_step(m_prep_rollback_transaction); + + // Reset other used prepared statements. + sqlite3_reset(m_prep_begin_transaction_exclusive); + sqlite3_reset(m_prep_put_workplace); + return false; // Something seriously wrong. + } + // Now must add workplace subscription list. work_id = get_workplace_id(workplace.get_name()); @@ -1668,18 +1675,6 @@ { // Could not find workplace just added! cout << "Error (DbSqliteDirectonary::add_workplace): Can not retrieve workplace: " << workplace.get_name() << ". Adding subscriptions failed." << endl; - - error_code = sqlite3_step(m_prep_rollback_transaction); - - if (error_code != SQLITE_DONE) - { // Rollback of transaction failed. - cout << "Error (DbSqliteDirectory::add_workplace): Rollback of transaction failed. Error Code: " - << error_code << " Message: " << sqlite3_errmsg(m_db) << endl; - } - - sqlite3_reset(m_prep_rollback_transaction); - sqlite3_reset(m_prep_put_workplace); - sqlite3_reset(m_prep_begin_transaction_exclusive); return false; // Transaction failed and rolled back (hopefully). } @@ -1698,19 +1693,13 @@ workplace.get_name() << "' failed. Subscribed user ID: " << *flItr << " invalid. Update aborted." << endl; - // Rollback transaction. - sqlite3_reset(m_prep_rollback_transaction); - error_code = sqlite3_step(m_prep_rollback_transaction); + return false; + } - if (error_code != SQLITE_DONE) - { // Rollback failed. Punt! - cout << "Error (DbSqliteDirectory::add_workplace): Rollback of transaction failed. Error Code: " << - error_code << " Message: " << sqlite3_errmsg(m_db) << endl; - sqlite3_reset(m_prep_rollback_transaction); - sqlite3_reset(m_prep_put_workplace); - sqlite3_reset(m_prep_begin_transaction_exclusive); - return false; // Something seriously wrong. - } + // BEGIN TRANSACTION + if (beginTransaction("DbSqliteDirectory::add_workplace") == false) + { // Start of transaction failed. + return false; } if (add_subscription(work_id, work_user.get_id()) == false) @@ -1734,23 +1723,23 @@ sqlite3_reset(m_prep_begin_transaction_exclusive); return false; } + + // END TRANSACTION. + if (commitTransaction(m_max_commit_tries, + "DbSqliteDirectory::add_workplace") == false) + { // Commit failed. + // Rollback the failed transaction. May automatically be rolled + // back and return error if done expecitly so return not checked. + sqlite3_reset(m_prep_rollback_transaction); + sqlite3_step(m_prep_rollback_transaction); + + // Reset other used prepared statements. + sqlite3_reset(m_prep_begin_transaction_exclusive); + sqlite3_reset(m_prep_put_workplace); + return false; // Something seriously wrong. + } } // End for flItr != work_field.value_list.end(). - // END TRANSACTION. - if (commitTransaction(m_max_commit_tries, - "DbSqliteDirectory::add_workplace") == false) - { // Commit failed. - // Rollback the failed transaction. Note may automatically be rolled - // back and return error if done expecitly so return not checked. - sqlite3_reset(m_prep_rollback_transaction); - sqlite3_step(m_prep_rollback_transaction); - - // Reset other used prepared statements. - sqlite3_reset(m_prep_begin_transaction_exclusive); - sqlite3_reset(m_prep_put_workplace); - return false; // Something seriously wrong. - } - sqlite3_reset(m_prep_put_workplace); sqlite3_reset(m_prep_begin_transaction_exclusive); return true; @@ -1791,6 +1780,9 @@ cout << "Error (DbSqliteDirectory::find_workplace: Error retrieving workplace record. Error Code: " << error_code << " Message: " << sqlite3_errmsg(m_db) << endl; } + + workplace.set_invalid(); + return workplace; } try @@ -2191,9 +2183,6 @@ } // End if subscribtions to add or delete. // Things look good so commit the transaction. - sqlite3_reset(m_prep_commit_transaction); - error_code = sqlite3_step(m_prep_commit_transaction); - if (commitTransaction(m_max_commit_tries, "DbSqliteDirectory::update_workplace") == false) {
------------------------------------------------------------------------------ Simplify data backup and recovery for your virtual environment with vRanger. Installation's a snap, and flexible recovery options mean your data is safe, secure and there when you need it. Discover what all the cheering's about. Get your free trial download today. http://p.sf.net/sfu/quest-dev2dev2
_______________________________________________ Mira-development mailing list Mira-development@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mira-development