Fix the WITH ADMIN membership option when creating roles.
authordpage <dpage@a7884b65-44f6-0310-8a51-81a127f17b15>
Fri, 18 Jan 2008 13:45:47 +0000 (13:45 +0000)
committerdpage <dpage@a7884b65-44f6-0310-8a51-81a127f17b15>
Fri, 18 Jan 2008 13:45:47 +0000 (13:45 +0000)
git-svn-id: svn://svn.pgadmin.org/trunk/pgadmin3@7001 a7884b65-44f6-0310-8a51-81a127f17b15

CHANGELOG
pgadmin/dlg/dlgRole.cpp

index 631deb328cd108676e03057d9b3c3a96847c1184..4d2377e02e803a15916f10b6e238b4c24fe45c26 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -36,6 +36,7 @@ Changes
 \r
 Date       Dev Ver    Change details\r
 ---------- --- -----  --------------\r
+2008-01-18 DP  1.8.2  Fix the WITH ADMIN membership option when creating roles.  \r
 2008-01-16 DP  1.8.2  Refresh Views correctly on EnterpriseDB.\r
 2008-01-14 DP  1.8.2  Fix the privilege editor on the Language dialogue, per\r
                       Bborie Park.\r
index b00616f0a99c69fdbbe5f0cefaa39873c388f687..c2f0729fc519c488cda496da4afe3d3231f05f95 100644 (file)
@@ -621,18 +621,32 @@ wxString dlgRole::GetSql()
             sql += wxT("\n   VALID UNTIL 'infinity'");
         
         int cnt = lbRolesIn->GetCount();
+               wxString grants;
 
         if (cnt)
         {
-            sql += wxT("\n   IN ROLE ");
+                       wxString roleName;
+
             for (pos=0 ; pos < cnt ; pos++)
             {
-                if (pos)
-                    sql += wxT(", ");
-                sql += qtIdent(lbRolesIn->GetString(pos));
+                bool admin = false;    
+                               roleName = lbRolesIn->GetString(pos);
+                               if (roleName.Right(PGROLE_ADMINOPTION_LEN) == PGROLE_ADMINOPTION)
+                               {
+                                       roleName=roleName.Left(roleName.Length()-PGROLE_ADMINOPTION_LEN);
+                                       admin = true;
+
+                               }
+                               grants += wxT("GRANT ") + qtIdent(roleName)
+                                          +  wxT(" TO ") + qtIdent(name);
+
+                               if (admin)
+                               grants += wxT(" WITH ADMIN OPTION;\n");
+                               else
+                                       grants += wxT(";\n");
             }
         }
-        sql += wxT(";\n");
+        sql += wxT(";\n") + grants;
 
         if (superuser && !chkUpdateCat->GetValue())
             sql += wxT("UPDATE pg_authid SET rolcatupdate=false WHERE rolname=") + qtDbString(name) + wxT(";\n");