Skip to content

Commit

Permalink
New ctors for connections interface
Browse files Browse the repository at this point in the history
Tries to make it clearer what are the use cases for the two
constructors (name and uri).
  • Loading branch information
elpaso committed Aug 21, 2019
1 parent 09785d6 commit a092a82
Show file tree
Hide file tree
Showing 21 changed files with 155 additions and 133 deletions.
Expand Up @@ -240,16 +240,16 @@ Creates a new connection with ``name`` by reading its configuration from the set
If a connection with this name cannot be found, an empty connection will be returned.
%End


QgsAbstractDatabaseProviderConnection( const QString &name, const QString &uri );
QgsAbstractDatabaseProviderConnection( const QString &uri, const QVariantMap &configuration );
%Docstring
Creates a new connection with ``name`` and initializes the connection from the ``uri``.
Creates a new connection from the given ``uri`` and ``configuration``.
The connection is not automatically stored in the settings.

.. seealso:: :py:func:`store`
%End



Capabilities capabilities() const;
%Docstring
Returns connection capabilities
Expand Down
36 changes: 22 additions & 14 deletions python/core/auto_generated/qgsabstractproviderconnection.sip.in
Expand Up @@ -13,9 +13,13 @@ class QgsAbstractProviderConnection
%Docstring
The QgsAbstractProviderConnection provides an interface for data provider connections.

Connections objects can be created by passing the connection name and in this case
they are automatically loaded from the settings, or by passing a data source URI
in the constructor.
Connections objects can be constructed loading them from the connections stored
in the settings by passing the connection name.
A new connection object can also be created by passing a data source URI in the constructor.

Provider metadata keep a cache of the existing connections, to manage stored
connections it is recommendend to call metadata methods instead of loading and
storing the connections directly.

Concrete classes must implement methods to retrieve, save and remove connections from
the settings.
Expand Down Expand Up @@ -48,32 +52,26 @@ Creates a new connection with ``name`` by reading its configuration from the set
If a connection with this name cannot be found, an empty connection will be returned.
%End

QgsAbstractProviderConnection( const QString &name, const QString &uri );
QgsAbstractProviderConnection( const QString &uri, const QVariantMap &configuration );
%Docstring
Creates a new connection with ``name`` and initializes the connection from the ``uri``.
Creates a new connection from the given ``uri`` and ``configuration``.
The connection is not automatically stored in the settings.

.. seealso:: :py:func:`store`
%End

virtual ~QgsAbstractProviderConnection();

virtual void store( const QVariantMap &configuration = QVariantMap() ) const = 0;
virtual void store( const QString &name ) const = 0;
%Docstring
Stores the connection in the settings.

:param configuration: stores additional connection settings that are used by the
source select dialog and are not part of the data source URI
:param name: the name under which the connection will be stored
%End

virtual void remove( ) const = 0;
virtual void remove( const QString &name ) const = 0;
%Docstring
Deletes the connection from the settings.
%End

QString name() const;
%Docstring
Returns the connection name
%End

QString uri() const;
Expand All @@ -84,6 +82,16 @@ Returns the connection data source URI string representation
void setUri( const QString &uri );
%Docstring
Sets the connection data source URI to ``uri``
%End

QVariantMap configuration() const;
%Docstring
Returns the connection configuration parameters
%End

void setConfiguration( const QVariantMap &configuration );
%Docstring
Sets the connection ``configuration``
%End

};
Expand Down
22 changes: 11 additions & 11 deletions python/core/auto_generated/qgsprovidermetadata.sip.in
Expand Up @@ -261,24 +261,24 @@ Raises a QgsProviderConnectionException if any errors are encountered.
%End


virtual QgsAbstractProviderConnection *createConnection( const QString &name ) /Factory/;
virtual QgsAbstractProviderConnection *createConnection( const QString &uri, const QVariantMap &configuration ) /Factory/;
%Docstring
Creates a new connection by loading the connection with the given ``name`` from the settings.
Creates a new connection from ``uri`` and ``configuration``,
the newly created connection is not automatically stored in the settings, call
saveConnection() to save it.
Ownership is transferred to the caller.

.. seealso:: :py:func:`saveConnection`

.. versionadded:: 3.10
%End

virtual QgsAbstractProviderConnection *createConnection( const QString &name, const QString &uri ) /Factory/;
virtual QgsAbstractProviderConnection *createConnection( const QString &name );
%Docstring
Creates a new connection with the given ``name`` and data source ``uri``,
the newly created connection is not automatically stored in the settings, call
saveConnection() to save it.
Creates a new connection by loading the connection with the given ``name`` from the settings.
Ownership is transferred to the caller.

.. seealso:: :py:func:`saveConnection`

.. versionadded:: 3.10
.. seealso:: :py:func:`findConnection`
%End

virtual void deleteConnection( const QString &name ) throw( QgsProviderConnectionException );
Expand All @@ -291,12 +291,12 @@ Raises a QgsProviderConnectionException if any errors are encountered.
.. versionadded:: 3.10
%End

