Skip to content

Commit

Permalink
Trust layer metadata propagation
Browse files Browse the repository at this point in the history
The trust flag at the projetc level is only used to read vector layer extent from xml, not from provider.

This flag was not available at the vector layer and data provider level.

We propose a new QgsMapLayer reading flag to propagate the trust layer metadata prohect's read flag an d a new provider options to trust datasource config.
Trusting the datasource config means that the provider can use estimated metadata, the primary key is unique and the detectable geometry type and srid are the same as the requested.
  • Loading branch information
rldhont committed Sep 9, 2020
1 parent 3f4c632 commit 45e9ecb
Show file tree
Hide file tree
Showing 74 changed files with 333 additions and 176 deletions.
4 changes: 3 additions & 1 deletion python/core/auto_generated/mesh/qgsmeshdataprovider.sip.in
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -393,7 +393,9 @@ Responsible for reading native mesh data
#include "qgsmeshdataprovider.h" #include "qgsmeshdataprovider.h"
%End %End
public: public:
QgsMeshDataProvider( const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions ); QgsMeshDataProvider( const QString &uri,
const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
%Docstring %Docstring
Ctor Ctor
%End %End
Expand Down
18 changes: 16 additions & 2 deletions python/core/auto_generated/qgsdataprovider.sip.in
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -61,14 +61,25 @@ Abstract base class for spatial data provider implementations.


struct ProviderOptions struct ProviderOptions
{ {

QgsCoordinateTransformContext transformContext; QgsCoordinateTransformContext transformContext;

};

enum ReadFlag
{
FlagTrustDataSource,
}; };
typedef QFlags<QgsDataProvider::ReadFlag> ReadFlags;



QgsDataProvider( const QString &uri = QString(), const QgsDataProvider::ProviderOptions &providerOptions = QgsDataProvider::ProviderOptions() ); QgsDataProvider( const QString &uri = QString(),
const QgsDataProvider::ProviderOptions &providerOptions = QgsDataProvider::ProviderOptions(),
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
%Docstring %Docstring
Create a new dataprovider with the specified in the ``uri``. Create a new dataprovider with the specified in the ``uri``.


Additional creation options are specified within the ``options`` value. Additional creation options are specified within the ``options`` value and since QGIS 3.16 creation flags are specified within the ``flags`` value.
%End %End


virtual QgsCoordinateReferenceSystem crs() const = 0; virtual QgsCoordinateReferenceSystem crs() const = 0;
Expand Down Expand Up @@ -477,8 +488,11 @@ Add error message
Sets error message Sets error message
%End %End



}; };


QFlags<QgsDataProvider::ReadFlag> operator|(QgsDataProvider::ReadFlag f1, QFlags<QgsDataProvider::ReadFlag> f2);



