[glom] Avoid some repetition of some CREATE GROUP and ALTER GROUP queries.



commit 8fcb1f80e3666b0607d84aa843cd198ec394310c
Author: Murray Cumming <murrayc murrayc com>
Date:   Tue Nov 8 21:55:39 2011 +0100

    Avoid some repetition of some CREATE GROUP and ALTER GROUP queries.
    
    * glom/libglom/db_utils.[h|cc]: Added build_query_create_group() and
    build_query_add_user_to_group() to avoid repeating the code.
    * glom/base_db.cc:
    * glom/mode_design/users/dialog_groups_list.cc:
    * glom/mode_design/users/dialog_users_list.cc: Use them.

 ChangeLog                                    |   10 ++++++
 glom/base_db.cc                              |    9 +-----
 glom/libglom/db_utils.cc                     |   44 ++++++++++++++++++++-----
 glom/libglom/db_utils.h                      |    4 ++
 glom/mode_design/users/dialog_groups_list.cc |    2 +-
 glom/mode_design/users/dialog_users_list.cc  |    2 +-
 6 files changed, 52 insertions(+), 19 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index e7c7e01..bc0d905 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2011-11-08  Murray Cumming  <murrayc murrayc com>
+
+	Avoid some repetition of some CREATE GROUP and ALTER GROUP queries.
+
+	* glom/libglom/db_utils.[h|cc]: Added build_query_create_group() and 
+	build_query_add_user_to_group() to avoid repeating the code.
+	* glom/base_db.cc:
+	* glom/mode_design/users/dialog_groups_list.cc:
+	* glom/mode_design/users/dialog_users_list.cc: Use them.
+
 1.19.19:
 
 2011-11-08  Murray Cumming  <murrayc murrayc com>
