Hi,

This patch adds ALTER DATABASE SET TABLESPACE support (8.4 only) and
re-adds ALTER DATABASE RENAME TO support (8.0 and over).

Works for me on Linux (NAME and TABLESPACE), Mac OS X and Windows (both
NAME only).

Regards.


-- 
Guillaume.
 http://www.postgresqlfr.org
 http://dalibo.com
Index: pgadmin/include/dlg/dlgDatabase.h
===================================================================
--- pgadmin/include/dlg/dlgDatabase.h	(révision 7497)
+++ pgadmin/include/dlg/dlgDatabase.h	(copie de travail)
@@ -26,6 +26,7 @@
     void CheckChange();
     wxString GetSql();
     wxString GetSql2();
+    bool GetDisconnectFirst();
     pgObject *CreateObject(pgCollection *collection);
     pgObject *GetObject();
     wxString GetHelpPage() const;
Index: pgadmin/include/dlg/dlgProperty.h
===================================================================
--- pgadmin/include/dlg/dlgProperty.h	(révision 7497)
+++ pgadmin/include/dlg/dlgProperty.h	(copie de travail)
@@ -41,6 +41,7 @@
 
     virtual wxString GetSql() =0;
     virtual wxString GetSql2() { return wxEmptyString; };
+    virtual bool GetDisconnectFirst() { return false; };
     virtual pgObject *CreateObject(pgCollection *collection) =0;
     virtual pgObject *GetObject() =0;
     virtual void SetObject(pgObject *obj) {} // only necessary if apply is implemented
Index: pgadmin/dlg/dlgProperty.cpp
===================================================================
--- pgadmin/dlg/dlgProperty.cpp	(révision 7497)
+++ pgadmin/dlg/dlgProperty.cpp	(copie de travail)
@@ -763,6 +763,14 @@
 
 bool dlgProperty::apply(const wxString &sql, const wxString &sql2)
 {
+	pgConn *myConn = connection;
+
+    if (GetDisconnectFirst())
+    {
+		myConn = database->GetServer()->GetConnection();
+    	database->Disconnect();
+    }
+
     if (!sql.IsEmpty())
     {
         wxString tmp;
@@ -788,7 +796,7 @@
         else
             tmp = sql;
 
-        if (!connection->ExecuteVoid(tmp))
+        if (!myConn->ExecuteVoid(tmp))
         {
             // error message is displayed inside ExecuteVoid
             return false;
@@ -826,7 +834,7 @@
         else
             tmp = sql2;
 
-        if (!connection->ExecuteVoid(tmp))
+        if (!myConn->ExecuteVoid(tmp))
         {
             // error message is displayed inside ExecuteVoid
             // Warn the user about partially applied changes, but don't bail out. 
@@ -883,7 +891,7 @@
         EndModal(0);
         return;
     }
-
+    
     wxString sql;
     wxString sql2;
     if (chkReadOnly->GetValue())
Index: pgadmin/dlg/dlgDatabase.cpp
===================================================================
--- pgadmin/dlg/dlgDatabase.cpp	(révision 7497)
+++ pgadmin/dlg/dlgDatabase.cpp	(copie de travail)
@@ -141,7 +141,7 @@
 
 		// Even with 7.4+, we don't currently have a way to change the database name
 		// as it must be done from a different database.
-        // if (!connection->BackendMinimumVersion(7, 4))
+        if (!connection->BackendMinimumVersion(7, 4))
             txtName->Disable();
 
         if (!connection->BackendMinimumVersion(8, 0))
@@ -165,7 +165,10 @@
         }
 
         PrepareTablespace(cbTablespace, database->GetTablespaceOid());
-		cbTablespace->Disable();
+		if (connection->BackendMinimumVersion(8, 4))
+		    cbTablespace->Enable();
+		else
+		    cbTablespace->Disable();
         txtPath->SetValue(database->GetPath());
         txtPath->Disable();
 
@@ -311,6 +312,7 @@
                || txtComment->GetValue() != database->GetComment()
 			   || txtName->GetValue() != database->GetName()
                || cbOwner->GetValue() != database->GetOwner()
+               || cbTablespace->GetValue() != database->GetTablespace()
 			   || dirtyVars;
     }
 
@@ -428,6 +430,15 @@
 
         AppendComment(sql, wxT("DATABASE"), 0, database);
 
+        if (connection->BackendMinimumVersion(8, 4))
+        {
+            if (cbTablespace->GetCurrentSelection() > 0 && cbTablespace->GetOIDKey() > 0
+                && cbTablespace->GetOIDKey() != database->GetTablespaceOid())
+            	sql += wxT("ALTER DATABASE ") + qtIdent(name)
+                    +  wxT(" SET TABLESPACE ") + qtIdent(cbTablespace->GetValue())
+                    +  wxT(";\n");
+        }
+
         if (!connection->BackendMinimumVersion(8, 2))
             sql += GetGrant(wxT("CT"), wxT("DATABASE ") + qtIdent(name));
         else
@@ -528,4 +539,9 @@
     return sql;
 }
 
-
+bool dlgDatabase::GetDisconnectFirst()
+{
+    if (database)
+      return true;
+    return false;
+}
-- 
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to