/************************************************************************ /************************************************************************
* This file has been generated automatically from * * This file has been generated automatically from *
Expand Down
1 change: 1 addition & 0 deletions python/core/auto_generated/qgsmaplayer.sip.in
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -537,6 +537,7 @@ or layer with temporary data (as temporary mesh layer dataset)
enum ReadFlag enum ReadFlag
{ {
FlagDontResolveLayers, FlagDontResolveLayers,
FlagTrustLayerMetadata,
}; };
typedef QFlags<QgsMapLayer::ReadFlag> ReadFlags; typedef QFlags<QgsMapLayer::ReadFlag> ReadFlags;


Expand Down
8 changes: 7 additions & 1 deletion python/core/auto_generated/qgsprovidermetadata.sip.in
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -180,10 +180,16 @@ Builds the list of available mesh drivers metadata
.. versionadded:: 3.12 .. versionadded:: 3.12
%End %End


virtual QgsDataProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options ) /Factory/; virtual QgsDataProvider *createProvider( const QString &uri,
const QgsDataProvider::ProviderOptions &options,
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() ) /Factory/;
%Docstring %Docstring
Class factory to return a pointer to a newly created QgsDataProvider object Class factory to return a pointer to a newly created QgsDataProvider object


:param uri: the datasource uri
:param options: creation options
:param flags: creation flags, sing QGIS 3.16

.. versionadded:: 3.10 .. versionadded:: 3.10
%End %End


Expand Down
4 changes: 3 additions & 1 deletion python/core/auto_generated/qgsproviderregistry.sip.in
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -78,13 +78,15 @@ Sets library directory where to search for plugins


QgsDataProvider *createProvider( const QString &providerKey, QgsDataProvider *createProvider( const QString &providerKey,
const QString &dataSource, const QString &dataSource,
const QgsDataProvider::ProviderOptions &options = QgsDataProvider::ProviderOptions() ) /Factory/; const QgsDataProvider::ProviderOptions &options = QgsDataProvider::ProviderOptions(),
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() ) /Factory/;
%Docstring %Docstring
Creates a new instance of a provider. Creates a new instance of a provider.


:param providerKey: identifier of the provider :param providerKey: identifier of the provider
:param dataSource: string containing data source for the provider :param dataSource: string containing data source for the provider
:param options: provider options :param options: provider options
:param flags: provider flags since QGIS 3.16


:return: new instance of provider or ``None`` on error :return: new instance of provider or ``None`` on error


Expand Down
6 changes: 4 additions & 2 deletions python/core/auto_generated/qgsvectordataprovider.sip.in
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -68,13 +68,15 @@ of feature and attribute information from a spatial datasource.
UnknownCount, UnknownCount,
}; };


QgsVectorDataProvider( const QString &uri = QString(), const QgsDataProvider::ProviderOptions &providerOptions = QgsDataProvider::ProviderOptions() ); QgsVectorDataProvider( const QString &uri = QString(),
const QgsDataProvider::ProviderOptions &providerOptions = QgsDataProvider::ProviderOptions(),
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
%Docstring %Docstring
Constructor for a vector data provider. Constructor for a vector data provider.


The ``uri`` argument specifies the uniform resource locator (URI) for the associated dataset. The ``uri`` argument specifies the uniform resource locator (URI) for the associated dataset.


Additional creation options are specified within the ``options`` value. Additional creation options are specified within the ``options`` value and since QGIS 3.16 creation flags are specified within the ``flags`` value.
%End %End


virtual QgsAbstractFeatureSource *featureSource() const = 0 /Factory/; virtual QgsAbstractFeatureSource *featureSource() const = 0 /Factory/;
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -84,14 +84,16 @@ Base class for raster data providers.


QgsRasterDataProvider(); QgsRasterDataProvider();


QgsRasterDataProvider( const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions = QgsDataProvider::ProviderOptions() ); QgsRasterDataProvider( const QString &uri,
const QgsDataProvider::ProviderOptions &providerOptions = QgsDataProvider::ProviderOptions(),
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
%Docstring %Docstring
Constructor for QgsRasterDataProvider. Constructor for QgsRasterDataProvider.


The ``uri`` argument gives a provider-specific uri indicating the underlying data The ``uri`` argument gives a provider-specific uri indicating the underlying data
source and it's parameters. source and it's parameters.


The ``options`` argument specifies generic provider options. The ``options`` argument specifies generic provider options and since QGIS 3.16 creation flags are specified within the ``flags`` value.
%End %End


virtual QgsRasterInterface *clone() const = 0; virtual QgsRasterInterface *clone() const = 0;
Expand Down
3 changes: 2 additions & 1 deletion python/core/auto_generated/raster/qgsrasterlayer.sip.in
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -141,12 +141,13 @@ Set the data provider.
Use the version with ProviderOptions instead. Use the version with ProviderOptions instead.
%End %End


void setDataProvider( const QString &provider, const QgsDataProvider::ProviderOptions &options ); void setDataProvider( const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
%Docstring %Docstring
Set the data provider. Set the data provider.


:param provider: provider key string, must match a valid QgsRasterDataProvider key. E.g. "gdal", "wms", etc. :param provider: provider key string, must match a valid QgsRasterDataProvider key. E.g. "gdal", "wms", etc.
:param options: provider options :param options: provider options
:param flags: provider flags since QGIS 3.16


.. versionadded:: 3.2 .. versionadded:: 3.2
%End %End
Expand Down
5 changes: 3 additions & 2 deletions src/core/mesh/qgsmeshdataprovider.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@
#include "qgsmeshdataprovidertemporalcapabilities.h" #include "qgsmeshdataprovidertemporalcapabilities.h"
#include "qgsrectangle.h" #include "qgsrectangle.h"


QgsMeshDataProvider::QgsMeshDataProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options ) QgsMeshDataProvider::QgsMeshDataProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options,
: QgsDataProvider( uri, options ) QgsDataProvider::ReadFlags flags )
: QgsDataProvider( uri, options, flags )
{ {
} }


Expand Down
4 changes: 3 additions & 1 deletion src/core/mesh/qgsmeshdataprovider.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -399,7 +399,9 @@ class CORE_EXPORT QgsMeshDataProvider: public QgsDataProvider, public QgsMeshDat
Q_OBJECT Q_OBJECT
public: public:
//! Ctor //! Ctor
QgsMeshDataProvider( const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions ); QgsMeshDataProvider( const QString &uri,
const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );


QgsMeshDataProviderTemporalCapabilities *temporalCapabilities() override; QgsMeshDataProviderTemporalCapabilities *temporalCapabilities() override;
const QgsMeshDataProviderTemporalCapabilities *temporalCapabilities() const override SIP_SKIP; const QgsMeshDataProviderTemporalCapabilities *temporalCapabilities() const override SIP_SKIP;
Expand Down
18 changes: 14 additions & 4 deletions src/core/mesh/qgsmeshlayer.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -54,7 +54,12 @@ QgsMeshLayer::QgsMeshLayer( const QString &meshLayerPath,
if ( !meshLayerPath.isEmpty() && !providerKey.isEmpty() ) if ( !meshLayerPath.isEmpty() && !providerKey.isEmpty() )
{ {
QgsDataProvider::ProviderOptions providerOptions { options.transformContext }; QgsDataProvider::ProviderOptions providerOptions { options.transformContext };
ok = setDataProvider( providerKey, providerOptions ); QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags();
if ( mReadFlags & QgsMapLayer::FlagTrustLayerMetadata )
{
flags |= QgsDataProvider::FlagTrustDataSource;
}
ok = setDataProvider( providerKey, providerOptions, flags );
} }


if ( ok ) if ( ok )
Expand Down Expand Up @@ -1111,7 +1116,12 @@ bool QgsMeshLayer::readXml( const QDomNode &layer_node, QgsReadWriteContext &con
} }


QgsDataProvider::ProviderOptions providerOptions; QgsDataProvider::ProviderOptions providerOptions;
if ( !setDataProvider( mProviderKey, providerOptions ) ) QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags();
if ( mReadFlags & QgsMapLayer::FlagTrustLayerMetadata )
{
flags |= QgsDataProvider::FlagTrustDataSource;
}
if ( !setDataProvider( mProviderKey, providerOptions, flags ) )
{ {
return false; return false;
} }
Expand Down Expand Up @@ -1242,14 +1252,14 @@ QStringList QgsMeshLayer::subLayers() const
} }




bool QgsMeshLayer::setDataProvider( QString const &provider, const QgsDataProvider::ProviderOptions &options ) bool QgsMeshLayer::setDataProvider( QString const &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags )
{ {
delete mDataProvider; delete mDataProvider;


mProviderKey = provider; mProviderKey = provider;
QString dataSource = mDataSource; QString dataSource = mDataSource;


mDataProvider = qobject_cast<QgsMeshDataProvider *>( QgsProviderRegistry::instance()->createProvider( provider, dataSource, options ) ); mDataProvider = qobject_cast<QgsMeshDataProvider *>( QgsProviderRegistry::instance()->createProvider( provider, dataSource, options, flags ) );
if ( !mDataProvider ) if ( !mDataProvider )
{ {
QgsDebugMsgLevel( QStringLiteral( "Unable to get mesh data provider" ), 2 ); QgsDebugMsgLevel( QStringLiteral( "Unable to get mesh data provider" ), 2 );
Expand Down
3 changes: 2 additions & 1 deletion src/core/mesh/qgsmeshlayer.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -721,8 +721,9 @@ class CORE_EXPORT QgsMeshLayer : public QgsMapLayer
* Binds layer to a specific data provider * Binds layer to a specific data provider
* \param provider provider key string, must match a valid QgsMeshDataProvider key. E.g. "mesh_memory", etc. * \param provider provider key string, must match a valid QgsMeshDataProvider key. E.g. "mesh_memory", etc.
* \param options generic provider options * \param options generic provider options
* \param flags provider flags since QGIS 3.16
*/ */
bool setDataProvider( QString const &provider, const QgsDataProvider::ProviderOptions &options ); bool setDataProvider( QString const &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );


#ifdef SIP_RUN #ifdef SIP_RUN
QgsMeshLayer( const QgsMeshLayer &rhs ); QgsMeshLayer( const QgsMeshLayer &rhs );
Expand Down
4 changes: 2 additions & 2 deletions src/core/providers/gdal/qgsgdalprovider.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -2351,9 +2351,9 @@ QString QgsGdalProviderMetadata::encodeUri( const QVariantMap &parts )
} }




QgsGdalProvider *QgsGdalProviderMetadata::createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options ) QgsGdalProvider *QgsGdalProviderMetadata::createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags )
{ {
return new QgsGdalProvider( uri, options ); return new QgsGdalProvider( uri, options, flags );
} }


/** /**
Expand Down
2 changes: 1 addition & 1 deletion src/core/providers/gdal/qgsgdalprovider.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -367,7 +367,7 @@ class QgsGdalProviderMetadata final: public QgsProviderMetadata
QgsGdalProviderMetadata(); QgsGdalProviderMetadata();
QVariantMap decodeUri( const QString &uri ) override; QVariantMap decodeUri( const QString &uri ) override;
QString encodeUri( const QVariantMap &parts ) override; QString encodeUri( const QVariantMap &parts ) override;
QgsGdalProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options ) override; QgsGdalProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() ) override;
QgsGdalProvider *createRasterDataProvider( QgsGdalProvider *createRasterDataProvider(
const QString &uri, const QString &uri,
const QString &format, const QString &format,
Expand Down
10 changes: 6 additions & 4 deletions src/core/providers/memory/qgsmemoryprovider.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
#define TEXT_PROVIDER_KEY QStringLiteral( "memory" ) #define TEXT_PROVIDER_KEY QStringLiteral( "memory" )
#define TEXT_PROVIDER_DESCRIPTION QStringLiteral( "Memory provider" ) #define TEXT_PROVIDER_DESCRIPTION QStringLiteral( "Memory provider" )


QgsMemoryProvider::QgsMemoryProvider( const QString &uri, const ProviderOptions &options ) QgsMemoryProvider::QgsMemoryProvider( const QString &uri, const ProviderOptions &options, QgsDataProvider::ReadFlags flags )
: QgsVectorDataProvider( uri, options ) : QgsVectorDataProvider( uri, options, flags )
{ {
// Initialize the geometry with the uri to support old style uri's // Initialize the geometry with the uri to support old style uri's
// (ie, just 'point', 'line', 'polygon') // (ie, just 'point', 'line', 'polygon')
Expand Down Expand Up @@ -227,9 +227,11 @@ QString QgsMemoryProvider::providerDescription()
return TEXT_PROVIDER_DESCRIPTION; return TEXT_PROVIDER_DESCRIPTION;
} }


QgsMemoryProvider *QgsMemoryProvider::createProvider( const QString &uri, const ProviderOptions &options ) QgsMemoryProvider *QgsMemoryProvider::createProvider( const QString &uri,
const ProviderOptions &options,
QgsDataProvider::ReadFlags flags )
{ {
return new QgsMemoryProvider( uri, options ); return new QgsMemoryProvider( uri, options, flags );
} }


QgsAbstractFeatureSource *QgsMemoryProvider::featureSource() const QgsAbstractFeatureSource *QgsMemoryProvider::featureSource() const
Expand Down
6 changes: 4 additions & 2 deletions src/core/providers/memory/qgsmemoryprovider.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ class QgsMemoryProvider final: public QgsVectorDataProvider
Q_OBJECT Q_OBJECT


public: public:
explicit QgsMemoryProvider( const QString &uri, const QgsVectorDataProvider::ProviderOptions &coordinateTransformContext ); explicit QgsMemoryProvider( const QString &uri, const QgsVectorDataProvider::ProviderOptions &coordinateTransformContext,
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );


~QgsMemoryProvider() override; ~QgsMemoryProvider() override;


Expand All @@ -44,7 +45,8 @@ class QgsMemoryProvider final: public QgsVectorDataProvider
* Creates a new memory provider, with provider properties embedded within the given \a uri and \a options * Creates a new memory provider, with provider properties embedded within the given \a uri and \a options
* argument. * argument.
*/ */
static QgsMemoryProvider *createProvider( const QString &uri, const QgsVectorDataProvider::ProviderOptions &coordinateTransformContext ); static QgsMemoryProvider *createProvider( const QString &uri, const QgsVectorDataProvider::ProviderOptions &coordinateTransformContext,
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );


/* Implementation of functions from QgsVectorDataProvider */ /* Implementation of functions from QgsVectorDataProvider */


Expand Down
12 changes: 8 additions & 4 deletions src/core/providers/meshmemory/qgsmeshmemorydataprovider.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -45,8 +45,10 @@ QgsCoordinateReferenceSystem QgsMeshMemoryDataProvider::crs() const
return QgsCoordinateReferenceSystem(); return QgsCoordinateReferenceSystem();
} }


QgsMeshMemoryDataProvider::QgsMeshMemoryDataProvider( const QString &uri, const ProviderOptions &options ) QgsMeshMemoryDataProvider::QgsMeshMemoryDataProvider( const QString &uri,
: QgsMeshDataProvider( uri, options ) const ProviderOptions &options,
QgsDataProvider::ReadFlags flags )
: QgsMeshDataProvider( uri, options, flags )
{ {
QString data( uri ); QString data( uri );
// see QgsMeshLayer::setDataProvider how mDataSource is created for memory layers // see QgsMeshLayer::setDataProvider how mDataSource is created for memory layers
Expand All @@ -69,9 +71,11 @@ QString QgsMeshMemoryDataProvider::providerDescription()
return TEXT_PROVIDER_DESCRIPTION; return TEXT_PROVIDER_DESCRIPTION;
} }