diff --git a/glom/base_db.cc b/glom/base_db.cc
index e7f6bfa..211d67a 100644
--- a/glom/base_db.cc
+++ b/glom/base_db.cc
@@ -1744,13 +1744,6 @@ bool Base_DB::add_user(const Glib::ustring& user, const Glib::ustring& password,
   if(group == GLOM_STANDARD_GROUP_NAME_DEVELOPER)
     strQuery += " SUPERUSER CREATEDB CREATEROLE"; //Because SUPERUSER is not "inherited" from groups to members.
 
-
-  //Glib::ustring strQuery = "CREATE USER " + DbUtils::escape_sql_id(user);
-  //if(group == GLOM_STANDARD_GROUP_NAME_DEVELOPER)
-  //  strQuery += " WITH SUPERUSER"; //Because SUPERUSER is not "inherited" from groups to members.
-  //strQuery +=  " PASSWORD '" + password + "'" ; //TODO: Escape the password.
-
-
   bool test = DbUtils::query_execute_string(strQuery);
   if(!test)
   {
@@ -1759,7 +1752,7 @@ bool Base_DB::add_user(const Glib::ustring& user, const Glib::ustring& password,
   }
 
   //Add it to the group:
-  strQuery = "ALTER GROUP " + DbUtils::escape_sql_id(group) + " ADD USER " + DbUtils::escape_sql_id(user);
+  strQuery = DbUtils::build_query_add_user_to_group(group, user);
   test = DbUtils::query_execute_string(strQuery);
   if(!test)
   {
diff --git a/glom/libglom/db_utils.cc b/glom/libglom/db_utils.cc
index 5a20910..0765fdf 100644
--- a/glom/libglom/db_utils.cc
+++ b/glom/libglom/db_utils.cc
@@ -555,7 +555,8 @@ bool add_standard_groups(Document* document)
       //TODO: Escape and quote the user and group names here?
       //The "SUPERUSER" here has no effect because SUPERUSER is not "inherited" to member users.
       //But let's keep it to make the purpose of this group obvious.
-      bool test = query_execute_string("CREATE GROUP " + DbUtils::escape_sql_id(GLOM_STANDARD_GROUP_NAME_DEVELOPER) + " WITH SUPERUSER");
+      bool test = query_execute_string(
+        DbUtils::build_query_create_group(GLOM_STANDARD_GROUP_NAME_DEVELOPER, true /* superuser */));
       if(!test)
       {
         std::cerr << G_STRFUNC << ": CREATE GROUP failed when adding the developer group." << std::endl;
@@ -565,7 +566,7 @@ bool add_standard_groups(Document* document)
       //Make sure the current user is in the developer group.
       //(If he is capable of creating these groups then he is obviously a developer, and has developer rights on the postgres server.)
       const Glib::ustring current_user = ConnectionPool::get_instance()->get_user();
-      const Glib::ustring strQuery = "ALTER GROUP " + DbUtils::escape_sql_id(GLOM_STANDARD_GROUP_NAME_DEVELOPER) + " ADD USER " + DbUtils::escape_sql_id(current_user);
+      const Glib::ustring strQuery = build_query_add_user_to_group(GLOM_STANDARD_GROUP_NAME_DEVELOPER, current_user);
       test = query_execute_string(strQuery);
       if(!test)
       {
@@ -638,13 +639,7 @@ bool add_groups_from_document(Document* document)
     type_vec_strings::const_iterator iterFind = std::find(database_groups.begin(), database_groups.end(), name);
     if(!name.empty() && iterFind == database_groups.end())
     {
-      Glib::ustring query = "CREATE GROUP " + escape_sql_id(name);
-
-      //The "SUPERUSER" here has no effect because SUPERUSER is not "inherited" to member users.
-      //But let's keep it to make the purpose of this group obvious.
-      if(group.m_developer)
-        query += " WITH SUPERUSER";
-
+      const Glib::ustring query = build_query_create_group(name, group.m_developer);
       const bool test = query_execute_string(query);
       if(!test)
       {
@@ -1876,6 +1871,37 @@ Glib::ustring escape_sql_id(const Glib::ustring& id)
   return gda_connection->quote_sql_identifier(id);
 }
 
+Glib::ustring build_query_create_group(const Glib::ustring& group, bool superuser)
+{
+  if(group.empty())
+  {
+    std::cerr << G_STRFUNC << ": group is empty" << std::endl;
+  }
+
+  Glib::ustring query = "CREATE GROUP " + escape_sql_id(group);
+
+  //The "SUPERUSER" here has no effect because SUPERUSER is not "inherited" to member users.
+  //But let's keep it to make the purpose of this group obvious.
+  if(superuser)
+    query += " WITH SUPERUSER";
+
+  return query;
+}
+
+Glib::ustring build_query_add_user_to_group(const Glib::ustring& group, const Glib::ustring& user)
+{
+  if(group.empty())
+  {
+    std::cerr << G_STRFUNC << ": group is empty" << std::endl;
+  }
+
+  if(user.empty())
+  {
+    std::cerr << G_STRFUNC << ": user is empty" << std::endl;
+  }
+
+  return "ALTER GROUP " + escape_sql_id(group) + " ADD USER " + escape_sql_id(user);
+}
 
 } //namespace DbUtils
 
diff --git a/glom/libglom/db_utils.h b/glom/libglom/db_utils.h
index da5e0bf..513cd89 100644
--- a/glom/libglom/db_utils.h
+++ b/glom/libglom/db_utils.h
@@ -151,6 +151,10 @@ bool drop_table(const Glib::ustring& table_name);
  */
 Glib::ustring escape_sql_id(const Glib::ustring& id);
 
+Glib::ustring build_query_create_group(const Glib::ustring& group, bool superuser = false);
+
+Glib::ustring build_query_add_user_to_group(const Glib::ustring& group, const Glib::ustring& user);
+
 } //namespace DbUtils
 
 } //namespace Glom
diff --git a/glom/mode_design/users/dialog_groups_list.cc b/glom/mode_design/users/dialog_groups_list.cc
index 6e56334..dc34bc7 100644
--- a/glom/mode_design/users/dialog_groups_list.cc
+++ b/glom/mode_design/users/dialog_groups_list.cc
@@ -255,7 +255,7 @@ void Dialog_GroupsList::on_button_group_new()
 
   if(!group_name.empty())
   {
-    const Glib::ustring strQuery = "CREATE GROUP " + DbUtils::escape_sql_id(group_name);
+    const Glib::ustring strQuery = DbUtils::build_query_create_group(group_name);
     const bool test = DbUtils::query_execute_string(strQuery);
     if(!test)
       std::cout << "debug: " << G_STRFUNC << ": CREATE GROUP failed." << std::endl;
diff --git a/glom/mode_design/users/dialog_users_list.cc b/glom/mode_design/users/dialog_users_list.cc
index 68bf5cb..7269c78 100644
--- a/glom/mode_design/users/dialog_users_list.cc
+++ b/glom/mode_design/users/dialog_users_list.cc
@@ -204,7 +204,7 @@ void Dialog_UsersList::on_button_user_add()
   if(!user.empty())
   {
     //Add it to the group:
-    const Glib::ustring strQuery = "ALTER GROUP " + DbUtils::escape_sql_id(m_combo_group->get_active_text()) + " ADD USER " + DbUtils::escape_sql_id(user);
+    const Glib::ustring strQuery = DbUtils::build_query_add_user_to_group(m_combo_group->get_active_text(), user);
     const bool test = DbUtils::query_execute_string(strQuery);
     if(!test)
       std::cerr << G_STRFUNC << ": ALTER GROUP failed." << std::endl;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]