------------------------------------------------------------
revno: 232
committer: John Deal <bassd...@yahoo.com>
branch nick: dbBackEnd
timestamp: Sat 2011-08-13 15:20:20 -0400
message:
  Moved 2 common DB methods from DbSqliteDirectory and DbMySqlDirectory to 
DbDirectory.  Also made DbMySqlDirectory methods 
get_workplace_subscription_list() and get_user_subscription_workplace_list() 
use mysql_real_query() instead of prepared statements because of unknown stack 
issue with prepared statements (see 
http://forums.mysql.com/read.php?168,428369,428369#msg-428369).
modified:
  mira-server/include/directory/db/DbDirectory.h
  mira-server/include/directory/db/mysql/DbMySqlDirectory.h
  mira-server/include/directory/db/sqlite/DbSqliteDirectory.h
  mira-server/src/directory/db/DbDirectory.cpp
  mira-server/src/directory/db/mysql/DbMySqlDirectory.cpp
  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/include/directory/db/DbDirectory.h'
--- mira-server/include/directory/db/DbDirectory.h	2011-06-30 15:37:01 +0000
+++ mira-server/include/directory/db/DbDirectory.h	2011-08-13 19:20:20 +0000
@@ -24,6 +24,7 @@
 #include <iostream>
 #include <string>
 #include <map>
+#include <list>
 
 #include "User.h"
 #include "WorkPlace.h"
@@ -50,6 +51,16 @@
     static std::string getConfigPort()      { return "DIRECTORY_PORT"; };
     static std::string getConfigSocket()    { return "DIRECTORY_SOCKET"; };
 
+	typedef struct
+	{
+	    unsigned int subscription_id;
+	    unsigned int user_id;
+	    unsigned int workplace_id;
+	    unsigned int roles_id;
+	} subscription_record;
+	
+	typedef std::list<subscription_record> SubscriptionList;
+
     DbDirectory(); // Should not be used directly.
     DbDirectory(dbType db_type, std::string path);
     ~DbDirectory();
@@ -76,6 +87,15 @@
 protected:
     std::string    m_version_rec;
 
+    // Utility methods not involving database connections.
+    virtual std::string getFieldValue(Field field);
+    virtual std::string getFieldValue(const User& user, std::string attrName);
+    virtual std::string getFieldValue(const WorkPlace& workplace,
+        std::string attrName);
+    virtual bool diff_subscription_list(const SubscriptionList& target_list,
+        const SubscriptionList& current_list, SubscriptionList& add_list,
+        SubscriptionList& delete_list);
+
 private:
     dbType           m_db_type;
     std::string      m_db_path;

=== modified file 'mira-server/include/directory/db/mysql/DbMySqlDirectory.h'
--- mira-server/include/directory/db/mysql/DbMySqlDirectory.h	2011-08-12 01:38:32 +0000
+++ mira-server/include/directory/db/mysql/DbMySqlDirectory.h	2011-08-13 19:20:20 +0000
@@ -24,12 +24,8 @@
 
 #include <string>
 #include <vector>
-#include <list>
-// #include <my_global.h>
-// #include <my_sys.h>
 #include <mysql.h>
 #include "DbDirectory.h"
-// #include <pthread.h>
 
 namespace miraserver
 {
@@ -39,6 +35,7 @@
 namespace directory_mysql 
 {
 // MySQL directory backend class.
+/*******
 typedef struct
 {
     unsigned int subscription_id;
@@ -46,6 +43,7 @@
     unsigned int workplace_id;
     unsigned int roles_id;
 } subscription_record;
+*******/
 
 typedef struct
 {
@@ -57,7 +55,7 @@
     std::string installed_utilities; // Comma separated list.
 } workplace_record;
     
-typedef std::list<subscription_record> SubscriptionList;
+// typedef std::list<DbDirectory::subscription_record> SubscriptionList;
 typedef std::list<unsigned int> IdList;
 
 
@@ -156,16 +154,16 @@
         const char* sqlText);
     // bool configMultiThread();
     bool openDb();
-    std::string getFieldValue(Field field);
-    std::string getFieldValue(const User& user, std::string attrName);
-    std::string getFieldValue(const WorkPlace& workplace, std::string attrName);
+    // std::string getFieldValue(Field field);
+    // std::string getFieldValue(const User& user, std::string attrName);
+    // std::string getFieldValue(const WorkPlace& workplace, std::string attrName);
     SubscriptionList get_workplace_subscription_list(
         const unsigned int workplace_id);
     SubscriptionList get_user_subscription_workplace_list(unsigned int user_id);
 
-    bool diff_subscription_list(const SubscriptionList& target_list,
+    /* bool diff_subscription_list(const SubscriptionList& target_list,
         const SubscriptionList& current_list, SubscriptionList& add_list,
-        SubscriptionList& delete_list);
+        SubscriptionList& delete_list); */
     bool add_subscription(unsigned int workplace_id, unsigned int user_id);
     bool delete_subscription(unsigned int subscription_id);
     unsigned int get_workplace_id(const std::string& workplace_name);

=== modified file 'mira-server/include/directory/db/sqlite/DbSqliteDirectory.h'
--- mira-server/include/directory/db/sqlite/DbSqliteDirectory.h	2011-05-14 14:55:22 +0000
+++ mira-server/include/directory/db/sqlite/DbSqliteDirectory.h	2011-08-13 19:20:20 +0000
@@ -24,7 +24,6 @@
 
 #include <string>
 #include <vector>
-#include <list>
 #include <pthread.h>
 // #include <sqlite3.h>
 #include "sqlite3.h"
@@ -37,6 +36,7 @@
 namespace directory
 {
 // SQLite directory backend class.
+/**********************
 typedef struct
 {
     unsigned int subscription_id;
@@ -44,6 +44,7 @@
     unsigned int workplace_id;
     unsigned int roles_id;
 } subscription_record;
+**********************/
 
 typedef struct
 {
@@ -55,7 +56,7 @@
     std::string installed_utilities; // Comma separated list.
 } workplace_record;
     
-typedef std::list<subscription_record> SubscriptionList;
+// typedef std::list<DbDirectory::subscription_record> SubscriptionList;
 typedef std::list<unsigned int> IdList;
 
 
@@ -142,15 +143,15 @@
 
     bool configMultiThread();
     bool openDb();
-    std::string getFieldValue(const User& user, std::string attrName);
-    std::string getFieldValue(const WorkPlace& workplace, std::string attrName);
+    // std::string getFieldValue(const User& user, std::string attrName);
+    // std::string getFieldValue(const WorkPlace& workplace, std::string attrName);
     SubscriptionList get_workplace_subscription_list(
         const unsigned int workplace_id);
     SubscriptionList get_user_subscription_workplace_list(unsigned int user_id);
 
-    bool diff_subscription_list(const SubscriptionList& target_list,
-        const SubscriptionList& current_list, SubscriptionList& add_list,
-        SubscriptionList& delete_list);
+    // bool diff_subscription_list(const SubscriptionList& target_list,
+    //     const SubscriptionList& current_list, SubscriptionList& add_list,
+    //     SubscriptionList& delete_list);
     bool add_subscription(unsigned int workplace_id, unsigned int user_id);
     bool delete_subscription(unsigned int subscription_id);
     unsigned int get_workplace_id(const std::string& workplace_name);

=== modified file 'mira-server/src/directory/db/DbDirectory.cpp'
--- mira-server/src/directory/db/DbDirectory.cpp	2011-06-30 15:37:01 +0000
+++ mira-server/src/directory/db/DbDirectory.cpp	2011-08-13 19:20:20 +0000
@@ -152,7 +152,6 @@
 
 DbDirectory* DbDirectory::get_instance()
 {
-    static DbDirectory* fixedDb = NULL;
     std::map<pid_t, DbDirectory*>::iterator inst_itr;
     pid_t        tid;
     DbDirectory* return_instance;
@@ -266,7 +265,6 @@
 
 bool DbDirectory::add_resource(const Resource& resource)
 {
-    int  lock_return;
     bool return_value;
 
 
@@ -428,6 +426,189 @@
     return work_workplace;
 }
 
+std::string DbDirectory::getFieldValue(Field field)
+{
+    std::string work_str;
+
+
+    if (field.type == Field::type_string)
+    {
+        work_str = field.value;
+    }
+    else
+    {
+        if (Field::is_list(field.type))
+        {
+            work_str = "";
+
+            for (std::list<std::string>::iterator itr =
+                field.value_list.begin(); itr != field.value_list.end(); itr++)
+            {
+                work_str.append(*itr);
+                work_str += ",";
+            }
+
+            if (work_str.size() > 0)
+            { // Remove ending ",".
+                work_str.resize(work_str.size() - 1);
+            }
+        }
+        else
+        {
+            if (field.type == Field::type_invalid)
+            {
+                work_str = "";
+            }
+            else
+            {
+                work_str = field.value;
+            } // End if (field.type == Field::type_invalid).
+        } // End if (Field::is_list(field.type)).
+    } // End if (field.type == Field::type_string).
+    
+    return work_str;
+}
+
+std::string DbDirectory::getFieldValue(const User& user,
+    std::string attrName)
+{
+    Field       field;
+    std::string work_str;
+
+    field = user.get_field(attrName);
+
+    if (field.type == Field::type_string)
+    {
+        return field.value;
+    }
+    else
+    {
+        if (Field::is_list(field.type))
+        {
+            work_str = "";
+
+            for (std::list<std::string>::iterator itr =
+                field.value_list.begin(); itr != field.value_list.end(); itr++)
+            {
+                work_str += *itr;
+                work_str += ",";
+            }
+
+            if (work_str.size() > 0)
+            { // Remove ending ",".
+                work_str.resize(work_str.size() - 1);
+            }
+        }
+    }
+
+    return ""; // No value
+}
+
+std::string DbDirectory::getFieldValue(const WorkPlace& workPlace,
+    std::string attrName)
+{
+    Field field;
+
+    field = workPlace.get_field(attrName);
+
+    if (field.type == Field::type_string)
+    {
+        return field.value;
+    }
+
+    return ""; // No value
+}
+
+// For some reason this function will not work as a compare function if
+// made part of the class.
+static bool diff_subscription_list_compare(
+    DbDirectory::subscription_record& first,
+    DbDirectory::subscription_record& second)
+{
+    if (first.user_id <= second.user_id)
+    {
+        return true;
+    }
+
+    return false;
+}
+
+bool DbDirectory::diff_subscription_list(
+    const DbDirectory::SubscriptionList& target_list,
+    const DbDirectory::SubscriptionList& current_list,
+    DbDirectory::SubscriptionList& add_list,
+    DbDirectory::SubscriptionList& delete_list)
+{
+    bool         changes      = false;
+    unsigned int list_limit;
+    unsigned int target_size  = target_list.size();
+    unsigned int current_size = current_list.size();
+
+    std::list<subscription_record> target  = target_list;
+    std::list<subscription_record> current = current_list;
+
+    std::list<subscription_record>::iterator target_itr  = target.begin();
+    std::list<subscription_record>::iterator current_itr = current.begin();
+
+
+    add_list.resize(0);
+    delete_list.resize(0);
+
+    // Sort the supplied lists.
+    target.sort(diff_subscription_list_compare);
+    current.sort(diff_subscription_list_compare);
+
+    // Largest list will determine number of times to loop.
+    if (target_size > current_size)
+    {
+        list_limit = target_size;
+    }
+    else
+    {
+        list_limit = current_size;
+    }
+
+    for (unsigned int count = 0; count < list_limit; count++)
+    { // Look for differences and populate add_list and delete_list
+        if ((target_size == 0) || (target_size <= count))
+        { // Anything still in current_list should be deleted.
+            delete_list.push_back(*current_itr);
+            current_itr++;
+            changes = true;
+            continue;
+        }
+
+        if ((current_size == 0) || (current_size <= count))
+        { // Anything still in target_list should be added.
+            add_list.push_back(*target_itr);
+            target_itr++;
+            changes = true;
+            continue;
+        }
+
+        if (target_itr->user_id < current_itr->user_id)
+        { // Target contains number not in current so add it.
+            add_list.push_back(*target_itr);
+            target_itr++;
+            changes = true;
+            continue;
+        }
+
+        if (current_itr->user_id < target_itr->user_id)
+        { // Current contains number not in target so delete it.
+            delete_list.push_back(*current_itr);
+            current_itr++;
+            changes = true;
+            continue;
+        }
+
+        // If reach this point *current_itr == *target_itr so incrment both.
+        target_itr++;
+        current_itr++;
+    } // End for count < list_limit.
+
+    return changes;
+}
 
 } // namespace directory
 

=== modified file 'mira-server/src/directory/db/mysql/DbMySqlDirectory.cpp'
--- mira-server/src/directory/db/mysql/DbMySqlDirectory.cpp	2011-08-12 01:38:32 +0000
+++ mira-server/src/directory/db/mysql/DbMySqlDirectory.cpp	2011-08-13 19:20:20 +0000
@@ -145,6 +145,7 @@
     return true;
 }
 
+/******************************
 std::string DbMySqlDirectory::getFieldValue(Field field)
 {
     std::string work_str;
@@ -186,7 +187,6 @@
     } // End if (field.type == Field::type_string).
     
     return work_str;
-
 }
 
 std::string DbMySqlDirectory::getFieldValue(const User& user,
@@ -238,17 +238,44 @@
 
     return ""; // No value
 }
-
-SubscriptionList DbMySqlDirectory::get_workplace_subscription_list(
+******************************/
+DbDirectory::SubscriptionList DbMySqlDirectory::get_workplace_subscription_list(
     const unsigned int workplace_id)
 {
-    subscription_record work_subscription;
-    SubscriptionList    work_subscription_list;
-    int                 mysql_result;
-    unsigned long       data_lengths[4] = {sizeof(workplace_id)};
-    my_bool             is_nulls[4];
-    MYSQL_BIND          bind[4];
-
+    DbDirectory::subscription_record work_subscription;
+    DbDirectory::SubscriptionList    work_subscription_list;
+    // int                 mysql_result;
+    // unsigned long       data_lengths[4] = {sizeof(workplace_id)};
+    // my_bool             is_nulls[4];
+    // MYSQL_BIND          bind[4];
+    MYSQL_RES*          mysql_result_set;
+    MYSQL_ROW           mysql_result_row;
+    char                mysql_statement[sizeof(m_get_subscription_user_list_sql) + 10];
+
+    sprintf(mysql_statement,
+        "select subscriptionID, userID, workplaceID, rolesID from subscriptions where workplaceID = %u",
+        workplace_id);
+
+    if (mysql_real_query(m_db, mysql_statement, strlen(mysql_statement)) !=
+        m_mysql_ok)
+    { // Query failed.
+        cout << "Error (DbMySqlDirectory::get_workplace_subscription_list): Query: '"
+        << mysql_statement << "' failed.  Error Code: " << mysql_errno(m_db)
+        << "  Message: " << mysql_error(m_db) << endl;
+        return work_subscription_list;
+    }
+
+    mysql_result_set = mysql_store_result(m_db);
+
+    if (mysql_result_set == NULL)
+    { // Retrieving result set failed.
+        cout << "Error (DbMySqlDirectory::get_workplace_subscription_list): Result set retrieval failed. "
+        << " Error Code: " << mysql_errno(m_db) << " Message: "
+        << mysql_error(m_db) << endl;
+        return work_subscription_list;
+    }
+
+    /***********************************************
     memset(bind, 0, sizeof(bind));  // Initialize  MYSQL_BIND structure.
     bind[0].buffer_type   = MYSQL_TYPE_LONG;
     bind[0].buffer        = (char*) &workplace_id;
@@ -315,12 +342,34 @@
             << mysql_stmt_error(m_prep_get_subscription_user_list) << endl;
         return work_subscription_list;
     }
+    ***********************************************/
 
     do
     { // Retrieve list of user IDs for specified workplace.
-        mysql_result = mysql_stmt_fetch(m_prep_get_subscription_user_list);
-
-        if (mysql_result == m_mysql_ok)
+        // mysql_result = mysql_stmt_fetch(m_prep_get_subscription_user_list);
+        mysql_result_row = mysql_fetch_row(mysql_result_set);
+
+        // if (mysql_result == m_mysql_ok)
+        if (mysql_result_row != NULL)
+        { // Retrieved record.  Load into subscription list.
+            work_subscription.subscription_id = std::atol(mysql_result_row[0]);
+            work_subscription.user_id         = std::atol(mysql_result_row[1]);
+            work_subscription.workplace_id    = std::atol(mysql_result_row[2]);
+            work_subscription.roles_id        = 0; // Roles not currently used.
+            work_subscription_list.push_back(work_subscription); // Add to list.
+        }
+        else
+        { // No more rows or retrieving row failed.
+            if (mysql_result_row != m_mysql_ok)
+            {
+                cout << "Error (DbMySqlDirectory::get_user_subscription_workplace_list): Result set row retrieval failed  Error: "
+                    << mysql_errno(m_db) << " Message: " << mysql_error(m_db)
+                    << endl;
+                return work_subscription_list;
+            }
+        }
+
+        /**********************************
         { // Retrieved record.  Load into subscription list.
             work_subscription_list.push_back(work_subscription); // Add to list.
         }
@@ -345,25 +394,62 @@
                 } // End of if (mysql_return == MYSQL_DATA_TRUNCATED).
             } // End of if (mysql_return != MYSQL_NO_DATA).
         } // End of if (mysql_return == m_mysql_ok)
+        **********************************/
     }
-    while (mysql_result != MYSQL_NO_DATA);
+    // while (mysql_result != MYSQL_NO_DATA);
+    while (mysql_result_row != NULL);
 
-    free_results(m_prep_get_subscription_user_list,
-        "DbMySqlDirectory::add_get_workplace_subscription_list");
+    // free_results(m_prep_get_subscription_user_list,
+    //    "DbMySqlDirectory::add_get_workplace_subscription_list");
+    mysql_free_result(mysql_result_set);
     return work_subscription_list;
 }
 
-SubscriptionList DbMySqlDirectory::get_user_subscription_workplace_list(
+DbDirectory::SubscriptionList DbMySqlDirectory::get_user_subscription_workplace_list(
     const unsigned int user_id)
 {
     subscription_record work_subscription;
     SubscriptionList    work_subscription_list;
-    int                 mysql_result;
-    unsigned long       lengths[4];
-    my_bool             is_nulls[4];
-    my_bool             truncation_flags[4];
-    MYSQL_BIND          bind[4];
-
+    // int                 mysql_result;
+    char                sql_statement[sizeof(m_get_subscription_workplace_list_sql) + 10];
+    // unsigned long       lengths[4];
+    // my_bool             is_nulls[4];
+    // my_bool             truncation_flags[4];
+    // MYSQL_BIND          bind[4];
+    MYSQL_RES*          mysql_result_set;
+    MYSQL_ROW           mysql_result_row;
+
+   
+    std::sprintf(sql_statement,
+        "select subscriptionID, userID, workplaceID, rolesID from subscriptions where userID = %u",
+        user_id);
+
+    if (mysql_real_query(m_db, sql_statement, std::strlen(sql_statement)) !=
+        m_mysql_ok)
+    { // Query failed.
+        cout << "Error (DbMySqlDirectory::get_user_subscription_workplace_list): Query failed  Error: "
+            << mysql_errno(m_db) << " Message: " << mysql_error(m_db) << endl;
+        return work_subscription_list;
+    }
+
+    mysql_result_set = mysql_store_result(m_db);
+
+    if (mysql_result_set == NULL)
+    { // Retrieving results failed.
+        cout << "Error (DbMySqlDirectory::get_user_subscription_workplace_list): Result set retrieval failed  Error: "
+            << mysql_errno(m_db) << " Message: " << mysql_error(m_db) << endl;
+        return work_subscription_list;
+    }
+
+    /***************************************************************
+    // HACK! reprepare statement each time.  Removing this causes
+    // the mysql_stmt_execute() to trash stack. (JRD)
+    if (prepareStatement("DbMySqlDirectory::DbMySqlDirectory",
+        &m_prep_get_subscription_workplace_list,
+        m_get_subscription_workplace_list_sql) == false)
+    {
+        exit(-1);
+    }
 
     memset(bind, 0, sizeof(bind));  // Initialize  MYSQL_BIND structure.
     bind[0].buffer_type   = MYSQL_TYPE_LONG;
@@ -438,16 +524,33 @@
             << mysql_stmt_error(m_prep_get_subscription_workplace_list) << endl;
         return work_subscription_list;
     }
+    ***************************************************************/
 
     do
     { // Retrieve list of user IDs for specified workplace.
-        mysql_result = mysql_stmt_fetch(m_prep_get_subscription_workplace_list);
+        // mysql_result = mysql_stmt_fetch(m_prep_get_subscription_workplace_list);
+        mysql_result_row = mysql_fetch_row(mysql_result_set);
 
-        if (mysql_result == m_mysql_ok)
+        // if (mysql_result == m_mysql_ok)
+        if (mysql_result_row != NULL)
         { // Retrieved record.  Load into subscription list.
+            work_subscription.subscription_id = std::atol(mysql_result_row[0]);
+            work_subscription.user_id         = std::atol(mysql_result_row[1]);
+            work_subscription.workplace_id    = std::atol(mysql_result_row[2]);
+            work_subscription.roles_id        = 0; // Roles not currently used.
             work_subscription_list.push_back(work_subscription); // Add to list.
         }
         else
+        { // No more rows or retrieving row failed.
+            if (mysql_result_row != m_mysql_ok)
+            {
+                cout << "Error (DbMySqlDirectory::get_user_subscription_workplace_list): Result set row retrieval failed  Error: "
+                    << mysql_errno(m_db) << " Message: " << mysql_error(m_db)
+                    << endl;
+                return work_subscription_list;
+            }
+        }
+        /***********************************************
         { // Either finished or error.
             if (mysql_result != MYSQL_NO_DATA)
             { 
@@ -467,17 +570,21 @@
                 } // End of if (mysql_result == MYSQL_DATA_TRUNCATED).
             } // End of if (mysql_result != MYSQL_NO_DATA).
         } // End of if (mysql_result == m_mysql_ok)
+        ***********************************************/
     }
-    while (mysql_result != MYSQL_NO_DATA);
+    // while (mysql_result != MYSQL_NO_DATA);
+    while (mysql_result_row != NULL);
 
-    free_results(m_prep_get_subscription_workplace_list,
-        "DbMySqlDirectory::add_get_user_subscription_workplace_list");
+    // free_results(m_prep_get_subscription_workplace_list,
+    //     "DbMySqlDirectory::add_get_user_subscription_workplace_list");
+    mysql_free_result(mysql_result_set);
 
     return work_subscription_list;
 }
 
 // For some reason this function will not work as a compare function if
 // made part of the class.
+/******************
 static bool diff_subscription_list_compare(
     subscription_record& first, subscription_record& second)
 {
@@ -564,7 +671,7 @@
 
     return changes;
 }
-
+*******************/
 
 bool DbMySqlDirectory::add_subscription(unsigned int workplace_id,
     unsigned int user_id)

=== modified file 'mira-server/src/directory/db/sqlite/DbSqliteDirectory.cpp'
--- mira-server/src/directory/db/sqlite/DbSqliteDirectory.cpp	2011-08-12 01:38:32 +0000
+++ mira-server/src/directory/db/sqlite/DbSqliteDirectory.cpp	2011-08-13 19:20:20 +0000
@@ -143,6 +143,7 @@
     return success;
 }
 
+/**************************************
 std::string DbSqliteDirectory::getFieldValue(const User& user,
     std::string attrName)
 {
@@ -173,12 +174,13 @@
 
     return ""; // No value
 }
+**************************************/
 
-SubscriptionList DbSqliteDirectory::get_workplace_subscription_list(
+DbDirectory::SubscriptionList DbSqliteDirectory::get_workplace_subscription_list(
     const unsigned int workplace_id)
 {
-    subscription_record work_subscription;
-    SubscriptionList    work_subscription_list;
+    DbDirectory::subscription_record work_subscription;
+    DbDirectory::SubscriptionList    work_subscription_list;
     int                 error_code;
 
 
@@ -231,11 +233,11 @@
 }
 
 
-SubscriptionList DbSqliteDirectory::get_user_subscription_workplace_list(
+DbDirectory::SubscriptionList DbSqliteDirectory::get_user_subscription_workplace_list(
     const unsigned int user_id)
 {
-    subscription_record work_subscription;
-    SubscriptionList    work_subscription_list;
+    DbDirectory::subscription_record work_subscription;
+    DbDirectory::SubscriptionList    work_subscription_list;
     int                 error_code;
 
 
@@ -289,8 +291,9 @@
 
 // For some reason this function will not work as a compare function if
 // made part of the class.
+/*****************************************
 static bool diff_subscription_list_compare(
-    subscription_record& first, subscription_record& second)
+    DbDirectory::subscription_record& first, DbDirectory::subscription_record& second)
 {
     if (first.user_id <= second.user_id)
     {
@@ -375,7 +378,7 @@
 
     return changes;
 }
-
+*****************************************/
 
 bool DbSqliteDirectory::add_subscription(unsigned int workplace_id,
     unsigned int user_id)
@@ -1860,7 +1863,7 @@
         work_string = (const char*) sqlite3_column_text(
             m_prep_get_workplace_workplacename, 5);
 
-        for (int begin_index = 0, end_index = 0;
+        for (unsigned int begin_index = 0, end_index = 0;
             begin_index < work_string.size();)
         { // Extract each utility name and insert in workplace utility list.
             end_index = work_string.find(",", begin_index);
@@ -1981,7 +1984,7 @@
         work_field.value     = "";
         work_string = (const char*) sqlite3_column_text(m_prep_get_workplace, 5);
 
-        for (int begin_index = 0, end_index = 0;
+        for (unsigned int begin_index = 0, end_index = 0;
             begin_index < work_string.size();)
         { // Extract each utility name and insert in workplace utility list.
             end_index = work_string.find(",", begin_index);

------------------------------------------------------------------------------
FREE DOWNLOAD - uberSVN with Social Coding for Subversion.
Subversion made easy with a complete admin console. Easy 
to use, easy to manage, easy to install, easy to extend. 
Get a Free download of the new open ALM Subversion platform now.
http://p.sf.net/sfu/wandisco-dev2dev
_______________________________________________
Mira-development mailing list
Mira-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mira-development

Reply via email to