QgsMeshMemoryDataProvider *QgsMeshMemoryDataProvider::createProvider( const QString &uri, const ProviderOptions &options ) QgsMeshMemoryDataProvider *QgsMeshMemoryDataProvider::createProvider( const QString &uri,
const ProviderOptions &options,
QgsDataProvider::ReadFlags flags )
{ {
return new QgsMeshMemoryDataProvider( uri, options ); return new QgsMeshMemoryDataProvider( uri, options, flags );
} }


bool QgsMeshMemoryDataProvider::splitMeshSections( const QString &uri ) bool QgsMeshMemoryDataProvider::splitMeshSections( const QString &uri )
Expand Down
7 changes: 5 additions & 2 deletions src/core/providers/meshmemory/qgsmeshmemorydataprovider.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ class CORE_EXPORT QgsMeshMemoryDataProvider final: public QgsMeshDataProvider
* ); * );
* \endcode * \endcode
*/ */
QgsMeshMemoryDataProvider( const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions ); QgsMeshMemoryDataProvider( const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );


bool isValid() const override; bool isValid() const override;
QString name() const override; QString name() const override;
Expand Down Expand Up @@ -157,7 +158,9 @@ class CORE_EXPORT QgsMeshMemoryDataProvider final: public QgsMeshDataProvider
//! Returns the memory provider description //! Returns the memory provider description
static QString providerDescription(); static QString providerDescription();
//! Provider factory //! Provider factory
static QgsMeshMemoryDataProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions ); static QgsMeshMemoryDataProvider *createProvider( const QString &uri,
const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );


private: private:
QgsRectangle calculateExtent( ) const; QgsRectangle calculateExtent( ) const;
Expand Down
9 changes: 5 additions & 4 deletions src/core/providers/ogr/qgsogrprovider.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -482,8 +482,8 @@ QgsVectorLayerExporter::ExportError QgsOgrProvider::createEmptyLayer( const QStr
return QgsVectorLayerExporter::NoError; return QgsVectorLayerExporter::NoError;
} }


QgsOgrProvider::QgsOgrProvider( QString const &uri, const ProviderOptions &options ) QgsOgrProvider::QgsOgrProvider( QString const &uri, const ProviderOptions &options, QgsDataProvider::ReadFlags flags )
: QgsVectorDataProvider( uri, options ) : QgsVectorDataProvider( uri, options, flags )
{ {
QgsApplication::registerOgrDrivers(); QgsApplication::registerOgrDrivers();


Expand Down Expand Up @@ -3564,9 +3564,10 @@ QStringList QgsOgrProviderUtils::wildcards()
* Class factory to return a pointer to a newly created * Class factory to return a pointer to a newly created
* QgsOgrProvider object * QgsOgrProvider object
*/ */
QgsOgrProvider *QgsOgrProviderMetadata::createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options ) QgsOgrProvider *QgsOgrProviderMetadata::createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options,
QgsDataProvider::ReadFlags flags )
{ {
return new QgsOgrProvider( uri, options ); return new QgsOgrProvider( uri, options, flags );
} }


/** /**
Expand Down
5 changes: 3 additions & 2 deletions src/core/providers/ogr/qgsogrprovider.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@ class QgsOgrProvider final: public QgsVectorDataProvider
* \param options generic data provider options * \param options generic data provider options
*/ */
explicit QgsOgrProvider( QString const &uri, explicit QgsOgrProvider( QString const &uri,
const QgsDataProvider::ProviderOptions &providerOptions ); const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );


~QgsOgrProvider() override; ~QgsOgrProvider() override;


Expand Down Expand Up @@ -742,7 +743,7 @@ class QgsOgrProviderMetadata final: public QgsProviderMetadata
void initProvider() override; void initProvider() override;
void cleanupProvider() override; void cleanupProvider() override;
QList< QgsDataItemProvider * > dataItemProviders() const override; QList< QgsDataItemProvider * > dataItemProviders() const override;
QgsOgrProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options ) override; QgsOgrProvider *createProvider( const QString &uri, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() ) override;
QVariantMap decodeUri( const QString &uri ) override; QVariantMap decodeUri( const QString &uri ) override;
QString encodeUri( const QVariantMap &parts ) override; QString encodeUri( const QVariantMap &parts ) override;
QString filters( FilterType type ) override; QString filters( FilterType type ) override;
Expand Down
4 changes: 3 additions & 1 deletion src/core/qgsdataprovider.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -19,10 +19,12 @@


#define SUBLAYER_SEPARATOR QStringLiteral( "!!::!!" ) #define SUBLAYER_SEPARATOR QStringLiteral( "!!::!!" )


QgsDataProvider::QgsDataProvider( const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions ) QgsDataProvider::QgsDataProvider( const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags )
: mDataSourceURI( uri ), : mDataSourceURI( uri ),
mOptions( providerOptions ) mOptions( providerOptions )
{ {
mReadFlags = flags;
} }


QgsDataProviderTemporalCapabilities *QgsDataProvider::temporalCapabilities() QgsDataProviderTemporalCapabilities *QgsDataProvider::temporalCapabilities()
Expand Down
Loading

0 comments on commit 45e9ecb

Please sign in to comment.