Log Message:
-----------
Connect to databases with special names

Modified Files:
--------------
    pgadmin3:
        CHANGELOG.txt (r1.146 -> r1.147)
    pgadmin3/src/db:
        pgConn.cpp (r1.57 -> r1.58)
    pgadmin3/src/include:
        pgConn.h (r1.26 -> r1.27)
        pgDatabase.h (r1.39 -> r1.40)
        pgServer.h (r1.40 -> r1.41)
    pgadmin3/src/schema:
        pgServer.cpp (r1.53 -> r1.54)

Index: CHANGELOG.txt
===================================================================
RCS file: /projects/pgadmin3/CHANGELOG.txt,v
retrieving revision 1.146
retrieving revision 1.147
diff -LCHANGELOG.txt -LCHANGELOG.txt -u -w -r1.146 -r1.147
--- CHANGELOG.txt
+++ CHANGELOG.txt
@@ -17,6 +17,7 @@
 </ul>
 <br>
 <ul>
+    <li>2004-10-13 AP  1.2B3 Connect to databases with special names (r: Frank Lupo)
     <li>2004-10-08 AP  1.2B3 review object owner code regarding pgsql versions
     <li>2004-10-08 AP  1.2B3 remove maximize button on MSW
     <li>2004-10-07 AP  1.2B3 Fix new server ssl option duplication on connect failure 
(r: Alexander Borkowski)
Index: pgConn.cpp
===================================================================
RCS file: /projects/pgadmin3/src/db/pgConn.cpp,v
retrieving revision 1.57
retrieving revision 1.58
diff -Lsrc/db/pgConn.cpp -Lsrc/db/pgConn.cpp -u -w -r1.57 -r1.58
--- src/db/pgConn.cpp
+++ src/db/pgConn.cpp
@@ -48,7 +48,7 @@
 }
 
 
