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;
+}