Le 30/12/2009 18:09, Dave Page a écrit :
> On Wed, Dec 30, 2009 at 1:14 PM, Guillaume Lelarge
> <[email protected]> wrote:
>>> The application_name should be set as a connection string parameter,
>>> not an explicit SET command.
>>
>> That was the first thing I wanted to do. But people won't be able to use
>> pgAdmin with older PostgreSQL releases if we use the connection string
>> parameter.
> 
> Yes they will. We changed libpq to ensure that works properly.
> 

OK, I finally understood it. Sorry.

>>> This ensures that the application name is
>>> included in the initial connection log message, and avoids a round
>>> trip with the SET query. PQconninfoParse can be used to test if libpq
>>> supports application_name at runtime.
>>>
>>
>> I don't understand that. libpq and the server are two different things.
>> You can have a new libpq on your client and an old server. client's
>> PQconninfoParse will tell you application_name is available, but it
>> could be that the server doesn't understand it. Perhaps I need to get a
>> better look at PQconninfoParse, but don't have the time right now.
> 
> You need an 8.5 libpq to use application_name in the connection
> string. It doesn't matter what server you have, as libpq will ignore
> the parameter for older servers. To ensure you have a suitable libpq,
> prepare the connection string, and feed it to PQconninfoParse. If you
> get a null response, there's a problem (e.g. application_name is not
> supported). If you get a non-null response, the connection string is
> valid.
> 

OK. Here is a new patch which calls PQconninfoParse and acts according
to its return code. It also removes part of the old patch.

Is it better?

>>> I suspect the patch is also missing some changes to the debugger.
>>>
>>
>> Probably, I'll look at this.
>>

Done too.


-- 
Guillaume.
 http://www.postgresqlfr.org
 http://dalibo.com
diff --git a/pgadmin/db/pgConn.cpp b/pgadmin/db/pgConn.cpp
index 303f0fa..04853e6 100644
--- a/pgadmin/db/pgConn.cpp
+++ b/pgadmin/db/pgConn.cpp
@@ -50,7 +50,7 @@ static void pgNoticeProcessor(void *arg, const char *message)
     ((pgConn*)arg)->Notice(message);
 }
 
-pgConn::pgConn(const wxString& server, const wxString& database, const wxString& username, const wxString& password, int port, int sslmode, OID oid)
+pgConn::pgConn(const wxString& server, const wxString& database, const wxString& username, const wxString& password, int port, int sslmode, OID oid, const wxString& applicationname)
 {
     wxString msg, hostip, hostname;
 
@@ -61,6 +61,7 @@ pgConn::pgConn(const wxString& server, const wxString& database, const wxString&
     save_port = port;
     save_sslmode = sslmode;
     save_oid = oid;
+    save_applicationname = applicationname;
 
     memset(features, 0, sizeof(features));
     majorVersion=0;
@@ -168,6 +169,21 @@ pgConn::pgConn(const wxString& server, const wxString& database, const wxString&
     dbHost = server;
     dbHostName = hostname;
     dbHostAddress = hostip;
+
+    if (!applicationname.IsEmpty())
+    {
+        // Check connection string with application_name
+        char *errmsg;
+        wxString connstr_with_applicationname = connstr + wxT(" application_name='") + applicationname + wxT("'");
+        if (PQconninfoParse(connstr_with_applicationname.mb_str(wxConvUTF8), &errmsg))
+        {
+            connstr = connstr_with_applicationname;
+        }
+        else if (PQconninfoParse(connstr_with_applicationname.mb_str(wxConvLibc), &errmsg))
+        {
+            connstr = connstr_with_applicationname;
+        }
+    }
 	
     // Open the connection
     wxString cleanConnStr = connstr;
@@ -206,10 +222,6 @@ bool pgConn::DoConnect()
         connStatus = PGCONN_OK;
         PQsetNoticeProcessor(conn, pgNoticeProcessor, this);
 
-        // tell the backend who we really are
-        if (BackendMinimumVersion(8, 5))
-            ExecuteVoid(wxT("SET application_name='pgAdmin - Browser'"),false);
-
         wxString sql=wxT("SET DateStyle=ISO;SELECT oid, pg_encoding_to_char(encoding) AS encoding, datlastsysoid\n")
                       wxT("  FROM pg_database WHERE ");
 
diff --git a/pgadmin/debugger/dbgPgConn.cpp b/pgadmin/debugger/dbgPgConn.cpp
index be5e00f..2c31e49 100644
--- a/pgadmin/debugger/dbgPgConn.cpp
+++ b/pgadmin/debugger/dbgPgConn.cpp
@@ -43,19 +43,19 @@ typedef u_long in_addr_t;
 //
 //    The constructor creates a new thread and connects to the specified server
 
-dbgPgConn::dbgPgConn(frmDebugger *frame, const wxString &server, const wxString &database, const wxString &userName, const wxString &password, const wxString &port, int sslmode)
+dbgPgConn::dbgPgConn(frmDebugger *frame, const wxString &server, const wxString &database, const wxString &userName, const wxString &password, const wxString &port, int sslmode, const wxString &applicationname)
    : m_frame(frame)
 {
-    Init( server, database, userName, password, port, sslmode, true );
+    Init( server, database, userName, password, port, sslmode, applicationname, true );
 }
 
 dbgPgConn::dbgPgConn(frmDebugger *frame, const dbgConnProp & props, bool startThread )
    : m_frame(frame)
 {
-    Init(  props.m_host, props.m_database, props.m_userName, props.m_password, props.m_port, props.m_sslMode, startThread );
+    Init(  props.m_host, props.m_database, props.m_userName, props.m_password, props.m_port, props.m_sslMode, props.m_applicationName, startThread );
 }
 
-void dbgPgConn::Init( const wxString &server, const wxString &database, const wxString &username, const wxString &password, const wxString &port, int sslmode, bool startThread )
+void dbgPgConn::Init( const wxString &server, const wxString &database, const wxString &username, const wxString &password, const wxString &port, int sslmode, const wxString &applicationname, bool startThread )
 {
     m_pgConn       = NULL;
     m_majorVersion = 0;
@@ -205,6 +205,17 @@ void dbgPgConn::Init( const wxString &server, const wxString &database, const wx
     connectParams.Trim(true);
     connectParams.Trim(false);
 
+    if (!applicationname.IsEmpty())
+    {
+        // Check connection string with application_name
+        char *errmsg;
+        wxString connectParams_with_applicationname = connectParams + wxT(" application_name='") + applicationname + wxT("'");
+        if (PQconninfoParse(connectParams_with_applicationname.mb_str(wxConvUTF8), &errmsg))
+        {
+            connectParams = connectParams_with_applicationname;
+        }
+    }
+	
     m_frame->getStatusBar()->SetStatusText( wxString::Format(_( "Connecting to %s" ), msg.c_str()), 1 );	
     m_pgConn = PQconnectdb( connectParams.mb_str(wxConvUTF8));
 
diff --git a/pgadmin/dlg/dlgSelectConnection.cpp b/pgadmin/dlg/dlgSelectConnection.cpp
index 45e95e4..2c6e564 100644
--- a/pgadmin/dlg/dlgSelectConnection.cpp
+++ b/pgadmin/dlg/dlgSelectConnection.cpp
@@ -186,10 +186,10 @@ void dlgSelectConnection::OnCancel(wxCommandEvent& ev)
     EndModal(wxID_CANCEL);
 }
 
-pgConn *dlgSelectConnection::CreateConn()
+pgConn *dlgSelectConnection::CreateConn(wxString& applicationname)
 {
 	if (GetServer())	/* Running with access to the main form with the object tree */
-		return GetServer()->CreateConn(GetDatabase());
+		return GetServer()->CreateConn(GetDatabase(), 0, applicationname);
 	else
     {
         /* gcc requires that we store this in temporary variables for some reason... */
@@ -206,14 +206,14 @@ pgConn *dlgSelectConnection::CreateConn()
 			serv = serv.Mid(0, serv.Find(':'));
 		}
         wxString user = txtUsername->GetValue();
-		return CreateConn(serv, db, user, port, 0, true);
+		return CreateConn(serv, db, user, port, 0, applicationname, true);
     }
 }
 
-pgConn *dlgSelectConnection::CreateConn(wxString& server, wxString& dbname, wxString& username, int port, int sslmode, bool writeMRU)
+pgConn *dlgSelectConnection::CreateConn(wxString& server, wxString& dbname, wxString& username, int port, int sslmode, wxString& applicationname, bool writeMRU)
 {
 	pgConn *newconn;
-	newconn = new pgConn(server, dbname, username, wxT(""), port, sslmode);
+	newconn = new pgConn(server, dbname, username, wxT(""), port, sslmode, 0, applicationname);
 	if (newconn->GetStatus() != PGCONN_OK &&
 		newconn->GetLastError().Cmp(wxString(PQnoPasswordSupplied, wxConvUTF8)) == 0)
 	{
@@ -227,7 +227,7 @@ pgConn *dlgSelectConnection::CreateConn(wxString& server, wxString& dbname, wxSt
 		if (dlg.Go() != wxID_OK)
 			return NULL;
 
-		newconn = new pgConn(server, dbname, username, dlg.GetPassword(), port, sslmode);
+		newconn = new pgConn(server, dbname, username, dlg.GetPassword(), port, sslmode, 0, applicationname);
 	}
 
 	if (newconn)
diff --git a/pgadmin/frm/frmConfig.cpp b/pgadmin/frm/frmConfig.cpp
index 3e21a6a..aae2227 100644
--- a/pgadmin/frm/frmConfig.cpp
+++ b/pgadmin/frm/frmConfig.cpp
@@ -62,11 +62,6 @@ frmConfig::frmConfig(frmMain *parent, const wxString& title, pgConn *_conn)
     mainForm = parent;
     conn=_conn;
     SetStatusBarPane(-1);
-
-    // tell the backend who we really are
-    if (conn->BackendMinimumVersion(8, 5))
-        conn->ExecuteVoid(wxT("SET application_name='pgAdmin - Config Editor'"),false);
-
 }
 
 
diff --git a/pgadmin/frm/frmEditGrid.cpp b/pgadmin/frm/frmEditGrid.cpp
index 4927f27..30bd017 100644
--- a/pgadmin/frm/frmEditGrid.cpp
+++ b/pgadmin/frm/frmEditGrid.cpp
@@ -107,10 +107,6 @@ frmEditGrid::frmEditGrid(frmMain *form, const wxString& _title, pgConn *_conn, p
     relid=(Oid)obj->GetOid();
     editorCell = new sqlCell();
 
-    // tell the backend who we really are
-    if (connection->BackendMinimumVersion(8, 5))
-        connection->ExecuteVoid(wxT("SET application_name='pgAdmin - Edit Grid'"),false);
-
     // notify wxAUI which frame to use
     manager.SetManagedWindow(this);
     manager.SetFlags(wxAUI_MGR_DEFAULT | wxAUI_MGR_TRANSPARENT_DRAG);
@@ -3064,9 +3060,10 @@ bool editGridFactoryBase::CheckEnable(pgObject *obj)
 wxWindow *editGridFactoryBase::ViewData(frmMain *form, pgObject *obj, bool filter)
 {
     pgDatabase *db=((pgSchemaObject*)obj)->GetDatabase();
+    wxString applicationname = wxT("pgAdmin - Edit Grid");
 
     pgServer *server=db->GetServer();
-    pgConn *conn= db->CreateConn();
+    pgConn *conn= db->CreateConn(applicationname);
     if (conn)
     {
         wxString txt = wxT("Edit Data - ")
diff --git a/pgadmin/frm/frmHbaConfig.cpp b/pgadmin/frm/frmHbaConfig.cpp
index 511ff9f..4f5114e 100644
--- a/pgadmin/frm/frmHbaConfig.cpp
+++ b/pgadmin/frm/frmHbaConfig.cpp
@@ -48,16 +48,13 @@ END_EVENT_TABLE()
 frmHbaConfig::frmHbaConfig(frmMain *parent, pgServer *server)
 : frmConfig(parent, BACE_TITLE, 0)
 {
+    wxString applicationname = wxT("pgAdmin - Configuration Editor");
     if (server)
-        conn = server->CreateConn();
+        conn = server->CreateConn(wxEmptyString, 0, applicationname);
     Init();
 
     if (conn)
     {
-        // tell the backend who we really are
-        if (conn->BackendMinimumVersion(8, 5))
-            conn->ExecuteVoid(wxT("SET application_name='pgAdmin - Config Editor'"),false);
-
         serverFileName = conn->ExecuteScalar(wxT("SHOW hba_file"));
         if (serverFileName == wxT("unset") || serverFileName.IsEmpty())
             serverFileName = wxT("pg_hba.conf");
diff --git a/pgadmin/frm/frmMainConfig.cpp b/pgadmin/frm/frmMainConfig.cpp
index 1b21f0d..1d7395f 100644
--- a/pgadmin/frm/frmMainConfig.cpp
+++ b/pgadmin/frm/frmMainConfig.cpp
@@ -47,18 +47,15 @@ END_EVENT_TABLE()
 frmMainConfig::frmMainConfig(frmMain *parent, pgServer *server)
 : frmConfig(parent, BCE_TITLE, 0)
 {
+    wxString applicationname = wxT("pgAdmin - Configuration Editor");
     if (server)
-        conn = server->CreateConn();
+        conn = server->CreateConn(wxEmptyString, 0, applicationname);
 
     InitForm();
     Init();
 
     if (conn)
     {
-        // tell the backend who we really are
-        if (conn->BackendMinimumVersion(8, 5))
-            conn->ExecuteVoid(wxT("SET application_name='pgAdmin - Config Editor'"),false);
-
         if (serverFileName.IsEmpty())
             serverFileName = wxT("postgresql.conf");
 
diff --git a/pgadmin/frm/frmQuery.cpp b/pgadmin/frm/frmQuery.cpp
index ecfca27..08904c4 100644
--- a/pgadmin/frm/frmQuery.cpp
+++ b/pgadmin/frm/frmQuery.cpp
@@ -212,10 +212,6 @@ pgsTimer(new pgScriptTimer(this))
     recentKey = wxT("RecentFiles");
     RestorePosition(100, 100, 600, 500, 450, 300);
 
-    // tell the backend who we really are
-    if (conn->BackendMinimumVersion(8, 5))
-        conn->ExecuteVoid(wxT("SET application_name='pgAdmin - Query Tool'"),false);
-
     // notify wxAUI which frame to use
     manager.SetManagedWindow(this);
     manager.SetFlags(wxAUI_MGR_DEFAULT | wxAUI_MGR_TRANSPARENT_DRAG);
@@ -910,7 +906,8 @@ void frmQuery::OnChangeConnection(wxCommandEvent &ev)
         int rc=dlg.Go(conn, cbConnection);
         if (rc == wxID_OK)
         {
-            conn = dlg.CreateConn();
+            wxString applicationname = wxT("pgAdmin (Query Tool)");
+            conn = dlg.CreateConn(applicationname);
             if (conn)
             {
                 cbConnection->Insert(conn->GetName(), CreateBitmap(GetServerColour()), sel, (void*)conn);
@@ -2592,7 +2589,8 @@ wxColour frmQuery::GetServerColour()
 wxWindow *queryToolBaseFactory::StartDialogSql(frmMain *form, pgObject *obj, const wxString &sql)
 {
     pgDatabase *db=obj->GetDatabase();
-    pgConn *conn = db->CreateConn();
+    wxString applicationname = wxT("pgAdmin - Query Tool");
+    pgConn *conn = db->CreateConn(applicationname);
     if (conn)
     {
         frmQuery *fq= new frmQuery(form, wxEmptyString, conn, sql);
diff --git a/pgadmin/frm/frmStatus.cpp b/pgadmin/frm/frmStatus.cpp
index 1678d09..d25c1f9 100644
--- a/pgadmin/frm/frmStatus.cpp
+++ b/pgadmin/frm/frmStatus.cpp
@@ -176,10 +176,6 @@ frmStatus::frmStatus(frmMain *form, const wxString& _title, pgConn *conn) : pgFr
     logHasTimestamp = false;
     logFormatKnown = false;
 
-    // tell the backend who we really are
-    if (conn->BackendMinimumVersion(8, 5))
-        conn->ExecuteVoid(wxT("SET application_name='pgAdmin - Server Status'"),false);
-
     // Notify wxAUI which frame to use
     manager.SetManagedWindow(this);
     manager.SetFlags(wxAUI_MGR_DEFAULT | wxAUI_MGR_TRANSPARENT_DRAG | wxAUI_MGR_ALLOW_ACTIVE_PANE);
@@ -442,7 +438,8 @@ void frmStatus::OnChangeDatabase(wxCommandEvent &ev)
     }
 
     locks_connection = new pgConn(connection->GetHostAddress(), cbDatabase->GetValue(),
-      connection->GetUser(), connection->GetPassword(), connection->GetPort(), connection->GetSslMode());
+      connection->GetUser(), connection->GetPassword(), connection->GetPort(), connection->GetSslMode(),
+      0, connection->GetApplicationName());
 }
 
 
@@ -801,10 +798,10 @@ void frmStatus::OnCopyQuery(wxCommandEvent& ev)
     if (text.Length() > 0 && dbname.Length() > 0
       && text.Trim() != wxT("<IDLE>") && text.Trim() != wxT("<IDLE in transaction>"))
     {
-        //pgDatabase *db=obj->GetDatabase();
         pgConn *conn = new pgConn(connection->GetHostAddress(), dbname,
           connection->GetUser(), connection->GetPassword(),
-          connection->GetPort(), connection->GetSslMode(), connection->GetDbOid());
+          connection->GetPort(), connection->GetSslMode(), connection->GetDbOid(),
+          connection->GetApplicationName());
         if (conn)
         {
             frmQuery *fq = new frmQuery(mainForm, wxEmptyString, conn, text);
@@ -2329,7 +2326,9 @@ void frmStatus::OnCommit(wxCommandEvent &event)
                                        connection->GetUser(), 
                                        connection->GetPassword(), 
                                        connection->GetPort(), 
-                                       connection->GetSslMode());
+                                       connection->GetSslMode(),
+                                       0,
+                                       connection->GetApplicationName());
             if (tmpConn)
             {
                 if (tmpConn->GetStatus() != PGCONN_OK)
@@ -2377,7 +2376,9 @@ void frmStatus::OnRollback(wxCommandEvent &event)
                                        connection->GetUser(), 
                                        connection->GetPassword(), 
                                        connection->GetPort(), 
-                                       connection->GetSslMode());
+                                       connection->GetSslMode(),
+                                       0,
+                                       connection->GetApplicationName());
             if (tmpConn)
             {
                 if (tmpConn->GetStatus() != PGCONN_OK)
@@ -2542,8 +2543,9 @@ wxWindow *serverStatusFactory::StartDialog(frmMain *form, pgObject *obj)
 {
 
     pgServer *server=obj->GetServer();
+    wxString applicationname = wxT("pgAdmin - Server Status");
 
-    pgConn *conn = server->CreateConn();
+    pgConn *conn = server->CreateConn(wxEmptyString, 0, applicationname);
     if (conn)
     {
         wxString txt = _("Server Status - ") + server->GetDescription() 
diff --git a/pgadmin/include/db/pgConn.h b/pgadmin/include/db/pgConn.h
index 6d5261a..289bf72 100644
--- a/pgadmin/include/db/pgConn.h
+++ b/pgadmin/include/db/pgConn.h
@@ -81,7 +81,7 @@ typedef struct pgError {
 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, OID oid=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, const wxString& applicationname = wxT("pgAdmin"));
     ~pgConn();
 
     bool HasPrivilege(const wxString &objTyp, const wxString &objName, const wxString &priv);
@@ -114,6 +114,7 @@ public:
     wxString GetHostName() const { return dbHostName; }
     wxString GetHostAddress() const { return dbHostAddress; }
     wxString GetDbname() const { return save_database; }
+    wxString GetApplicationName() const { return save_applicationname; }
     wxString GetName() const;
     bool GetNeedUtfConnectString() { return utfConnectString; }
     int GetPort() const { return atoi(PQport(conn)); };
@@ -177,7 +178,7 @@ private:
     wxString reservedNamespaces;
 	wxString connstr;
 	
-    wxString save_server, save_database, save_username, save_password;
+    wxString save_server, save_database, save_username, save_password, save_applicationname;
     int save_port, save_sslmode;
     OID save_oid;
 };
diff --git a/pgadmin/include/debugger/dbgConnProp.h b/pgadmin/include/debugger/dbgConnProp.h
index e527ffc..dca36a0 100644
--- a/pgadmin/include/debugger/dbgConnProp.h
+++ b/pgadmin/include/debugger/dbgConnProp.h
@@ -32,6 +32,7 @@ public:
 	wxString	m_port;			// Port number
 	wxString	m_debugPort;	// Port number for debugger connection
 	int		    m_sslMode;		// SSL Mode
+	wxString	m_applicationName;	// Application name, only on 8.5
 };
 
 #endif
diff --git a/pgadmin/include/debugger/dbgPgConn.h b/pgadmin/include/debugger/dbgPgConn.h
index a96c6d9..7ca3e13 100644
--- a/pgadmin/include/debugger/dbgPgConn.h
+++ b/pgadmin/include/debugger/dbgPgConn.h
@@ -57,7 +57,8 @@ class dbgPgConn
               const wxString &username = wxT( "" ), 
               const wxString &password = wxT( "" ), 
               const wxString &port     = wxT( "5432" ), 
-              int sslmode               = 0 );
+              int sslmode               = 0,
+              const wxString &applicationname = wxT( "" ));
 
     dbgPgConn( frmDebugger *frame, const dbgConnProp & props, bool startThread = true );
 
@@ -83,7 +84,7 @@ class dbgPgConn
 
   private:
 
-    void Init( const wxString &server, const wxString &database, const wxString &userName, const wxString &password, const wxString &port, int sslmode, bool startThread );
+    void Init( const wxString &server, const wxString &database, const wxString &userName, const wxString &password, const wxString &port, int sslmode, const wxString &applicationname, bool startThread );
 
     PGconn *m_pgConn;               // libpq connection handler
     dbgPgThread *m_workerThread;    // Worker thread (this thread interacts with the server)
diff --git a/pgadmin/include/dlg/dlgSelectConnection.h b/pgadmin/include/dlg/dlgSelectConnection.h
index 41607c6..d1c3541 100644
--- a/pgadmin/include/dlg/dlgSelectConnection.h
+++ b/pgadmin/include/dlg/dlgSelectConnection.h
@@ -24,8 +24,8 @@ public:
     ~dlgSelectConnection();
     wxString GetHelpPage() const;
     pgServer *GetServer() { return remoteServer; }
-	pgConn *CreateConn();
-	pgConn *CreateConn(wxString& server, wxString& dbname, wxString& username, int port, int sslmode, bool writeMRU = false);
+	pgConn *CreateConn(wxString& applicationame);
+	pgConn *CreateConn(wxString& server, wxString& dbname, wxString& username, int port, int sslmode, wxString& applicationame, bool writeMRU = false);
 	wxString GetServerName();
     wxString GetDatabase();
 
diff --git a/pgadmin/include/schema/pgDatabase.h b/pgadmin/include/schema/pgDatabase.h
index 1bfaf0d..440248c 100644
--- a/pgadmin/include/schema/pgDatabase.h
+++ b/pgadmin/include/schema/pgDatabase.h
@@ -51,7 +51,7 @@ public:
     bool ExecuteVoid(const wxString& sql, bool reportError = true);
     void UpdateDefaultSchema();
 
-    pgConn *CreateConn() { return server->CreateConn(GetName(), GetOid()); }
+    pgConn *CreateConn(const wxString& applicationname) { return server->CreateConn(GetName(), GetOid(), applicationname); }
 
     wxString GetPrettyOption() const { return prettyOption; }
 
diff --git a/pgadmin/include/schema/pgServer.h b/pgadmin/include/schema/pgServer.h
index 40f5ed7..2d59b5b 100644
--- a/pgadmin/include/schema/pgServer.h
+++ b/pgadmin/include/schema/pgServer.h
@@ -81,7 +81,7 @@ public:
     bool GetCreateRole() const { return createRole; }
     void iSetCreateRole(const bool b) { createRole=b; }
 
-    pgConn *CreateConn(wxString dbName=wxEmptyString, OID oid=0);
+    pgConn *CreateConn(wxString dbName=wxEmptyString, OID oid=0, wxString applicationname=wxEmptyString);
 
     wxString GetLastDatabase() const { return lastDatabase; }
     void iSetLastDatabase(const wxString& s) { lastDatabase=s; }
diff --git a/pgadmin/pgAdmin3.cpp b/pgadmin/pgAdmin3.cpp
index 053ead4..0b49ba3 100644
--- a/pgadmin/pgAdmin3.cpp
+++ b/pgadmin/pgAdmin3.cpp
@@ -435,6 +435,7 @@ bool pgAdmin3::OnInit()
             // -S specified, but not -s. Open the server status window but do *not* open the main window
             pgConn *conn = NULL;
             wxString connstr;
+            wxString applicationname = wxT("pgAdmin (Server Status)");
 
             if (cmdParser.Found(wxT("S")))
             {
@@ -447,7 +448,7 @@ bool pgAdmin3::OnInit()
                 int rc=dlg.Go(conn, NULL);
                 if (rc != wxID_OK)
                     return false;
-                conn = dlg.CreateConn();
+                conn = dlg.CreateConn(applicationname);
             }
             else if (cmdParser.Found(wxT("Sc"), &connstr))
             {
@@ -498,7 +499,7 @@ bool pgAdmin3::OnInit()
                 winSplash->Show(false);
                 dlgSelectConnection dlg(NULL, NULL);
                 dlg.CenterOnParent();
-                conn = dlg.CreateConn(host, database, username, port, sslmode);
+                conn = dlg.CreateConn(host, database, username, port, sslmode, applicationname);
             }
             else
             {
@@ -521,6 +522,7 @@ bool pgAdmin3::OnInit()
             // -q specified, but not -s. Open a query tool but do *not* open the main window
             pgConn *conn = NULL;
             wxString connstr;
+            wxString applicationname = wxT("pgAdmin (Query Tool)");
 
 #ifdef __WXMAC__
             if (cmdParser.Found(wxT("q")) || !macFileToOpen.IsEmpty())
@@ -537,7 +539,7 @@ bool pgAdmin3::OnInit()
                 int rc=dlg.Go(conn, NULL);
                 if (rc != wxID_OK)
                     return false;
-                conn = dlg.CreateConn();
+                conn = dlg.CreateConn(applicationname);
             }
             else if (cmdParser.Found(wxT("qc"), &connstr))
             {
@@ -588,7 +590,7 @@ bool pgAdmin3::OnInit()
                 winSplash->Show(false);
                 dlgSelectConnection dlg(NULL, NULL);
                 dlg.CenterOnParent();
-                conn = dlg.CreateConn(host, database, username, port, sslmode);
+                conn = dlg.CreateConn(host, database, username, port, sslmode, applicationname);
             }
             else
             {
@@ -633,7 +635,8 @@ bool pgAdmin3::OnInit()
                 if (srv && cmdParser.Found(wxT("q")))
                 {
                     pgConn *conn;
-                    conn = srv->CreateConn();
+                    wxString applicationname = wxT("pgAdmin - Query Tool");
+                    conn = srv->CreateConn(applicationname);
                     if (conn)
                     {
                         wxString fn;
diff --git a/pgadmin/schema/pgDatabase.cpp b/pgadmin/schema/pgDatabase.cpp
index 2b401b3..8bf83a5 100644
--- a/pgadmin/schema/pgDatabase.cpp
+++ b/pgadmin/schema/pgDatabase.cpp
@@ -87,7 +87,8 @@ int pgDatabase::Connect()
         else
         {
             useServerConnection = false;
-		    conn = CreateConn();
+            wxString applicationname = wxT("pgAdmin - Browser");
+		    conn = CreateConn(applicationname);
 
             if (!conn)
             {
diff --git a/pgadmin/schema/pgRole.cpp b/pgadmin/schema/pgRole.cpp
index e8868d9..91a7e85 100644
--- a/pgadmin/schema/pgRole.cpp
+++ b/pgadmin/schema/pgRole.cpp
@@ -301,7 +301,9 @@ void pgRole::ReassignDropOwnedTo(frmMain *form)
                      GetConnection()->GetUser(),
                      GetConnection()->GetPassword(),
                      GetConnection()->GetPort(),
-                     GetConnection()->GetSslMode());
+                     GetConnection()->GetSslMode(),
+                     0,
+                     GetConnection()->GetApplicationName());
                      
         if (conn->GetStatus() == PGCONN_OK)
         {
diff --git a/pgadmin/schema/pgServer.cpp b/pgadmin/schema/pgServer.cpp
index 92d9435..224ea39 100644
--- a/pgadmin/schema/pgServer.cpp
+++ b/pgadmin/schema/pgServer.cpp
@@ -127,7 +127,7 @@ pgServer *pgServer::GetServer() const
 }
 
 
-pgConn *pgServer::CreateConn(wxString dbName, OID oid)
+pgConn *pgServer::CreateConn(wxString dbName, OID oid, wxString applicationname)
 {
     if (!connected)
         return 0;
@@ -137,7 +137,7 @@ pgConn *pgServer::CreateConn(wxString dbName, OID oid)
         dbName = GetDatabaseName();
         oid = dbOid;
     }
-    pgConn *conn=new pgConn(GetName(), dbName, username, password, port, ssl, oid);
+    pgConn *conn=new pgConn(GetName(), dbName, username, password, port, ssl, oid, applicationname);
 
     if (conn && conn->GetStatus() != PGCONN_OK)
     {
@@ -614,21 +614,21 @@ int pgServer::Connect(frmMain *form, bool askPassword, const wxString &pwd, bool
 
         if (database.IsEmpty())
         {
-            conn = new pgConn(GetName(), DEFAULT_PG_DATABASE, username, password, port, ssl);
+            conn = new pgConn(GetName(), DEFAULT_PG_DATABASE, username, password, port, ssl, 0, wxT("pgAdmin - Browser"));
             if (conn->GetStatus() == PGCONN_OK)
                 database=DEFAULT_PG_DATABASE;
             else if (conn->GetStatus() == PGCONN_BAD && conn->GetLastError().Find(
                                 wxT("database \"") DEFAULT_PG_DATABASE wxT("\" does not exist")) >= 0)
             {
                 delete conn;
-                conn = new pgConn(GetName(), wxT("template1"), username, password, port, ssl);
+                conn = new pgConn(GetName(), wxT("template1"), username, password, port, ssl, 0, wxT("pgAdmin - Browser"));
                 if (conn && conn->GetStatus() == PGCONN_OK)
                     database=wxT("template1");
             }
         }
         else
         {
-            conn = new pgConn(GetName(), database, username, password, port, ssl);
+            conn = new pgConn(GetName(), database, username, password, port, ssl, 0, wxT("pgAdmin - Browser"));
             if (!conn)
             {
                 form->EndMsg(false);
-- 
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers

Reply via email to