QGIS API Documentation 3.43.0-Master (b60ef06885e)
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_sip.h"
23#include <QString>
24#include <QObject>
25#include <QStack>
26
27#include "qgis_core.h"
28#include "qgis_sip.h"
29
31class QgsVectorLayer;
32
58class CORE_EXPORT QgsTransaction : public QObject SIP_ABSTRACT
59{
60 Q_OBJECT
61
62 public:
63
68 static QgsTransaction *create( const QString &connString, const QString &providerKey ) SIP_FACTORY;
69
75 static QgsTransaction *create( const QSet<QgsVectorLayer *> &layers ) SIP_FACTORY;
76
77 ~QgsTransaction() override;
78
83 QString connectionString() const;
84
92 bool addLayer( QgsVectorLayer *layer, bool addLayersInEditMode = false );
93
104 bool begin( QString &errorMsg SIP_OUT, int statementTimeout = 20 );
105
109 bool commit( QString &errorMsg SIP_OUT );
110
114 bool rollback( QString &errorMsg SIP_OUT );
115
126 virtual bool executeSql( const QString &sql, QString &error SIP_OUT, bool isDirty = false, const QString &name = QString() ) = 0;
127
131 static bool supportsTransaction( const QgsVectorLayer *layer );
132
138 QString createSavepoint( QString &error SIP_OUT );
139
144 virtual QString createSavepoint( const QString &savePointId, QString &error SIP_OUT );
145
149 virtual bool rollbackToSavepoint( const QString &name, QString &error SIP_OUT );
150
154 void dirtyLastSavePoint();
155
159 QList< QString > savePoints() const { return QList< QString >::fromVector( mSavepoints ); }
160
164 bool lastSavePointIsDirty() const { return mLastSavePointIsDirty; }
165
167 // For internal use only, or by QgsTransactionGroup
168 static QString connectionString( const QString &layerUri ) SIP_SKIP;
170
171 signals:
172
177
182 void afterRollbackToSavepoint( const QString &savepointName );
183
187 void dirtied( const QString &sql, const QString &name );
188
189 protected:
190 QgsTransaction( const QString &connString ) SIP_SKIP;
191
192 QString mConnString;
194 QStack< QString > mSavepoints;
196
197 private slots:
198 void onLayerDeleted();
199
200 private:
201
202 QSet<QgsVectorLayer *> mLayers;
203
204 void setLayerTransactionIds( QgsTransaction *transaction );
205
206 static QString cleanupConnectionString( const QString &str );
207
208 virtual bool beginTransaction( QString &error, int statementTimeout ) = 0;
209 virtual bool commitTransaction( QString &error ) = 0;
210 virtual bool rollbackTransaction( QString &error ) = 0;
211};
212
213#endif // QGSTRANSACTION_H
Allows creation of a multi-layer database-side transaction.
QStack< QString > mSavepoints
void afterRollbackToSavepoint(const QString &savepointName)
Emitted after a rollback to savepoint.
void afterRollback()
Emitted after a rollback.
QList< QString > savePoints() const
returns savepoints
virtual bool executeSql(const QString &sql, QString &error, bool isDirty=false, const QString &name=QString())=0
Execute the sql string.
bool lastSavePointIsDirty() const
returns the last created savepoint
void dirtied(const QString &sql, const QString &name)
Emitted if a sql query is executed and the underlying data is modified.
Base class for vector data providers.
Represents a vector layer which manages a vector based dataset.
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_ABSTRACT
Definition qgis_sip.h:213
#define SIP_FACTORY
Definition qgis_sip.h:76