QGIS API Documentation  3.37.0-Master (a5b4d9743e8)
qgsauxiliarystorage.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsauxiliarystorage.h - description
3  -------------------
4  begin : Aug 28, 2017
5  copyright : (C) 2017 by Paul Blottiere
6  email : [email protected]
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #ifndef QGSAUXILIARYSTORAGE_H
19 #define QGSAUXILIARYSTORAGE_H
20 
21 #include "qgis_core.h"
22 #include "qgsdatasourceuri.h"
23 #include "qgspallabeling.h"
24 #include "qgsdiagramrenderer.h"
25 #include "qgsvectorlayerjoininfo.h"
26 #include "qgsproperty.h"
27 #include "qgssqliteutils.h"
28 #include "qgsvectorlayer.h"
29 #include "qgscallout.h"
30 #include <QString>
31 
32 class QgsProject;
33 
60 class CORE_EXPORT QgsAuxiliaryLayer : public QgsVectorLayer
61 {
62  Q_OBJECT
63 
64  public:
65 
74  QgsAuxiliaryLayer( const QString &pkField, const QString &filename, const QString &table, QgsVectorLayer *vlayer );
75 
79  QgsAuxiliaryLayer( const QgsAuxiliaryLayer &rhs ) = delete;
80 
82 
83 #ifdef SIP_RUN
84  SIP_PYOBJECT __repr__();
85  % MethodCode
86  QString str = QStringLiteral( "<QgsAuxiliaryLayer: '%1'>" ).arg( sipCpp->name() );
87  sipRes = PyUnicode_FromString( str.toUtf8().constData() );
88  % End
89 #endif
90 
91 #ifndef SIP_RUN
93 #endif
94 
103 
111 
118  bool clear();
119 
124 
133  bool exists( const QgsPropertyDefinition &definition ) const;
134 
144  bool addAuxiliaryField( const QgsPropertyDefinition &definition );
145 
150 
156  bool save();
157 
166  bool deleteAttribute( int attr ) override;
167 
174  bool isHiddenProperty( int index ) const;
175 
184  int indexOfPropertyDefinition( const QgsPropertyDefinition &definition ) const;
185 
194  int propertyFromIndex( int index ) const;
195 
202 
213  static int createProperty( QgsPalLayerSettings::Property property, QgsVectorLayer *vlayer, bool overwriteExisting = true );
214 
225  static int createProperty( QgsDiagramLayerSettings::Property property, QgsVectorLayer *vlayer, bool overwriteExisting = true );
226 
238  static int createProperty( QgsCallout::Property property, QgsVectorLayer *vlayer, bool overwriteExisting = true );
239 
246 
252  static QgsField createAuxiliaryField( const QgsField &field );
253 
260  static QString nameFromProperty( const QgsPropertyDefinition &def, bool joined = false );
261 
268 
269  private:
270  QgsVectorLayerJoinInfo mJoinInfo;
271  QString mFileName;
272  QString mTable;
273  QgsVectorLayer *mLayer = nullptr;
274 };
275 
276 
285 class CORE_EXPORT QgsAuxiliaryStorage
286 {
287  public:
288 
300  QgsAuxiliaryStorage( const QgsProject &project, bool copy = true );
301 
323  QgsAuxiliaryStorage( const QString &filename = QString(), bool copy = true );
324 
329 
335  bool isValid() const;
336 
340  QString fileName() const;
341 
346  QString currentFileName() const;
347 
354  QString errorString() const;
355 
361  bool saveAs( const QString &filename );
362 
370  bool saveAs( const QgsProject &project );
371 
377  bool save() const;
378 
390 
398  static bool deleteTable( const QgsDataSourceUri &uri );
399 
408  static bool duplicateTable( const QgsDataSourceUri &uri, const QString &newTable );
409 
413  static QString extension();
414 
422  static bool exists( const QgsProject &project );
423 
424  private:
425  sqlite3_database_unique_ptr open( const QString &filename = QString() );
426  sqlite3_database_unique_ptr open( const QgsProject &project );
427 
428  void initTmpFileName();
429 
430  static QString filenameForProject( const QgsProject &project );
431  static sqlite3_database_unique_ptr createDB( const QString &filename );
432  static sqlite3_database_unique_ptr openDB( const QString &filename );
433  static bool tableExists( const QString &table, sqlite3 *handler );
434  static bool createTable( const QString &type, const QString &table, sqlite3 *handler, QString &errorMsg );
435 
436  static bool exec( const QString &sql, sqlite3 *handler );
437  static QString debugMsg( const QString &sql, sqlite3 *handler );
438 
439  static QgsDataSourceUri parseOgrUri( const QgsDataSourceUri &uri );
440 
441  bool mValid = false;
442  QString mFileName; // original filename
443  QString mTmpFileName; // temporary filename used in copy mode
444  bool mCopy = false;
445  mutable QString mErrorString;
446 };
447 
448 #endif
Class allowing to manage the auxiliary storage for a vector layer.
static QString nameFromProperty(const QgsPropertyDefinition &def, bool joined=false)
Returns the name of the auxiliary field for a property definition.
static QgsField createAuxiliaryField(const QgsPropertyDefinition &definition)
Creates a new auxiliary field from a property definition.
QgsAuxiliaryLayer & operator=(QgsAuxiliaryLayer const &rhs)=delete
static QgsPropertyDefinition propertyDefinitionFromField(const QgsField &field)
Returns the property definition from an auxiliary field.
bool clear()
Deletes all features from the layer.
bool addAuxiliaryField(const QgsPropertyDefinition &definition)
Adds an auxiliary field for the given property.
bool isHiddenProperty(int index) const
Returns true if the underlying field has to be hidden from editing tools like attribute table,...
QgsAuxiliaryLayer * clone(QgsVectorLayer *layer) const
Returns a new instance equivalent to this one.
bool deleteAttribute(int attr) override
Removes attribute from the layer and commits changes.
QgsFields auxiliaryFields() const
Returns a list of all auxiliary fields currently managed by the layer.
QgsAuxiliaryLayer(const QString &pkField, const QString &filename, const QString &table, QgsVectorLayer *vlayer)
Constructor.
QgsVectorLayer * toSpatialLayer() const
An auxiliary layer is not spatial.
bool save()
Commits changes and starts editing then.
int propertyFromIndex(int index) const
Returns the underlying property key for the field index.
static int createProperty(QgsDiagramLayerSettings::Property property, QgsVectorLayer *vlayer, bool overwriteExisting=true)
Creates if necessary a new auxiliary field for a diagram's property and activates this property in se...
QgsVectorLayerJoinInfo joinInfo() const
Returns information to use for joining with primary key and so on.
QgsPropertyDefinition propertyDefinitionFromIndex(int index) const
Returns the property definition for the underlying field index.
bool exists(const QgsPropertyDefinition &definition) const
Returns true if the property is stored in the layer already, false otherwise.
static int createProperty(QgsCallout::Property property, QgsVectorLayer *vlayer, bool overwriteExisting=true)
Creates if necessary a new auxiliary field for a callout's property and activates this property in se...
static int createProperty(QgsPalLayerSettings::Property property, QgsVectorLayer *vlayer, bool overwriteExisting=true)
Creates if necessary a new auxiliary field for a PAL property and activates this property in settings...
static QgsField createAuxiliaryField(const QgsField &field)
Creates a new auxiliary field from a field.
int indexOfPropertyDefinition(const QgsPropertyDefinition &definition) const
Returns the index of the auxiliary field for a specific property definition.
QgsAuxiliaryLayer(const QgsAuxiliaryLayer &rhs)=delete
Copy constructor deactivated.
Class providing some utility methods to manage auxiliary storage.
QgsAuxiliaryStorage(const QString &filename=QString(), bool copy=true)
Constructor.
static QString extension()
Returns the extension used for auxiliary databases.
QgsAuxiliaryLayer * createAuxiliaryLayer(const QgsField &field, QgsVectorLayer *layer) const
Creates an auxiliary layer for a vector layer.
QString errorString() const
Returns the underlying error string describing potential errors happening in saveAs().
bool save() const
Saves the current database.
static bool exists(const QgsProject &project)
Returns true if the auxiliary database yet exists for a project, false otherwise.
virtual ~QgsAuxiliaryStorage()
Destructor.
bool saveAs(const QString &filename)
Saves the current database to a new path.
bool isValid() const
Returns the status of the auxiliary storage currently defined.
QString currentFileName() const
Returns the path of the current database used.
QgsAuxiliaryStorage(const QgsProject &project, bool copy=true)
Constructor.
QString fileName() const
Returns the target filename of the database.
static bool deleteTable(const QgsDataSourceUri &uri)
Removes a table from the auxiliary storage.
bool saveAs(const QgsProject &project)
Saves the current database to a new path for a specific project.
static bool duplicateTable(const QgsDataSourceUri &uri, const QString &newTable)
Duplicates a table and its content.
Property
Data definable properties.
Definition: qgscallout.h:85
Class for storing the component parts of a RDBMS data source URI (e.g.
Property
Data definable properties.
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:53
Container of fields for a vector layer.
Definition: qgsfields.h:45
Property
Data definable properties.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:107
Definition for a property.
Definition: qgsproperty.h:45
Defines left outer join from our vector layer to some other vector layer.
Represents a vector layer which manages a vector based data sets.
QgsVectorLayer * clone() const override
Returns a new instance equivalent to this one.
Unique pointer for sqlite3 databases, which automatically closes the database when the pointer goes o...
#define str(x)
Definition: qgis.cpp:38
#define SIP_FACTORY
Definition: qgis_sip.h:76
struct sqlite3 sqlite3