QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
qgsdataprovider.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsdataprovider.h - DataProvider Interface class
3 --------------------------------------
4 Date : 09-Sep-2003
5 Copyright : (C) 2003 by Gary E.Sherman
6 email : sherman at mrcc.com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QQGSDATAPROVIDER_H
17#define QQGSDATAPROVIDER_H
18
19#include "qgis_core.h"
20#include <QDateTime>
21#include <QObject>
22#include <QString>
23#include <QStringList>
24#include <QMutex>
25
26#include "qgsdatasourceuri.h"
28#include "qgslayermetadata.h"
29#include "qgserror.h"
30
31class QgsRectangle;
34
35
40class CORE_EXPORT QgsDataProvider : public QObject
41{
42
43#ifdef SIP_RUN
45 if ( qobject_cast<QgsVectorDataProvider *>( sipCpp ) )
46 {
47 sipType = sipType_QgsVectorDataProvider;
48 }
49 else if ( qobject_cast<QgsRasterDataProvider *>( sipCpp ) )
50 {
51 sipType = sipType_QgsRasterDataProvider;
52 }
53 else if ( qobject_cast<QgsMeshDataProvider *>( sipCpp ) )
54 {
55 sipType = sipType_QgsMeshDataProvider;
56 }
57 else if ( qobject_cast<QgsPointCloudDataProvider *>( sipCpp ) )
58 {
59 sipType = sipType_QgsPointCloudDataProvider;
60 }
61 else
62 {
63 sipType = 0;
64 }
66#endif
67 Q_OBJECT
68
69 public:
70
71 // TODO QGIS 4: (re)move DataCapability as this enum is really meant for data items rather than data providers
72
77 {
78 NoDataCapabilities = 0,
79 File = 1,
80 Dir = 1 << 1,
81 Database = 1 << 2,
82 Net = 1 << 3 // Internet source
83 };
84 Q_DECLARE_FLAGS( DataCapabilities, DataCapability )
85
86
94 {
96 CustomData = 3000
97 };
98
99
108 {
109
114
115 };
116
122 {
123 FlagTrustDataSource = 1 << 0,
124 SkipFeatureCount = 1 << 1,
125 FlagLoadDefaultStyle = 1 << 2,
126 SkipGetExtent = 1 << 3,
127 SkipFullScan = 1 << 4,
128 ForceReadOnly = 1 << 5,
129 };
130 Q_DECLARE_FLAGS( ReadFlags, ReadFlag )
131
132
137 QgsDataProvider( const QString &uri = QString(),
139 QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
140
147
153 virtual void setDataSourceUri( const QString &uri )
154 {
155 mDataSourceURI = uri;
156 }
157
167 virtual QString dataSourceUri( bool expandAuthConfig = false ) const
168 {
169 if ( expandAuthConfig && mDataSourceURI.contains( QLatin1String( "authcfg" ) ) )
170 {
171 const QgsDataSourceUri uri( mDataSourceURI );
172 return uri.uri( expandAuthConfig );
173 }
174 else
175 {
176 return mDataSourceURI;
177 }
178 }
179
187 virtual QString dataComment() const { return QString(); };
188
189
195 void setUri( const QgsDataSourceUri &uri )
196 {
197 mDataSourceURI = uri.uri( true );
198 }
199
206 {
207 return QgsDataSourceUri( mDataSourceURI );
208 }
209
215 virtual Qgis::DataProviderFlags flags() const;
216
224 virtual QgsDataProviderTemporalCapabilities *temporalCapabilities();
225
233 virtual const QgsDataProviderTemporalCapabilities *temporalCapabilities() const SIP_SKIP;
234
239 virtual QgsRectangle extent() const = 0;
240
241
246 virtual bool isValid() const = 0;
247
251 virtual void updateExtents()
252 {
253 // NOP by default
254 }
255
256
263 virtual bool setSubsetString( const QString &subset, bool updateFeatureCount = true )
264 {
265 // NOP by default
266 Q_UNUSED( subset )
267 Q_UNUSED( updateFeatureCount )
268 return false;
269 }
270
271
275 virtual bool supportsSubsetString() const { return false; }
276
283 virtual QString subsetString() const
284 {
285 return QString();
286 }
287
288
297 virtual QStringList subLayers() const
298 {
299 return QStringList(); // Empty
300 }
301
309 virtual QStringList subLayerStyles() const
310 {
311 return QStringList(); // Empty
312 }
313
314
318 virtual uint subLayerCount() const
319 {
320 return 0;
321 }
322
323
329 virtual void setLayerOrder( const QStringList &layers )
330 {
331 //prevent unused var warnings
332 if ( layers.count() < 1 )
333 {
334 return;
335 }
336 // NOOP
337 }
338
339
343 virtual void setSubLayerVisibility( const QString &name, bool vis )
344 {
345 //prevent unused var warnings
346 if ( name.isEmpty() || !vis )
347 {
348 return;
349 }
350 // NOOP
351 }
352
353
369 virtual QString name() const = 0;
370
371
384 virtual QString description() const = 0;
385
386
397 virtual QString fileVectorFilters() const
398 {
399 return QString();
400 }
401
402
413 virtual QString fileRasterFilters() const
414 {
415 return QString();
416 }
417
418 // TODO QGIS 4 -> Make `reloadData()` non virtual. This should be implemented in `reloadProviderData()`.
419
427 virtual void reloadData();
428
430 virtual QDateTime timestamp() const { return mTimestamp; }
431
433 virtual QDateTime dataTimestamp() const { return QDateTime(); }
434
440 virtual QgsError error() const { return mError; }
441
446 virtual void invalidateConnections( const QString &connection ) { Q_UNUSED( connection ) }
447
470 virtual bool enterUpdateMode() { return true; }
471
489 virtual bool leaveUpdateMode() { return true; }
490
497 void setProviderProperty( ProviderProperty property, const QVariant &value );
498
505 void setProviderProperty( int property, const QVariant &value ); // SIP_SKIP
506
513 QVariant providerProperty( ProviderProperty property, const QVariant &defaultValue = QVariant() ) const;
514
521 QVariant providerProperty( int property, const QVariant &defaultValue ) const; // SIP_SKIP
522
533 virtual void setListening( bool isListening );
534
535#ifndef SIP_RUN
536
543 {
545 double lastRenderingTimeMs = -1;
546
548 double maxRenderingTimeMs = MAXIMUM_LAYER_PREVIEW_TIME_MS;
549 };
550#endif
551
564 virtual bool renderInPreview( const QgsDataProvider::PreviewContext &context ); // SIP_SKIP
565
574 virtual QgsLayerMetadata layerMetadata() const { return QgsLayerMetadata(); }
575
584 virtual bool writeLayerMetadata( const QgsLayerMetadata &metadata ) { Q_UNUSED( metadata ) return false; }
585
593 QgsCoordinateTransformContext transformContext() const SIP_SKIP;
594
605 virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) SIP_SKIP;
606
613 static QString sublayerSeparator();
614
615 signals:
616
623 void fullExtentCalculated();
624
637 void dataChanged();
638
646 void notify( const QString &msg );
647
648
649 protected:
650
654 QDateTime mTimestamp;
655
657 QgsError mError;
658
660 void appendError( const QgsErrorMessage &message ) { mError.append( message ); }
661
663 void setError( const QgsError &error ) { mError = error;}
664
666 QgsDataProvider::ReadFlags mReadFlags = QgsDataProvider::ReadFlags();
667
668 private:
669
674 QString mDataSourceURI;
675
677
678 QMap< int, QVariant > mProviderProperties;
679
683 mutable QMutex mOptionsMutex;
684
689 virtual void reloadProviderData() {}
690};
691
692Q_DECLARE_OPERATORS_FOR_FLAGS( QgsDataProvider::ReadFlags )
693
694#endif
This class represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
Base class for handling properties relating to a data provider's temporal capabilities.
Abstract base class for spatial data provider implementations.
virtual void invalidateConnections(const QString &connection)
Invalidate connections corresponding to specified name.
virtual bool leaveUpdateMode()
Leave update mode.
void setUri(const QgsDataSourceUri &uri)
Set the data source specification.
virtual void setLayerOrder(const QStringList &layers)
Reorder the list of layer names to be rendered by this provider (in order from bottom to top)
ReadFlag
Flags which control dataprovider construction.
virtual QString name() const =0
Returns a provider name.
void setError(const QgsError &error)
Sets error message.
virtual QDateTime timestamp() const
Time stamp of data source in the moment when data/metadata were loaded by provider.
virtual QgsCoordinateReferenceSystem crs() const =0
Returns the coordinate system for the data source.
virtual QString dataComment() const
Returns a short comment for the data that this provider is providing access to (e....
ProviderProperty
Properties are used to pass custom configuration options into data providers.
@ EvaluateDefaultValues
Evaluate default values on provider side when calling QgsVectorDataProvider::defaultValue( int index ...
virtual QString subsetString() const
Returns the subset definition string (typically sql) currently in use by the layer and used by the pr...
virtual QgsLayerMetadata layerMetadata() const
Returns layer metadata collected from the provider's source.
virtual void setDataSourceUri(const QString &uri)
Set the data source specification.
virtual QString fileRasterFilters() const
Returns raster file filter string.
virtual QgsError error() const
Gets current status error.
DataCapability
Used in browser model to understand which items for which providers should be populated.
virtual QDateTime dataTimestamp() const
Current time stamp of data source.
virtual bool supportsSubsetString() const
Returns true if the provider supports setting of subset strings.
virtual QString dataSourceUri(bool expandAuthConfig=false) const
Gets the data source specification.
virtual QString description() const =0
Returns description.
QgsDataSourceUri uri() const
Gets the data source specification.
virtual QString fileVectorFilters() const
Returns vector file filter string.
virtual QStringList subLayerStyles() const
Sub-layer styles for each sub-layer handled by this provider, in order from bottom to top.
virtual bool setSubsetString(const QString &subset, bool updateFeatureCount=true)
Set the subset string used to create a subset of features in the layer.
virtual uint subLayerCount() const
Returns the number of layers for the current data source.
virtual QStringList subLayers() const
Sub-layers handled by this provider, in order from bottom to top.
virtual bool writeLayerMetadata(const QgsLayerMetadata &metadata)
Writes layer metadata to the underlying provider source.
virtual bool enterUpdateMode()
Enter update mode.
virtual void setSubLayerVisibility(const QString &name, bool vis)
Set the visibility of the given sublayer name.
Class for storing the component parts of a RDBMS data source URI (e.g.
QString uri(bool expandAuthConfig=true) const
Returns the complete URI as a string.
QgsErrorMessage represents single error message.
Definition: qgserror.h:33
QgsError is container for error messages (report).
Definition: qgserror.h:81
void append(const QString &message, const QString &tag)
Append new error message.
Definition: qgserror.cpp:39
A structured metadata store for a map layer.
A rectangle specified with double values.
Definition: qgsrectangle.h:42
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:186
#define SIP_SKIP
Definition: qgis_sip.h:126
#define SIP_END
Definition: qgis_sip.h:203
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsField::ConfigurationFlags) CORE_EXPORT QDataStream &operator<<(QDataStream &out
Writes the field to stream out. QGIS version compatibility is not guaranteed.
Stores settings related to the context in which a preview job runs.
Setting options for creating vector data providers.
QgsCoordinateTransformContext transformContext
Coordinate transform context.