Dave,
* pgAdmin code not up-to-date with latest Slony versions.
Attached is a patch for updating pgAdmin code for Slony latest version.
--
Regards,
Sachin Srivastava
www.enterprisedb.com
Index: include/slony/dlgRepCluster.h
===================================================================
--- include/slony/dlgRepCluster.h (revision 8018)
+++ include/slony/dlgRepCluster.h (working copy)
@@ -67,6 +67,8 @@
bool CopyTable(pgConn *from, pgConn *to, const wxString &table);
sysProcess *process;
+ bool SlonyMaximumVersion(wxString series, long minor);
+
wxArrayLong usedNodes;
wxString clusterBackup;
wxString slonyVersion;
Index: slony/dlgRepCluster.cpp
===================================================================
--- slony/dlgRepCluster.cpp (revision 8018)
+++ slony/dlgRepCluster.cpp (working copy)
@@ -235,7 +235,20 @@
return page;
}
+bool dlgRepCluster::SlonyMaximumVersion(wxString series, long minor)
+{
+ wxString slonySeries;
+ long slonyMinorVersion;
+
+ slonySeries = slonyVersion.BeforeLast('.');
+ slonyVersion.AfterLast('.').ToLong(&slonyMinorVersion);
+
+ return slonySeries == series && slonyMinorVersion <= minor;
+}
+
+
+
int dlgRepCluster::Go(bool modal)
{
chkJoinCluster->SetValue(false);
@@ -299,27 +312,103 @@
// create mode
cbAdminNode->Hide();
+ wxString scriptVersion;
+
txtNodeID->SetValidator(numericValidator);
txtAdminNodeID->SetValidator(numericValidator);
txtClusterName->Hide();
- if (connection->BackendMinimumVersion(8, 0))
- {
- if (!AddScript(createScript, wxT("xxid.v80.sql")) ||
- !AddScript(createScript,
wxT("slony1_base.sql")) ||
- !AddScript(createScript,
wxT("slony1_funcs.sql")) ||
- !AddScript(createScript,
wxT("slony1_funcs.v80.sql")))
- createScript = wxEmptyString;
- }
- else
- {
- if (!AddScript(createScript, wxT("xxid.v74.sql")) ||
- !AddScript(createScript,
wxT("slony1_base.sql")) ||
- !AddScript(createScript,
wxT("slony1_funcs.sql")) ||
- !AddScript(createScript,
wxT("slony1_funcs.v74.sql")))
- createScript = wxEmptyString;
- }
+ //We need to find the exact Slony Version.
+ //NOTE: We are not supporting Slony versions less than 1.2.0
+ if(!AddScript(createScript, wxT("slony1_funcs.sql")))
+ createScript = wxEmptyString;
+
+ if (createScript.Contains(wxT("@MODULEVERSION@")) &&
slonyVersion.IsEmpty())
+ {
+ this->database->ExecuteVoid(wxT("CREATE OR REPLACE FUNCTION
pgadmin_slony_version() returns text as '$libdir/slony1_funcs',
'_Slony_I_getModuleVersion' LANGUAGE C"));
+ slonyVersion = this->database->ExecuteScalar(wxT("SELECT
pgadmin_slony_version();"));
+ this->database->ExecuteVoid(wxT("DROP FUNCTION
pgadmin_slony_version()"));
+
+ if (slonyVersion.IsEmpty())
+ {
+ wxLogError(_("Couldn't test for the Slony version.
Assuming 1.2.0"));
+ slonyVersion = wxT("1.2.0");
+ }
+ }
+
+ //Here we are finding the exact slony scripts version, which is based
on Slony Version and PG Version.
+ // For Slony 1.2.0 to 1.2.17 and 2.0.0 if PG 7.3 script version is v73
+ // For Slony 1.2.0 to 1.2.17 and 2.0.0 if PG 7.4 script version is v74
+ // For Slony 1.2.0 to 1.2.6 if PG 8.0+ script version is v80
+ // For Slony 1.2.7 to 1.2.17 and 2.0.0 if PG 8.0 script version is v80
+ // For Slony 1.2.7 to 1.2.17 and 2.0.0 if PG 8.1+ script version is
v81
+ // For Slony 2.0.1 and 2.0.2 if PG 8.3+ script version is v83. (These
version onwards do not support PG Version less than 8.3)
+ // For Slony 2.0.3 if PG 8.3 script version is v83.
+ // For Slony 2.0.3 if PG 8.4+ script version is v84.
+
+ //Since both 1.2 and 2.0 series is increasing, the following code
needs to be updated with each Slony or PG update.
+
+
+ if (!createScript.IsEmpty())
+ {
+ if (SlonyMaximumVersion(wxT("1.2"), 6))
+ {
+ if (connection->BackendMinimumVersion(8, 0))
+ scriptVersion = wxT("v80");
+ else
+ {
+ if (connection->BackendMinimumVersion(7, 4))
+ scriptVersion = wxT("v74");
+ else
+ scriptVersion = wxT("v73");
+ }
+ }
+ else
+ {
+ if (SlonyMaximumVersion(wxT("1.2"), 17) ||
SlonyMaximumVersion(wxT("2.0"), 0))
+ {
+ if (connection->BackendMinimumVersion(8, 1))
+ scriptVersion = wxT("v81");
+ else
+ {
+ if
(connection->BackendMinimumVersion(8, 0))
+ scriptVersion = wxT("v80");
+ else
+ {
+ if
(connection->BackendMinimumVersion(7, 4))
+ scriptVersion =
wxT("v74");
+ else
+ scriptVersion =
wxT("v73");
+ }
+ }
+ }
+ else
+ {
+ if (SlonyMaximumVersion(wxT("2.0"), 2))
+ scriptVersion = wxT("v83");
+ else
+ {
+ if (SlonyMaximumVersion(wxT("2.0"),
3))
+ {
+ if
(connection->BackendMinimumVersion(8, 4))
+ scriptVersion =
wxT("v84");
+ }
+ else
+ scriptVersion = wxT("v83");
+ }
+ }
+ }
+
+ wxString slonyBaseVersionFilename = wxT("slony1_base.") +
scriptVersion + wxT(".sql");
+ wxString slonyFuncsVersionFilename = wxT("slony1_funcs.") +
scriptVersion + wxT(".sql");
+
+ if (!AddScript(createScript, wxT("slony1_base.sql")) ||
+ !AddScript(createScript, slonyBaseVersionFilename) ||
+ !AddScript(createScript, slonyFuncsVersionFilename))
+ createScript = wxEmptyString;
+ }
+
treeObjectIterator it(mainForm->GetBrowser(),
mainForm->GetServerCollection());
pgServer *s;
int sel=-1;
--
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers