[QGIS Commit] r15258 - in trunk/qgis: python/core src/app/postgres src/core src/ui

svn_qgis at osgeo.org svn_qgis at osgeo.org
Thu Feb 24 12:53:50 EST 2011


Author: jef
Date: 2011-02-24 09:53:50 -0800 (Thu, 24 Feb 2011)
New Revision: 15258

Modified:
   trunk/qgis/python/core/qgsdatasourceuri.sip
   trunk/qgis/src/app/postgres/qgspgnewconnection.cpp
   trunk/qgis/src/app/postgres/qgspgsourceselect.cpp
   trunk/qgis/src/core/qgsdatasourceuri.cpp
   trunk/qgis/src/core/qgsdatasourceuri.h
   trunk/qgis/src/ui/qgspgnewconnectionbase.ui
Log:
implement #3522

Modified: trunk/qgis/python/core/qgsdatasourceuri.sip
===================================================================
--- trunk/qgis/python/core/qgsdatasourceuri.sip	2011-02-24 17:47:53 UTC (rev 15257)
+++ trunk/qgis/python/core/qgsdatasourceuri.sip	2011-02-24 17:53:50 UTC (rev 15258)
@@ -39,6 +39,14 @@
                      const QString& aPassword,
                      SSLmode sslmode = SSLprefer );
 
+  //! Set all connection related members at once
+  //! \note added in 1.7
+  void setConnection(const QString& service,
+                     const QString& aDatabase,
+                     const QString& aUsername,
+                     const QString& aPassword,
+                     SSLmode sslmode = SSLprefer );
+
   //! Set database
   //! \note added in 1.4
   void setDatabase( const QString &database );
@@ -73,6 +81,9 @@
   QString port() const;
   SSLmode sslMode() const;
 
+  // added in 1.7
+  QString service() const;
+
   void setSql(QString sql);
 
   // added in 1.2

Modified: trunk/qgis/src/app/postgres/qgspgnewconnection.cpp
===================================================================
--- trunk/qgis/src/app/postgres/qgspgnewconnection.cpp	2011-02-24 17:47:53 UTC (rev 15257)
+++ trunk/qgis/src/app/postgres/qgspgnewconnection.cpp	2011-02-24 17:53:50 UTC (rev 15258)
@@ -48,14 +48,15 @@
     QSettings settings;
 
     QString key = "/PostgreSQL/connections/" + connName;
+    txtService->setText( settings.value( key + "/service" ).toString() );
     txtHost->setText( settings.value( key + "/host" ).toString() );
-    txtDatabase->setText( settings.value( key + "/database" ).toString() );
     QString port = settings.value( key + "/port" ).toString();
     if ( port.length() == 0 )
     {
       port = "5432";
     }
     txtPort->setText( port );
+    txtDatabase->setText( settings.value( key + "/database" ).toString() );
     cb_publicSchemaOnly->setChecked( settings.value( key + "/publicOnly", false ).toBool() );
     cb_geometryColumnsOnly->setChecked( settings.value( key + "/geometrycolumnsOnly", false ).toBool() );
     cb_allowGeometrylessTables->setChecked( settings.value( key + "/allowGeometrylessTables", false ).toBool() );
@@ -102,7 +103,8 @@
 
   // warn if entry was renamed to an existing connection
   if (( mOriginalConnName.isNull() || mOriginalConnName != txtName->text() ) &&
-      settings.contains( baseKey + txtName->text() + "/host" ) &&
+      ( settings.contains( baseKey + txtName->text() + "/service" ) ||
+        settings.contains( baseKey + txtName->text() + "/host" ) ) &&
       QMessageBox::question( this,
                              tr( "Save connection" ),
                              tr( "Should the existing connection %1 be overwritten?" ).arg( txtName->text() ),
@@ -119,9 +121,10 @@
   }
 
   baseKey += txtName->text();
+  settings.setValue( baseKey + "/service", txtService->text() );
   settings.setValue( baseKey + "/host", txtHost->text() );
+  settings.setValue( baseKey + "/port", txtPort->text() );
   settings.setValue( baseKey + "/database", txtDatabase->text() );
-  settings.setValue( baseKey + "/port", txtPort->text() );
   settings.setValue( baseKey + "/username", chkStoreUsername->isChecked() ? txtUsername->text() : "" );
   settings.setValue( baseKey + "/password", chkStorePassword->isChecked() ? txtPassword->text() : "" );
   settings.setValue( baseKey + "/publicOnly", cb_publicSchemaOnly->isChecked() );
@@ -160,9 +163,18 @@
 void QgsPgNewConnection::testConnection()
 {
   QgsDataSourceURI uri;
-  uri.setConnection( txtHost->text(), txtPort->text(), txtDatabase->text(),
-                     txtUsername->text(), txtPassword->text(),
-                     ( QgsDataSourceURI::SSLmode ) cbxSSLmode->itemData( cbxSSLmode->currentIndex() ).toInt() );
+  if ( !txtService->text().isEmpty() )
+  {
+    uri.setConnection( txtService->text(), txtDatabase->text(),
+                       txtUsername->text(), txtPassword->text(),
+                       ( QgsDataSourceURI::SSLmode ) cbxSSLmode->itemData( cbxSSLmode->currentIndex() ).toInt() );
+  }
+  else
+  {
+    uri.setConnection( txtHost->text(), txtPort->text(), txtDatabase->text(),
+                       txtUsername->text(), txtPassword->text(),
+                       ( QgsDataSourceURI::SSLmode ) cbxSSLmode->itemData( cbxSSLmode->currentIndex() ).toInt() );
+  }
   QString conninfo = uri.connectionInfo();
   QgsDebugMsg( "PQconnectdb(\"" + conninfo + "\");" );
 

Modified: trunk/qgis/src/app/postgres/qgspgsourceselect.cpp
===================================================================
--- trunk/qgis/src/app/postgres/qgspgsourceselect.cpp	2011-02-24 17:47:53 UTC (rev 15257)
+++ trunk/qgis/src/app/postgres/qgspgsourceselect.cpp	2011-02-24 17:53:50 UTC (rev 15258)
@@ -137,11 +137,12 @@
   if ( QMessageBox::Ok != QMessageBox::information( this, tr( "Confirm Delete" ), msg, QMessageBox::Ok | QMessageBox::Cancel ) )
     return;
 
+  settings.remove( key + "/service" );
   settings.remove( key + "/host" );
+  settings.remove( key + "/port" );
   settings.remove( key + "/database" );
   settings.remove( key + "/username" );
   settings.remove( key + "/password" );
-  settings.remove( key + "/port" );
   settings.remove( key + "/sslmode" );
   settings.remove( key + "/publicOnly" );
   settings.remove( key + "/geometryColumnsOnly" );
@@ -415,17 +416,23 @@
 
   QString key = "/PostgreSQL/connections/" + cmbConnections->currentText();
 
-  QString database = settings.value( key + "/database" ).toString();
-  QString username = settings.value( key + "/username" ).toString();
-  QString password = settings.value( key + "/password" ).toString();
+  QString service                   = settings.value( key + "/service" ).toString();
+  QString host                      = settings.value( key + "/host" ).toString();
+  QString port                      = settings.value( key + "/port" ).toString();
+  QString database                  = settings.value( key + "/database" ).toString();
+  QString username                  = settings.value( key + "/username" ).toString();
+  QString password                  = settings.value( key + "/password" ).toString();
+  QgsDataSourceURI::SSLmode sslmode = ( QgsDataSourceURI::SSLmode ) settings.value( key + "/sslmode", QgsDataSourceURI::SSLprefer ).toInt();
 
   QgsDataSourceURI uri;
-  uri.setConnection( settings.value( key + "/host" ).toString(),
-                     settings.value( key + "/port" ).toString(),
-                     database,
-                     username,
-                     password,
-                     ( QgsDataSourceURI::SSLmode ) settings.value( key + "/sslmode", QgsDataSourceURI::SSLprefer ).toInt() );
+  if ( !service.isEmpty() )
+  {
+    uri.setConnection( service, database, username, password, sslmode );
+  }
+  else
+  {
+    uri.setConnection( host, port, database,  username, password, sslmode );
+  }
 
   bool searchPublicOnly = settings.value( key + "/publicOnly" ).toBool();
   bool searchGeometryColumnsOnly = settings.value( key + "/geometryColumnsOnly" ).toBool();
@@ -511,7 +518,9 @@
                               "Check your username and password and try again.\n\n"
                               "The database said:\n%3" )
                           .arg( settings.value( key + "/database" ).toString() )
-                          .arg( settings.value( key + "/host" ).toString() )
+                          .arg( !settings.value( key + "/service" ).toString().isEmpty()
+                                ? settings.value( key + "/service" ).toString()
+                                : settings.value( key + "/host" ).toString() )
                           .arg( QString::fromUtf8( PQerrorMessage( pd ) ) ) );
   }
 

Modified: trunk/qgis/src/core/qgsdatasourceuri.cpp
===================================================================
--- trunk/qgis/src/core/qgsdatasourceuri.cpp	2011-02-24 17:47:53 UTC (rev 15257)
+++ trunk/qgis/src/core/qgsdatasourceuri.cpp	2011-02-24 17:53:50 UTC (rev 15258)
@@ -118,7 +118,7 @@
       }
       else if ( pname == "service" )
       {
-        QgsDebugMsg( "service keyword ignored" );
+        mService = pval;
       }
       else if ( pname == "user" )
       {
@@ -234,6 +234,11 @@
   mUsername = username;
 }
 
+QString QgsDataSourceURI::service() const
+{
+  return mService;
+}
+
 QString QgsDataSourceURI::host() const
 {
   return mHost;
@@ -401,37 +406,46 @@
 
 QString QgsDataSourceURI::connectionInfo() const
 {
-  QString connectionInfo = "dbname='" + escape( mDatabase ) + "'";
+  QStringList connectionItems;
 
-  if ( mHost != "" )
+  if ( mDatabase != "" )
   {
-    connectionInfo += " host=" + mHost;
+    connectionItems << "dbname='" + escape( mDatabase ) + "'";
+  }
+
+  if ( mService != "" )
+  {
+    connectionItems << "service='" + escape( mService ) + "'";
+  }
+  else if ( mHost != "" )
+  {
+    connectionItems << "host=" + mHost;
     if ( mPort != "" )
-      connectionInfo += " port=" + mPort;
+      connectionItems << "port=" + mPort;
   }
 
   if ( mUsername != "" )
   {
-    connectionInfo += " user='" + escape( mUsername ) + "'";
+    connectionItems << "user='" + escape( mUsername ) + "'";
 
     if ( mPassword != "" )
     {
-      connectionInfo += " password='" + escape( mPassword ) + "'";
+      connectionItems << "password='" + escape( mPassword ) + "'";
     }
   }
 
   if ( mSSLmode == SSLdisable )
-    connectionInfo += " sslmode=disable";
+    connectionItems << "sslmode=disable";
   else if ( mSSLmode == SSLallow )
-    connectionInfo += " sslmode=allow";
+    connectionItems << "sslmode=allow";
   else if ( mSSLmode == SSLrequire )
-    connectionInfo += " sslmode=require";
+    connectionItems << "sslmode=require";
 #if 0
   else if ( mSSLmode == SSLprefer )
-    connectionInfo += " sslmode=prefer";
+    connectionItems << "sslmode=prefer";
 #endif
 
-  return connectionInfo;
+  return connectionItems.join( " " );
 }
 
 QString QgsDataSourceURI::uri() const
@@ -482,6 +496,19 @@
   mSSLmode = sslmode;
 }
 
+void QgsDataSourceURI::setConnection( const QString &service,
+                                      const QString &database,
+                                      const QString &username,
+                                      const QString &password,
+                                      SSLmode sslmode )
+{
+  mService = service;
+  mDatabase = database;
+  mUsername = username;
+  mPassword = password;
+  mSSLmode = sslmode;
+}
+
 void QgsDataSourceURI::setDataSource( const QString &schema,
                                       const QString &table,
                                       const QString &geometryColumn,

Modified: trunk/qgis/src/core/qgsdatasourceuri.h
===================================================================
--- trunk/qgis/src/core/qgsdatasourceuri.h	2011-02-24 17:47:53 UTC (rev 15257)
+++ trunk/qgis/src/core/qgsdatasourceuri.h	2011-02-24 17:53:50 UTC (rev 15258)
@@ -57,6 +57,14 @@
                         const QString& aPassword,
                         SSLmode sslmode = SSLprefer );
 
+    //! Set all connection related members at once (for the service case)
+    //! \note This optional sslmode parameter has been added in version 1.7
+    void setConnection( const QString& aService,
+                        const QString& aDatabase,
+                        const QString& aUsername,
+                        const QString& aPassword,
+                        SSLmode sslmode = SSLprefer );
+
     //! Set database
     // \note added in 1.4
     void setDatabase( const QString &database );
@@ -100,6 +108,9 @@
     QString password() const;
     enum SSLmode sslMode() const;
 
