------------------------------------------------------------
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

Reply via email to