QGIS API Documentation  3.27.0-Master (597e8eebd4)
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 
61 class CORE_EXPORT QgsAuxiliaryLayer : public QgsVectorLayer
62 {
63  Q_OBJECT
64 
65  public:
66 
75  QgsAuxiliaryLayer( const QString &pkField, const QString &filename, const QString &table, QgsVectorLayer *vlayer );
76 
80  QgsAuxiliaryLayer( const QgsAuxiliaryLayer &rhs ) = delete;
81 
83 
84 #ifdef SIP_RUN
85  SIP_PYOBJECT __repr__();
86  % MethodCode
87  QString str = QStringLiteral( "<QgsAuxiliaryLayer: '%1'>" ).arg( sipCpp->name() );
88  sipRes = PyUnicode_FromString( str.toUtf8().constData() );
89  % End
90 #endif
91 
92 #ifdef __clang__
93 #pragma clang diagnostic push
94 #pragma clang diagnostic ignored "-Woverloaded-virtual"
95 #endif
96 
105 #ifdef __clang__
106 #pragma clang diagnostic pop
107 #endif
108 
115  QgsVectorLayer *toSpatialLayer() const;
116 
123  bool clear();
124 
128  QgsVectorLayerJoinInfo joinInfo() const;
129 
138  bool exists( const QgsPropertyDefinition &definition ) const;
139 
149  bool addAuxiliaryField( const QgsPropertyDefinition &definition );
150 
154  QgsFields auxiliaryFields() const;
155 
161  bool save();
162 
171  bool deleteAttribute( int attr ) override;
172 
179  bool isHiddenProperty( int index ) const;
180 
189  int indexOfPropertyDefinition( const QgsPropertyDefinition &definition ) const;
190 
199  int propertyFromIndex( int index ) const;
200 
206  QgsPropertyDefinition propertyDefinitionFromIndex( int index ) const;
207 
218  static int createProperty( QgsPalLayerSettings::Property property, QgsVectorLayer *vlayer, bool overwriteExisting = true );
219 
230  static int createProperty( QgsDiagramLayerSettings::Property property, QgsVectorLayer *vlayer, bool overwriteExisting = true );
231 
243  static int createProperty( QgsCallout::Property property, QgsVectorLayer *vlayer, bool overwriteExisting = true );
244 
250  static QgsField createAuxiliaryField( const QgsPropertyDefinition &definition );
251 
257  static QgsField createAuxiliaryField( const QgsField &field );
258 
265  static QString nameFromProperty( const QgsPropertyDefinition &def, bool joined = false );
266 
272  static QgsPropertyDefinition propertyDefinitionFromField( const QgsField &field );
273 
274  private:
275  QgsVectorLayerJoinInfo mJoinInfo;
276  QString mFileName;
277  QString mTable;
278  QgsVectorLayer *mLayer = nullptr;
279 };
280 
281 
291 class CORE_EXPORT QgsAuxiliaryStorage
292 {
293  public:
294 
306  QgsAuxiliaryStorage( const QgsProject &project, bool copy = true );
307 
329  QgsAuxiliaryStorage( const QString &filename = QString(), bool copy = true );
330 
334  virtual ~QgsAuxiliaryStorage();
335 
341  bool isValid() const;
342 
346  QString fileName() const;
347 
352  QString currentFileName() const;
353 
360  QString errorString() const;
361 
367  bool saveAs( const QString &filename );
368 
376  bool saveAs( const QgsProject &project );
377 
383  bool save() const;
384 
395  QgsAuxiliaryLayer *createAuxiliaryLayer( const QgsField &field, QgsVectorLayer *layer ) const SIP_FACTORY;
396 
404  static bool deleteTable( const QgsDataSourceUri &uri );
405 
414  static bool duplicateTable( const QgsDataSourceUri &uri, const QString &newTable );
415 
419  static QString extension();
420 
428  static bool exists( const QgsProject &project );
429 
430  private:
431  sqlite3_database_unique_ptr open( const QString &filename = QString() );
432  sqlite3_database_unique_ptr open( const QgsProject &project );
433 
434  void initTmpFileName();
435 
436  static QString filenameForProject( const QgsProject &project );
437  static sqlite3_database_unique_ptr createDB( const QString &filename );
438  static sqlite3_database_unique_ptr openDB( const QString &filename );
439  static bool tableExists( const QString &table, sqlite3 *handler );
440  static bool createTable( const QString &type, const QString &table, sqlite3 *handler, QString &errorMsg );
441 
442  static bool exec( const QString &sql, sqlite3 *handler );
443  static QString debugMsg( const QString &sql, sqlite3 *handler );
444 
445  static QgsDataSourceUri parseOgrUri( const QgsDataSourceUri &uri );
446 
447  bool mValid = false;
448  QString mFileName; // original filename
449  QString mTmpFileName; // temporary filename used in copy mode
450  bool mCopy = false;
451  mutable QString mErrorString;
452 };
453 
454 #endif
Class allowing to manage the auxiliary storage for a vector layer.
QgsAuxiliaryLayer & operator=(QgsAuxiliaryLayer const &rhs)=delete
QgsAuxiliaryLayer(const QString &pkField, const QString &filename, const QString &table, QgsVectorLayer *vlayer)
Constructor.
QgsAuxiliaryLayer(const QgsAuxiliaryLayer &rhs)=delete
Copy constructor deactivated.
Class providing some utility methods to manage auxiliary storage.
Property
Data definable properties.
Definition: qgscallout.h:84
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:51
Container of fields for a vector layer.
Definition: qgsfields.h:45
bool isValid
Definition: qgsmaplayer.h:81
Property
Data definable properties.
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:104
Definition for a property.
Definition: qgsproperty.h:47
Defines left outer join from our vector layer to some other vector layer.
Represents a vector layer which manages a vector based data sets.
virtual bool deleteAttribute(int attr)
Deletes an attribute field (but does not commit it).
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:37
#define SIP_FACTORY
Definition: qgis_sip.h:76
struct sqlite3 sqlite3
const QgsField & field
Definition: qgsfield.h:463