diff --git a/pgadmin/slony/dlgRepCluster.cpp b/pgadmin/slony/dlgRepCluster.cpp index 1ca47c7..058ba47 100644 --- a/pgadmin/slony/dlgRepCluster.cpp +++ b/pgadmin/slony/dlgRepCluster.cpp @@ -323,6 +323,7 @@ int dlgRepCluster::Go(bool modal) //NOTE: We are not supporting Slony versions less than 1.2.0 wxString tempScript; + bool isSlonyVersionBefore2_2_0 = false; AddScript(tempScript, wxT("slony1_funcs.sql")); if (tempScript.Contains(wxT("@MODULEVERSION@")) && slonyVersion.IsEmpty()) @@ -336,6 +337,25 @@ int dlgRepCluster::Go(bool modal) wxLogError(_("Couldn't test for the Slony version. Assuming 1.2.0")); slonyVersion = wxT("1.2.0"); } + else + isSlonyVersionBefore2_2_0 = true; + } + + if (!isSlonyVersionBefore2_2_0) + { + AddScript(tempScript, wxT("slony1_funcs.2.2.0.sql")); + if (tempScript.Contains(wxT("@MODULEVERSION@")) && slonyVersion.IsEmpty()) + { + this->database->ExecuteVoid(wxT("CREATE OR REPLACE FUNCTION pgadmin_slony_version() returns text as '$libdir/slony1_funcs.2.2.0', '_Slony_I_2_2_0_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. @@ -435,22 +455,43 @@ int dlgRepCluster::Go(bool modal) } } + wxString slonyBaseVersionFilename; + wxString slonyFuncsVersionFilename; - wxString slonyBaseVersionFilename = wxT("slony1_base.") + scriptVersion + wxT(".sql"); - wxString slonyFuncsVersionFilename = wxT("slony1_funcs.") + scriptVersion + wxT(".sql"); + if (SlonyMaximumVersion(wxT("2.2"), 0)) + { + slonyBaseVersionFilename = wxT("slony1_base.") + scriptVersion + wxT(".2.2.0.sql"); + slonyFuncsVersionFilename = wxT("slony1_funcs.") + scriptVersion + wxT(".2.2.0.sql"); + } + else + { + slonyBaseVersionFilename = wxT("slony1_base.") + scriptVersion + wxT(".sql"); + slonyFuncsVersionFilename = wxT("slony1_funcs.") + scriptVersion + wxT(".sql"); + } wxString xxidVersionFilename; if (!xxidVersion.IsEmpty()) xxidVersionFilename = wxT("xxid.") + xxidVersion + wxT(".sql"); - if (((!xxidVersion.IsEmpty() && !AddScript(createScript, xxidVersionFilename)) || - !AddScript(createScript, wxT("slony1_base.sql")) || + if (SlonyMaximumVersion(wxT("2.2"), 0)) + { + if (((!xxidVersion.IsEmpty() && !AddScript(createScript, xxidVersionFilename)) || + !AddScript(createScript, wxT("slony1_base.2.2.0.sql")) || !AddScript(createScript, slonyBaseVersionFilename) || - !AddScript(createScript, wxT("slony1_funcs.sql")) || + !AddScript(createScript, wxT("slony1_funcs.2.2.0.sql")) || !AddScript(createScript, slonyFuncsVersionFilename))) createScript = wxEmptyString; - + } + else + { + if (((!xxidVersion.IsEmpty() && !AddScript(createScript, xxidVersionFilename)) || + !AddScript(createScript, wxT("slony1_base.sql")) || + !AddScript(createScript, slonyBaseVersionFilename) || + !AddScript(createScript, wxT("slony1_funcs.sql")) || + !AddScript(createScript, slonyFuncsVersionFilename))) + createScript = wxEmptyString; + } } // Populate the server combo box @@ -1025,6 +1066,14 @@ wxString dlgRepCluster::GetSql() } } sql = ReplaceString(sql, wxT("@MODULEVERSION@"), slonyVersion); + + // if slony version is greater then equal to 2.2 then replcace @FUNCVERSION to 2_2_0 + if (sql.Contains(wxT("@FUNCVERSION@")) && SlonyMaximumVersion(wxT("2.2"), 0)) + { + wxString slonyFuncVersion = slonyVersion; + slonyFuncVersion.Replace(wxT("."),wxT("_")); + sql = ReplaceString(sql, wxT("@FUNCVERSION@"), slonyFuncVersion); + } } sql += wxT("\n") @@ -1064,15 +1113,11 @@ wxString dlgRepCluster::GetSql() NumToStr(adminNode) + wxT(", ") + qtDbString(txtAdminNodeName->GetValue()); - if (chkJoinCluster->GetValue()) - { - if (StrToDouble(remoteVersion) >= 1.1) - sql += wxT(", false"); - } - else + // storeNode API contains three argument in slony version 1.1 and 1.2 (storeNode(int4,text,boolean)), + // slony version 2.0 onwards, storeNode API contains only two arguments e.g. storeNode(int4,text) + if (StrToDouble(remoteVersion) >= 1.1 && StrToDouble(remoteVersion) < 2.0) { - if (createScript.Find(wxT("storeNode (int4, text)")) < 0) - sql += wxT(", false"); + sql += wxT(", false"); } sql += wxT(");\n")