18#include "moc_qgstransaction.cpp" 
   35  if ( layers.isEmpty() )
 
   47      if ( !transaction->addLayer( layer, 
false ) )
 
   54  return transaction.release();
 
 
   59  : mConnString( connString )
 
   60  , mTransactionActive( false )
 
   61  , mLastSavePointIsDirty( true )
 
 
   67  setLayerTransactionIds( 
nullptr );
 
 
   77QString QgsTransaction::cleanupConnectionString( 
const QString &str )
 
   81  static const QStringList toRemove
 
   83    { QStringLiteral( 
"|layername=" )},
 
   84    { QStringLiteral( 
"|layerid=" )},
 
   85    { QStringLiteral( 
"|subset=" )},
 
   88  for ( 
const auto &strToRm : std::as_const( toRemove ) )
 
   90    const int pos = res.indexOf( strToRm );
 
   93      const int end = res.indexOf( 
'|', pos + 1 );
 
   96        res = res.mid( 0, pos ) + res.mid( end );
 
  100        res = res.mid( 0, pos );
 
  114  if ( connString.isEmpty() )
 
  116    connString = cleanupConnectionString( layerUri );
 
  127  if ( ! addLayersInEditMode
 
  142    QgsDebugError( QStringLiteral( 
"Couldn't start transaction because connection string for layer %1 : '%2' does not match '%3'" ).arg(
 
  148  connect( layer, &QgsVectorLayer::destroyed, 
this, &QgsTransaction::onLayerDeleted );
 
  149  mLayers.insert( layer );
 
 
  163  if ( !beginTransaction( errorMsg, statementTimeout ) )
 
  166  setLayerTransactionIds( 
this );
 
 
  177  if ( !commitTransaction( errorMsg ) )
 
  180  setLayerTransactionIds( 
nullptr );
 
 
  191  if ( !rollbackTransaction( errorMsg ) )
 
  194  setLayerTransactionIds( 
nullptr );
 
 
  212void QgsTransaction::onLayerDeleted()
 
  217void QgsTransaction::setLayerTransactionIds( 
QgsTransaction *transaction )
 
  219  const auto constMLayers = mLayers;
 
  222    if ( vl->dataProvider() )
 
  224      vl->dataProvider()->setTransaction( transaction );
 
  239  const QString name( QStringLiteral( 
"qgis" ) + ( QUuid::createUuid().toString().mid( 1, 24 ).replace( 
'-', QString() ) ) );
 
 
@ TransactionSupport
Supports transactions.
 
void dataChanged()
Emitted whenever a change is made to the data provider which may have caused changes in the provider'...
 
Stores the component parts of a data source URI (e.g.
 
QString connectionInfo(bool expandAuthConfig=true) const
Returns the connection part of the URI.
 
static QString quotedColumnRef(QString name)
Returns a quoted column reference (in double quotes)
 
QString source() const
Returns the source for the layer.
 
QString providerType() const
Returns the provider type (provider key) for this layer.
 
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true, const char *file=__builtin_FILE(), const char *function=__builtin_FUNCTION(), int line=__builtin_LINE())
Adds a message to the log instance (and creates it if necessary).
 
QgsTransaction * createTransaction(const QString &providerKey, const QString &connString)
Returns new instance of transaction.
 
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
 
Allows creation of a multi-layer database-side transaction.
 
QStack< QString > mSavepoints
 
void afterRollbackToSavepoint(const QString &savepointName)
Emitted after a rollback to savepoint.
 
bool mLastSavePointIsDirty
 
void afterRollback()
Emitted after a rollback.
 
bool rollback(QString &errorMsg)
Roll back transaction.
 
bool addLayer(QgsVectorLayer *layer, bool addLayersInEditMode=false)
Add the layer to the transaction.
 
bool begin(QString &errorMsg, int statementTimeout=20)
Begin transaction The statementTimeout (in seconds) specifies how long an sql statement is allowed to...
 
static bool supportsTransaction(const QgsVectorLayer *layer)
Checks if the provider of a given layer supports transactions.
 
virtual bool rollbackToSavepoint(const QString &name, QString &error)
rollback to save point, the save point is maintained and is "undertied"
 
virtual bool executeSql(const QString &sql, QString &error, bool isDirty=false, const QString &name=QString())=0
Execute the sql string.
 
QgsTransaction(const QString &connString)
 
QString connectionString() const
Returns the connection string of the transaction.
 
bool commit(QString &errorMsg)
Commit transaction.
 
~QgsTransaction() override
 
static QgsTransaction * create(const QString &connString, const QString &providerKey)
Create a transaction for the specified connection string connString and provider with providerKey.
 
QString createSavepoint(QString &error)
creates a save point returns empty string on error returns the last created savepoint if it's not dir...
 
void dirtyLastSavePoint()
dirty save point such that next call to createSavepoint will create a new one
 
virtual Q_INVOKABLE Qgis::VectorProviderCapabilities capabilities() const
Returns flags containing the supported capabilities.
 
virtual QgsTransaction * transaction() const
Returns the transaction this data provider is included in, if any.
 
Represents a vector layer which manages a vector based dataset.
 
bool isEditable() const FINAL
Returns true if the provider is in editing mode.
 
QgsVectorDataProvider * dataProvider() FINAL
Returns the layer's data provider, it may be nullptr.
 
#define QgsDebugError(str)