-pgConn::pgConn(const wxString& server, const wxString& database, const wxString& 
username, const wxString& password, int port, int sslmode)
+pgConn::pgConn(const wxString& server, const wxString& database, const wxString& 
username, const wxString& password, int port, int sslmode, OID oid)
 {
     wxLogInfo(wxT("Creating pgConn object"));
     wxString msg, hostip;
@@ -138,7 +138,19 @@
     // Open the connection
     wxLogInfo(wxT("Opening connection with connection string: %s"), connstr.c_str());
 
+    bool connectAscii=false;
+
+#if wxUSE_UNICODE
+    conn = PQconnectdb(connstr.mb_str(wxConvUTF8));
+    if (PQstatus(conn) != CONNECTION_OK)
+    {
+        PQfinish(conn);
+        conn = PQconnectdb(connstr.mb_str(wxConvLibc));
+    }
+#else
     conn = PQconnectdb(connstr.ToAscii());
+#endif
+
     dbHost = server;
 
     // Set client encoding to Unicode/Ascii
@@ -147,15 +159,24 @@
         connStatus = PGCONN_OK;
         PQsetNoticeProcessor(conn, pgNoticeProcessor, this);
 
-        pgSet *set=ExecuteSet(
-            wxT("SELECT pg_encoding_to_char(encoding) AS encoding, datlastsysoid\n")
-            wxT("  FROM pg_database WHERE datname=") + qtString(database));
+
+        wxString sql=wxT("SELECT oid, pg_encoding_to_char(encoding) AS encoding, 
datlastsysoid\n")
+                      wxT("  FROM pg_database WHERE ");
+        if (oid)
+            sql += wxT("oid = ") + NumToStr(oid);
+        else
+            sql += wxT("datname=") + qtString(database);
+
+        pgSet *set = ExecuteSet(sql);
+
+
         if (set)
         {
             if (set->ColNumber(wxT("\"datlastsysoid\"")) >= 0)
                 needColQuoting = true;
 
-            lastSystemOID = set->GetLong(wxT("datlastsysoid"));
+            lastSystemOID = set->GetOid(wxT("datlastsysoid"));
+            dbOid = set->GetOid(wxT("oid"));
             wxString encoding = set->GetVal(wxT("encoding"));
 
 #if wxUSE_UNICODE
@@ -164,6 +185,8 @@
                 encoding = wxT("UNICODE");
                 conv = &wxConvUTF8;
             }
+            else
+                conv = &wxConvLibc;
 #endif
 
             wxLogInfo(wxT("Setting client_encoding to '%s'"), encoding.c_str());
@@ -440,7 +463,7 @@
             wxT("SELECT proname, pronargs, proargtypes[0] AS arg0, proargtypes[1] AS 
arg1, proargtypes[2] AS arg2\n")
             wxT("  FROM pg_proc\n")
             wxT(" WHERE proname IN ('pg_tablespace_size', 'pg_file_read', 
'pg_rotate_log',")
-            wxT(                  " 'pg_postmaster_starttime', 
'pg_terminate_backend')"));
+            wxT(                  " 'pg_postmaster_starttime', 
'pg_terminate_backend', 'pg_reload_conf')"));
 
         if (set)
         {
@@ -460,6 +483,8 @@
                     features[FEATURE_POSTMASTER_STARTTIME] = true;
                 else if (proname == wxT("pg_terminate_backend") && pronargs == 1 && 
set->GetLong(wxT("arg0")) == 23)
                     features[FEATURE_TERMINATE_BACKEND] = true;
+                else if (proname == wxT("pg_reload_conf") && pronargs == 0)
+                    features[FEATURE_RELOAD_CONF] = true;
 
                 set->MoveNext();
             }
Index: pgServer.h
===================================================================
RCS file: /projects/pgadmin3/src/include/pgServer.h,v
retrieving revision 1.40
retrieving revision 1.41
diff -Lsrc/include/pgServer.h -Lsrc/include/pgServer.h -u -w -r1.40 -r1.41
--- src/include/pgServer.h
+++ src/include/pgServer.h
@@ -62,7 +62,7 @@
     bool GetSuperUser() const { return superUser; }
     void iSetSuperUser(const bool b) { superUser=b; }
 
-    pgConn *CreateConn(wxString dbName=wxEmptyString);
+    pgConn *CreateConn(wxString dbName=wxEmptyString, OID oid=0);
 
     wxString GetLastDatabase() const { return lastDatabase; }
     void iSetLastDatabase(const wxString& s) { lastDatabase=s; }
@@ -111,6 +111,7 @@
     int port, ssl;
     bool trusted, discovered, createPrivilege, superUser;
     OID lastSystemOID;
+    OID dbOid;
     wxString versionNum;
 
 #ifdef WIN32
Index: pgConn.h
===================================================================
RCS file: /projects/pgadmin3/src/include/pgConn.h,v
retrieving revision 1.26
retrieving revision 1.27
diff -Lsrc/include/pgConn.h -Lsrc/include/pgConn.h -u -w -r1.26 -r1.27
--- src/include/pgConn.h
+++ src/include/pgConn.h
@@ -50,7 +50,7 @@
 class pgConn
 {
 public:
-    pgConn(const wxString& server = wxT(""), const wxString& database = wxT(""), 
const wxString& username = wxT(""), const wxString& password = wxT(""), int port = 
5432, int sslmode=0);
+    pgConn(const wxString& server = wxT(""), const wxString& database = wxT(""), 
const wxString& username = wxT(""), const wxString& password = wxT(""), int port = 
5432, int sslmode=0, OID oid=0);
     ~pgConn();
 
     void Close();
@@ -72,6 +72,7 @@
     wxString GetLastError() const;
     wxString GetVersionString();
     OID GetLastSystemOID() const { return lastSystemOID; }
+    OID GetDbOid() const { return dbOid; }
     bool BackendMinimumVersion(int major, int minor);
     void RegisterNoticeProcessor(PQnoticeProcessor proc, void *arg);
     wxString SystemNamespaceRestriction(const wxString &nsp);
@@ -95,6 +96,7 @@
     bool needColQuoting;
     wxString dbHost;
     OID lastSystemOID;
+    OID dbOid;
 
     void *noticeArg;
     PQnoticeProcessor noticeProc;
Index: pgDatabase.h
===================================================================
RCS file: /projects/pgadmin3/src/include/pgDatabase.h,v
retrieving revision 1.39
retrieving revision 1.40
diff -Lsrc/include/pgDatabase.h -Lsrc/include/pgDatabase.h -u -w -r1.39 -r1.40
--- src/include/pgDatabase.h
+++ src/include/pgDatabase.h
@@ -41,7 +41,7 @@
     bool ExecuteVoid(const wxString& sql);
     void UpdateDefaultSchema();
 
-    pgConn *CreateConn() { return server->CreateConn(GetName()); }
+    pgConn *CreateConn() { return server->CreateConn(GetName(), GetOid()); }
 
     wxString GetPrettyOption() const { return prettyOption; }
 
Index: pgServer.cpp
===================================================================
RCS file: /projects/pgadmin3/src/schema/pgServer.cpp,v
retrieving revision 1.53
retrieving revision 1.54
diff -Lsrc/schema/pgServer.cpp -Lsrc/schema/pgServer.cpp -u -w -r1.53 -r1.54
--- src/schema/pgServer.cpp
+++ src/schema/pgServer.cpp
@@ -87,15 +87,17 @@
 }
 
 
-pgConn *pgServer::CreateConn(wxString dbName)
+pgConn *pgServer::CreateConn(wxString dbName, OID oid)
 {
     if (!connected)
         return 0;
 
     if (dbName.IsEmpty())
+    {
         dbName = GetDatabaseName();
-
-    pgConn *conn=new pgConn(GetName(), dbName, username, password, port, ssl);
+        oid = dbOid;
+    }
+    pgConn *conn=new pgConn(GetName(), dbName, username, password, port, ssl, oid);
 
     if (conn && conn->GetStatus() != PGCONN_OK)
     {
@@ -301,6 +303,8 @@
     int status = conn->GetStatus();
     if (status == PGCONN_OK)
     {
+        dbOid = conn->GetDbOid();
+
         // Check the server version
         if (conn->BackendMinimumVersion(7, 3))
         {
---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

               http://www.postgresql.org/docs/faqs/FAQ.html

Reply via email to