QGIS API Documentation  3.0.2-Girona (307d082)
qgstransaction.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgstransaction.h
3  ----------------
4  begin : May 5, 2014
5  copyright : (C) 2014 by Marco Hugentobler
6  email : marco dot hugentobler at sourcepole dot ch
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 QGSTRANSACTION_H
19 #define QGSTRANSACTION_H
20 
21 #include <QSet>
22 #include "qgis.h"
23 #include <QString>
24 #include <QObject>
25 #include <QStack>
26 
27 #include "qgis_core.h"
28 #include "qgis_sip.h"
29 
31 class QgsVectorLayer;
32 
56 class CORE_EXPORT QgsTransaction : public QObject SIP_ABSTRACT
57 {
58  Q_OBJECT
59 
60  public:
61 
66  static QgsTransaction *create( const QString &connString, const QString &providerKey ) SIP_FACTORY;
67 
73  static QgsTransaction *create( const QSet<QgsVectorLayer *> &layers ) SIP_FACTORY;
74 
75  ~QgsTransaction() override;
76 
81  bool addLayer( QgsVectorLayer *layer );
82 
93  bool begin( QString &errorMsg SIP_OUT, int statementTimeout = 20 );
94 
98  bool commit( QString &errorMsg SIP_OUT );
99 
103  bool rollback( QString &errorMsg SIP_OUT );
104 
115  virtual bool executeSql( const QString &sql, QString &error SIP_OUT, bool isDirty = false, const QString &name = QString() ) = 0;
116 
120  static bool supportsTransaction( const QgsVectorLayer *layer );
121 
128  QString createSavepoint( QString &error SIP_OUT );
129 
135  QString createSavepoint( const QString &savePointId, QString &error SIP_OUT );
136 
141  bool rollbackToSavepoint( const QString &name, QString &error SIP_OUT );
142 
147  void dirtyLastSavePoint();
148 
153  QList< QString > savePoints() const { return QList< QString >::fromVector( mSavepoints ); }
154 
159  bool lastSavePointIsDirty() const { return mLastSavePointIsDirty; }
160 
161  signals:
162 
166  void afterRollback();
167 
171  void dirtied( const QString &sql, const QString &name );
172 
173  protected:
174  QgsTransaction( const QString &connString ) SIP_SKIP;
175 
176  QString mConnString;
177 
178  private slots:
179  void onLayerDeleted();
180 
181  private:
182 
183  bool mTransactionActive;
184  QSet<QgsVectorLayer *> mLayers;
185 
186  QStack< QString > mSavepoints;
187  bool mLastSavePointIsDirty;
188 
189  void setLayerTransactionIds( QgsTransaction *transaction );
190 
191  virtual bool beginTransaction( QString &error, int statementTimeout ) = 0;
192  virtual bool commitTransaction( QString &error ) = 0;
193  virtual bool rollbackTransaction( QString &error ) = 0;
194 };
195 
196 #endif // QGSTRANSACTION_H
bool lastSavePointIsDirty() const
returns the last created savepoint
#define SIP_ABSTRACT
Definition: qgis_sip.h:180
#define SIP_SKIP
Definition: qgis_sip.h:119
#define SIP_FACTORY
Definition: qgis_sip.h:69
This class allows including a set of layers in a database-side transaction, provided the layer data p...
#define SIP_OUT
Definition: qgis_sip.h:51
This is the base class for vector data providers.
Represents a vector layer which manages a vector based data sets.
QList< QString > savePoints() const
returns savepoints