+    // added in 1.7
+    QString service() const;
+
     // added in version 1.2
     QString keyColumn() const;
     void setKeyColumn( QString column );
@@ -113,10 +124,12 @@
 
     //! host name
     QString mHost;
+    //! port the database server listens on
+    QString mPort;
+    //! service name
+    QString mService;
     //! database name
     QString mDatabase;
-    //! port the database server listens on
-    QString mPort;
     //! schema
     QString mSchema;
     //! spatial table

Modified: trunk/qgis/src/ui/qgspgnewconnectionbase.ui
===================================================================
--- trunk/qgis/src/ui/qgspgnewconnectionbase.ui	2011-02-24 17:47:53 UTC (rev 15257)
+++ trunk/qgis/src/ui/qgspgnewconnectionbase.ui	2011-02-24 17:53:50 UTC (rev 15258)
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>352</width>
-    <height>413</height>
+    <height>428</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -71,22 +71,22 @@
            </widget>
           </item>
           <item>
-           <widget class="QLabel" name="TextLabel1">
+           <widget class="QLabel" name="label">
             <property name="text">
-             <string>Host</string>
+             <string>Service</string>
             </property>
             <property name="buddy">
-             <cstring>txtHost</cstring>
+             <cstring>txtService</cstring>
             </property>
            </widget>
           </item>
           <item>
-           <widget class="QLabel" name="TextLabel2">
+           <widget class="QLabel" name="TextLabel1">
             <property name="text">
-             <string>Database</string>
+             <string>Host</string>
             </property>
             <property name="buddy">
-             <cstring>txtDatabase</cstring>
+             <cstring>txtHost</cstring>
             </property>
            </widget>
           </item>
@@ -101,10 +101,23 @@
            </widget>
           </item>
           <item>
+           <widget class="QLabel" name="TextLabel2">
+            <property name="text">
+             <string>Database</string>
+            </property>
+            <property name="buddy">
+             <cstring>txtDatabase</cstring>
+            </property>
+           </widget>
+          </item>
+          <item>
            <widget class="QLabel" name="TextLabel3_3">
             <property name="text">
              <string>SSL mode</string>
             </property>
+            <property name="buddy">
+             <cstring>cbxSSLmode</cstring>
+            </property>
            </widget>
           </item>
           <item>
@@ -145,10 +158,10 @@
            </widget>
           </item>
           <item>
-           <widget class="QLineEdit" name="txtHost"/>
+           <widget class="QLineEdit" name="txtService"/>
           </item>
           <item>
-           <widget class="QLineEdit" name="txtDatabase"/>
+           <widget class="QLineEdit" name="txtHost"/>
           </item>
           <item>
            <widget class="QLineEdit" name="txtPort">
@@ -158,6 +171,9 @@
            </widget>
           </item>
           <item>
+           <widget class="QLineEdit" name="txtDatabase"/>
+          </item>
+          <item>
            <widget class="QComboBox" name="cbxSSLmode"/>
           </item>
           <item>
@@ -255,7 +271,7 @@
          <string>Allow geometryless tables</string>
         </property>
         <property name="checked">
-         <bool>true</bool>
+         <bool>false</bool>
         </property>
        </widget>
       </item>
@@ -274,18 +290,20 @@
  <layoutdefault spacing="6" margin="11"/>
  <tabstops>
   <tabstop>txtName</tabstop>
+  <tabstop>txtService</tabstop>
   <tabstop>txtHost</tabstop>
+  <tabstop>txtPort</tabstop>
   <tabstop>txtDatabase</tabstop>
-  <tabstop>txtPort</tabstop>
   <tabstop>cbxSSLmode</tabstop>
   <tabstop>txtUsername</tabstop>
   <tabstop>txtPassword</tabstop>
   <tabstop>chkStoreUsername</tabstop>
   <tabstop>chkStorePassword</tabstop>
+  <tabstop>btnConnect</tabstop>
   <tabstop>cb_geometryColumnsOnly</tabstop>
   <tabstop>cb_publicSchemaOnly</tabstop>
+  <tabstop>cb_allowGeometrylessTables</tabstop>
   <tabstop>cb_useEstimatedMetadata</tabstop>
-  <tabstop>btnConnect</tabstop>
   <tabstop>buttonBox</tabstop>
  </tabstops>
  <resources/>



More information about the QGIS-commit mailing list