QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
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
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"
26#include "qgsproperty.h"
27#include "qgssqliteutils.h"
28#include "qgsvectorlayer.h"
29#include "qgscallout.h"
30#include <QString>
31
32class QgsProject;
33
61class 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
116
123 bool clear();
124
129
138 bool exists( const QgsPropertyDefinition &definition ) const;
139
149 bool addAuxiliaryField( const QgsPropertyDefinition &definition );
150
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
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
251
258
265 static QString nameFromProperty( const QgsPropertyDefinition &def, bool joined = false );
266
273
274 private:
275 QgsVectorLayerJoinInfo mJoinInfo;
276 QString mFileName;
277 QString mTable;
278 QgsVectorLayer *mLayer = nullptr;
279};
280
281
291class 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
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
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.
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.
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,...
QgsVectorLayer * toSpatialLayer() const
An auxiliary layer is not spatial.
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.
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...
QgsAuxiliaryLayer & operator=(QgsAuxiliaryLayer const &rhs)=delete
QgsAuxiliaryLayer * clone(QgsVectorLayer *layer) const
Returns a new instance equivalent to this one.
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.
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.
QgsAuxiliaryLayer * createAuxiliaryLayer(const QgsField &field, QgsVectorLayer *layer) const
Creates an auxiliary layer for a vector layer.
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: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
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:46
Defines left outer join from our vector layer to some other vector layer.
Represents a vector layer which manages a vector based data sets.
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