QGIS API Documentation 3.27.0-Master (9c08adf5ef)
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
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
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
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(const QString &pkField, const QString &filename, const QString &table, QgsVectorLayer *vlayer)
Constructor.
QgsAuxiliaryLayer & operator=(QgsAuxiliaryLayer const &rhs)=delete
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