From 17ded9145753f0adde3fd40eaa2e93a02873cbd0 Mon Sep 17 00:00:00 2001
From: Jasmin Dizdarevic <jasmin.dizdarevic@gmail.com>
Date: Fri, 27 May 2011 21:58:13 +0200
Subject: [PATCH] Fix error message because of missing pg_foreign_data_wrapper.fdwhandler column with pgsql < 9.1. Disabling handler-combobox in dlg/dlgForeignDataWrapper.cpp

---
 pgadmin/dlg/dlgForeignDataWrapper.cpp   |    3 ++
 pgadmin/schema/pgForeignDataWrapper.cpp |   40 ++++++++++++++++++++++--------
 2 files changed, 32 insertions(+), 11 deletions(-)

diff --git a/pgadmin/dlg/dlgForeignDataWrapper.cpp b/pgadmin/dlg/dlgForeignDataWrapper.cpp
index 5c5fea6..a82fbe3 100644
--- a/pgadmin/dlg/dlgForeignDataWrapper.cpp
+++ b/pgadmin/dlg/dlgForeignDataWrapper.cpp
@@ -70,6 +70,9 @@ int dlgForeignDataWrapper::Go(bool modal)
 	AddGroups();
 	AddUsers(cbOwner);
 
+	if(!connection->BackendMinimumVersion(9,1))
+		cbHandler->Disable();
+
 	// Fill handler combobox
 	cbHandler->Append(wxT(""));
 	pgSet *set = connection->ExecuteSet(
diff --git a/pgadmin/schema/pgForeignDataWrapper.cpp b/pgadmin/schema/pgForeignDataWrapper.cpp
index 3cda2d6..778245f 100644
--- a/pgadmin/schema/pgForeignDataWrapper.cpp
+++ b/pgadmin/schema/pgForeignDataWrapper.cpp
@@ -188,16 +188,33 @@ pgObject *pgForeignDataWrapperFactory::CreateObjects(pgCollection *collection, c
 	wxString sql;
 	pgForeignDataWrapper *fdw = 0;
 
-	sql = wxT("SELECT fdw.oid, fdwname, fdwhandler, fdwvalidator, fdwacl, ")
-          wxT("vh.proname as fdwhan, vp.proname as fdwval, description, ")
-	      wxT("array_to_string(fdwoptions, ',') AS fdwoptions, ")
-	      wxT("pg_get_userbyid(fdwowner) as fdwowner\n");
-	sql += wxT("  FROM pg_foreign_data_wrapper fdw\n")
-	       wxT("  LEFT OUTER JOIN pg_proc vh on vh.oid=fdwhandler\n")
-	       wxT("  LEFT OUTER JOIN pg_proc vp on vp.oid=fdwvalidator\n")
-	       wxT("  LEFT OUTER JOIN pg_description des ON des.objoid=fdw.oid AND des.objsubid=0\n")
-	       + restriction + wxT("\n")
-	       wxT(" ORDER BY fdwname");
+	bool fdwHandlerSupport = (collection->GetDatabase()->BackendMinimumVersion(9,1));
+	
+	if(fdwHandlerSupport) {
+
+		sql = wxT("SELECT fdw.oid, fdwname, fdwhandler, fdwvalidator, fdwacl, ")
+			  wxT("vh.proname as fdwhan, vp.proname as fdwval, description, ")
+			  wxT("array_to_string(fdwoptions, ',') AS fdwoptions, ")
+			  wxT("pg_get_userbyid(fdwowner) as fdwowner\n");
+		sql += wxT("  FROM pg_foreign_data_wrapper fdw\n")
+			   wxT("  LEFT OUTER JOIN pg_proc vh on vh.oid=fdwhandler\n")
+			   wxT("  LEFT OUTER JOIN pg_proc vp on vp.oid=fdwvalidator\n")
+			   wxT("  LEFT OUTER JOIN pg_description des ON des.objoid=fdw.oid AND des.objsubid=0\n")
+			   + restriction + wxT("\n")
+			   wxT(" ORDER BY fdwname");
+	}
+	else {
+
+		sql = wxT("SELECT fdw.oid, fdwname, fdwvalidator, fdwacl, ")
+			  wxT("vp.proname as fdwval, description, ")
+			  wxT("array_to_string(fdwoptions, ',') AS fdwoptions, ")
+			  wxT("pg_get_userbyid(fdwowner) as fdwowner\n");
+		sql += wxT("  FROM pg_foreign_data_wrapper fdw\n")			   
+			   wxT("  LEFT OUTER JOIN pg_proc vp on vp.oid=fdwvalidator\n")
+			   wxT("  LEFT OUTER JOIN pg_description des ON des.objoid=fdw.oid AND des.objsubid=0\n")
+			   + restriction + wxT("\n")
+			   wxT(" ORDER BY fdwname");
+	}
 	pgSet *fdws = collection->GetDatabase()->ExecuteSet(sql);
 
 	if (fdws)
@@ -210,7 +227,8 @@ pgObject *pgForeignDataWrapperFactory::CreateObjects(pgCollection *collection, c
 			fdw->iSetOid(fdws->GetOid(wxT("oid")));
 			fdw->iSetOwner(fdws->GetVal(wxT("fdwowner")));
 			fdw->iSetAcl(fdws->GetVal(wxT("fdwacl")));
-			fdw->iSetHandlerProc(fdws->GetVal(wxT("fdwhan")));
+			if(fdwHandlerSupport)
+				fdw->iSetHandlerProc(fdws->GetVal(wxT("fdwhan")));
 			fdw->iSetValidatorProc(fdws->GetVal(wxT("fdwval")));
 			fdw->iSetOptions(fdws->GetVal(wxT("fdwoptions")));
 
-- 
1.7.3.1.msysgit.0