virtual void saveConnection( QgsAbstractProviderConnection *connection, const QVariantMap &configuration = QVariantMap() );
virtual void saveConnection( const QgsAbstractProviderConnection *connection, const QString &name );
%Docstring
Stores the connection in the settings

:param connection: the connection to be stored in the settings
:param configuration: stores additional connection settings that not part of the data source URI
:param name: the name under which the connection will be stored

.. versionadded:: 3.10
%End
Expand Down
4 changes: 2 additions & 2 deletions python/plugins/db_manager/db_plugins/gpkg/plugin.py
Expand Up @@ -85,8 +85,8 @@ def connect(self, parent=None):
@classmethod
def addConnection(self, conn_name, uri):
md = QgsProviderRegistry.instance().providerMetadata(self.providerName())
conn = md.createConnection(conn_name, uri.database())
md.saveConnection(conn)
conn = md.createConnection(uri.database(), {})
md.saveConnection(conn, conn_name)
return True

@classmethod
Expand Down
18 changes: 8 additions & 10 deletions src/core/providers/ogr/qgsgeopackageproviderconnection.cpp
Expand Up @@ -35,31 +35,29 @@ QgsGeoPackageProviderConnection::QgsGeoPackageProviderConnection( const QString
setUri( settings.value( QStringLiteral( "path" ) ).toString() );
}

QgsGeoPackageProviderConnection::QgsGeoPackageProviderConnection( const QString &name, const QString &uri ):
QgsAbstractDatabaseProviderConnection( name )
QgsGeoPackageProviderConnection::QgsGeoPackageProviderConnection( const QString &uri, const QVariantMap &configuration ):
QgsAbstractDatabaseProviderConnection( uri, configuration )
{
setDefaultCapabilities();
setUri( uri );
}

void QgsGeoPackageProviderConnection::store( const QVariantMap &configuration ) const
void QgsGeoPackageProviderConnection::store( const QString &name ) const
{
Q_UNUSED( configuration );
QgsSettings settings;
settings.beginGroup( QStringLiteral( "ogr" ), QgsSettings::Section::Providers );
settings.beginGroup( QStringLiteral( "GPKG" ) );
settings.beginGroup( QStringLiteral( "connections" ) );
settings.beginGroup( name() );
settings.beginGroup( name );
settings.setValue( QStringLiteral( "path" ), uri() );
}

void QgsGeoPackageProviderConnection::remove() const
void QgsGeoPackageProviderConnection::remove( const QString &name ) const
{
QgsSettings settings;
settings.beginGroup( QStringLiteral( "ogr" ), QgsSettings::Section::Providers );
settings.beginGroup( QStringLiteral( "GPKG" ) );
settings.beginGroup( QStringLiteral( "connections" ) );
settings.remove( name() );
settings.remove( name );
}


Expand Down Expand Up @@ -187,7 +185,7 @@ QList<QgsGeoPackageProviderConnection::TableProperty> QgsGeoPackageProviderConne
{
if ( row.size() != 6 )
{
throw QgsProviderConnectionException( QObject::tr( "Error listing tables from %1: wrong number of columns returned by query" ).arg( name() ) );
throw QgsProviderConnectionException( QObject::tr( "Error listing tables from %1: wrong number of columns returned by query" ).arg( uri() ) );
}
QgsGeoPackageProviderConnection::TableProperty property;
property.setTableName( row.at( 0 ).toString() );
Expand Down Expand Up @@ -234,7 +232,7 @@ QList<QgsGeoPackageProviderConnection::TableProperty> QgsGeoPackageProviderConne

if ( ! errCause.isEmpty() )
{
throw QgsProviderConnectionException( QObject::tr( "Error listing tables from %1: %2" ).arg( name() ).arg( errCause ) );
throw QgsProviderConnectionException( QObject::tr( "Error listing tables from %1: %2" ).arg( uri() ).arg( errCause ) );
}
// Filters
if ( flags )
Expand Down
6 changes: 3 additions & 3 deletions src/core/providers/ogr/qgsgeopackageproviderconnection.h
Expand Up @@ -26,13 +26,13 @@ class QgsGeoPackageProviderConnection : public QgsAbstractDatabaseProviderConnec
public:

QgsGeoPackageProviderConnection( const QString &name );
QgsGeoPackageProviderConnection( const QString &name, const QString &uri );
QgsGeoPackageProviderConnection( const QString &uri, const QVariantMap &configuration );


// QgsAbstractProviderConnection interface
public:
void store( const QVariantMap &configuration ) const override;
void remove() const override;
void store( const QString &name ) const override;
void remove( const QString &name ) const override;
void createVectorTable( const QString &schema, const QString &name, const QgsFields &fields, QgsWkbTypes::Type wkbType, const QgsCoordinateReferenceSystem &srs, bool overwrite, const QMap<QString, QVariant> *options ) const override;
void dropVectorTable( const QString &schema, const QString &name ) const override;
void dropRasterTable( const QString &schema, const QString &name ) const override;
Expand Down
9 changes: 4 additions & 5 deletions src/core/providers/ogr/qgsogrprovider.cpp
Expand Up @@ -6649,7 +6649,6 @@ void QgsOgrProviderMetadata::cleanupProvider()




QgsOgrProviderMetadata::QgsOgrProviderMetadata()
: QgsProviderMetadata( TEXT_PROVIDER_KEY, TEXT_PROVIDER_DESCRIPTION )
{
Expand Down Expand Up @@ -6678,19 +6677,19 @@ QgsAbstractProviderConnection *QgsOgrProviderMetadata::createConnection( const Q
return new QgsGeoPackageProviderConnection( connName );
}

QgsAbstractProviderConnection *QgsOgrProviderMetadata::createConnection( const QString &connName, const QString &uri )
QgsAbstractProviderConnection *QgsOgrProviderMetadata::createConnection( const QString &uri, const QVariantMap &configuration )
{
return new QgsGeoPackageProviderConnection( connName, uri );
return new QgsGeoPackageProviderConnection( uri, configuration );
}

void QgsOgrProviderMetadata::deleteConnection( const QString &name )
{
deleteConnectionProtected<QgsGeoPackageProviderConnection>( name );
}

void QgsOgrProviderMetadata::saveConnection( QgsAbstractProviderConnection *conn, const QVariantMap &configuration )
void QgsOgrProviderMetadata::saveConnection( const QgsAbstractProviderConnection *conn, const QString &name )
{
saveConnectionProtected( conn, configuration );
saveConnectionProtected( conn, name );
}

///@endcond
Expand Down
7 changes: 5 additions & 2 deletions src/core/providers/ogr/qgsogrprovider.h
Expand Up @@ -779,9 +779,12 @@ class QgsOgrProviderMetadata: public QgsProviderMetadata
public:
QMap<QString, QgsAbstractProviderConnection *> connections( bool cached ) override;
QgsAbstractProviderConnection *createConnection( const QString &name ) override;
QgsAbstractProviderConnection *createConnection( const QString &name, const QString &uri ) override;
void deleteConnection( const QString &name ) override;
void saveConnection( QgsAbstractProviderConnection *createConnection, const QVariantMap &configuration ) override;
void saveConnection( const QgsAbstractProviderConnection *connection, const QString &name ) override;

protected:

QgsAbstractProviderConnection *createConnection( const QString &uri, const QVariantMap &configuration ) override;

};

Expand Down
4 changes: 2 additions & 2 deletions src/core/qgsabstractdatabaseproviderconnection.cpp
Expand Up @@ -24,8 +24,8 @@ QgsAbstractDatabaseProviderConnection::QgsAbstractDatabaseProviderConnection( co

}

QgsAbstractDatabaseProviderConnection::QgsAbstractDatabaseProviderConnection( const QString &name, const QString &uri ):
QgsAbstractProviderConnection( name, uri )
QgsAbstractDatabaseProviderConnection::QgsAbstractDatabaseProviderConnection( const QString &uri, const QVariantMap &configuration ):
QgsAbstractProviderConnection( uri, configuration )
{

}
Expand Down
4 changes: 2 additions & 2 deletions src/core/qgsabstractdatabaseproviderconnection.h
Expand Up @@ -301,12 +301,12 @@ class CORE_EXPORT QgsAbstractDatabaseProviderConnection : public QgsAbstractProv
QgsAbstractDatabaseProviderConnection( const QString &name );

/**
* Creates a new connection with \a name and initializes the connection from the \a uri.
* Creates a new connection from the given \a uri and \a configuration.
* The connection is not automatically stored in the settings.
* \see store()
*/
QgsAbstractDatabaseProviderConnection( const QString &uri, const QVariantMap &configuration );

QgsAbstractDatabaseProviderConnection( const QString &name, const QString &uri );

// Public interface

Expand Down
23 changes: 14 additions & 9 deletions src/core/qgsabstractproviderconnection.cpp
Expand Up @@ -17,24 +17,19 @@


QgsAbstractProviderConnection::QgsAbstractProviderConnection( const QString &name )
: mConnectionName( name )
{
Q_UNUSED( name );
// Note: concrete classes must implement the logic to read the configuration from the settings
// and create mUri
}

QgsAbstractProviderConnection::QgsAbstractProviderConnection( const QString &name, const QString &uri )
: mConnectionName( name )
, mUri( uri )
QgsAbstractProviderConnection::QgsAbstractProviderConnection( const QString &uri, const QVariantMap &configuration )
: mUri( uri )
, mConfiguration( configuration )
{

}

QString QgsAbstractProviderConnection::name() const
{
return mConnectionName;
}

QString QgsAbstractProviderConnection::uri() const
{
return mUri;
Expand All @@ -44,3 +39,13 @@ void QgsAbstractProviderConnection::setUri( const QString &uri )
{
mUri = uri;
}

QVariantMap QgsAbstractProviderConnection::configuration() const
{
return mConfiguration;
}

void QgsAbstractProviderConnection::setConfiguration( const QVariantMap &configuration )
{
mConfiguration = configuration;
}

0 comments on commit a092a82

Please sign in to comment.