@@ -199,11 +199,11 @@ void QgsOgrProvider::repack()
199
199
QString errCause;
200
200
if ( mLayerName.isNull() )
201
201
{
202
- mOgrOrigLayer = QgsOgrProviderUtils::getLayer( mFilePath, true, QStringList(), mLayerIndex, errCause );
202
+ mOgrOrigLayer = QgsOgrProviderUtils::getLayer( mFilePath, true, QStringList(), mLayerIndex, errCause ).release() ;
203
203
}
204
204
else
205
205
{
206
- mOgrOrigLayer = QgsOgrProviderUtils::getLayer( mFilePath, true, QStringList(), mLayerName, errCause );
206
+ mOgrOrigLayer = QgsOgrProviderUtils::getLayer( mFilePath, true, QStringList(), mLayerName, errCause ).release() ;
207
207
}
208
208
209
209
if ( !mOgrOrigLayer )
@@ -299,24 +299,23 @@ QgsVectorLayerExporter::ExportError QgsOgrProvider::createEmptyLayer( const QStr
299
299
}
300
300
}
301
301
302
- QgsVectorFileWriter * writer = new QgsVectorFileWriter(
303
- uri, encoding, fields, wkbType,
304
- srs, driverName, dsOptions, layerOptions, nullptr,
305
- QgsVectorFileWriter::NoSymbology, nullptr,
306
- layerName, action );
302
+ std::unique_ptr< QgsVectorFileWriter > writer = qgis::make_unique< QgsVectorFileWriter > (
303
+ uri, encoding, fields, wkbType,
304
+ srs, driverName, dsOptions, layerOptions, nullptr,
305
+ QgsVectorFileWriter::NoSymbology, nullptr,
306
+ layerName, action );
307
307
308
308
QgsVectorFileWriter::WriterError error = writer->hasError();
309
309
if ( error )
310
310
{
311
311
if ( errorMessage )
312
312
*errorMessage += writer->errorMessage();
313
313
314
- delete writer;
315
314
return ( QgsVectorLayerExporter::ExportError ) error;
316
315
}
317
316
318
317
QMap<int, int> attrIdxMap = writer->attrIdxToOgrIdx();
319
- delete writer;
318
+ writer.reset() ;
320
319
321
320
if ( oldToNewAttrIdxMap )
322
321
{
@@ -527,11 +526,11 @@ bool QgsOgrProvider::setSubsetString( const QString &theSQL, bool updateFeatureC
527
526
pushError ( tr ( " OGR[%1] error %2: %3" ).arg ( CPLGetLastErrorType () ).arg ( CPLGetLastErrorNo () ).arg ( CPLGetLastErrorMsg () ) );
528
527
return false ;
529
528
}
530
- QgsOgrLayer * newLayer = QgsOgrProviderUtils::getSqlLayer ( mOgrOrigLayer , subsetLayerH, theSQL );
529
+ QgsOgrLayerUniquePtr newLayer = QgsOgrProviderUtils::getSqlLayer ( mOgrOrigLayer , subsetLayerH, theSQL );
531
530
Q_ASSERT ( newLayer );
532
531
if ( mOgrLayer != mOgrOrigLayer )
533
532
QgsOgrProviderUtils::release ( mOgrLayer );
534
- mOgrLayer = newLayer;
533
+ mOgrLayer = newLayer. release () ;
535
534
}
536
535
else
537
536
{
@@ -840,17 +839,15 @@ QStringList QgsOgrProvider::subLayers() const
840
839
for ( unsigned int i = 0 ; i < layerCount () ; i++ )
841
840
{
842
841
QString errCause;
843
- QgsOgrLayer * layer = QgsOgrProviderUtils::getLayer ( mOgrOrigLayer ->datasetName (),
844
- mOgrOrigLayer ->updateMode (),
845
- mOgrOrigLayer ->options (),
846
- i,
847
- errCause );
842
+ QgsOgrLayerUniquePtr layer = QgsOgrProviderUtils::getLayer ( mOgrOrigLayer ->datasetName (),
843
+ mOgrOrigLayer ->updateMode (),
844
+ mOgrOrigLayer ->options (),
845
+ i,
846
+ errCause );
848
847
if ( !layer )
849
848
continue ;
850
849
851
- addSubLayerDetailsToSubLayerList ( i, layer );
852
-
853
- QgsOgrProviderUtils::release ( layer );
850
+ addSubLayerDetailsToSubLayerList ( i, layer.get () );
854
851
}
855
852
}
856
853
return mSubLayerList ;
@@ -1120,7 +1117,7 @@ QgsRectangle QgsOgrProvider::extent() const
1120
1117
{
1121
1118
if ( !mExtent )
1122
1119
{
1123
- mExtent = new OGREnvelope ();
1120
+ mExtent . reset ( new OGREnvelope () );
1124
1121
1125
1122
// get the extent_ (envelope) of the layer
1126
1123
QgsDebugMsg ( " Starting get extent" );
@@ -1143,7 +1140,7 @@ QgsRectangle QgsOgrProvider::extent() const
1143
1140
// TODO: This can be expensive, do we really need it!
1144
1141
if ( mOgrLayer == mOgrOrigLayer )
1145
1142
{
1146
- mOgrLayer ->GetExtent ( mExtent , true );
1143
+ mOgrLayer ->GetExtent ( mExtent . get () , true );
1147
1144
}
1148
1145
else
1149
1146
{
@@ -1210,8 +1207,7 @@ void QgsOgrProvider::updateExtents()
1210
1207
void QgsOgrProvider::invalidateCachedExtent ( bool bForceRecomputeExtent )
1211
1208
{
1212
1209
mForceRecomputeExtent = bForceRecomputeExtent;
1213
- delete mExtent ;
1214
- mExtent = nullptr ;
1210
+ mExtent .reset ();
1215
1211
}
1216
1212
1217
1213
size_t QgsOgrProvider::layerCount () const
@@ -3158,7 +3154,7 @@ QSet<QVariant> QgsOgrProvider::uniqueValues( int index, int limit ) const
3158
3154
sql += " ORDER BY " + textEncoding ()->fromUnicode ( fld.name () ) + " ASC" ; // quoting of fieldname produces a syntax error
3159
3155
3160
3156
QgsDebugMsg ( QString ( " SQL: %1" ).arg ( textEncoding ()->toUnicode ( sql ) ) );
3161
- QgsOgrLayer * l = mOgrLayer ->ExecuteSQL ( sql );
3157
+ QgsOgrLayerUniquePtr l = mOgrLayer ->ExecuteSQL ( sql );
3162
3158
if ( !l )
3163
3159
{
3164
3160
QgsDebugMsg ( " Failed to execute SQL" );
@@ -3174,7 +3170,6 @@ QSet<QVariant> QgsOgrProvider::uniqueValues( int index, int limit ) const
3174
3170
break ;
3175
3171
}
3176
3172
3177
- QgsOgrProviderUtils::release ( l );
3178
3173
return uniqueValues;
3179
3174
}
3180
3175
@@ -3204,7 +3199,7 @@ QStringList QgsOgrProvider::uniqueStringsMatching( int index, const QString &sub
3204
3199
sql += " ORDER BY " + textEncoding ()->fromUnicode ( fld.name () ) + " ASC" ; // quoting of fieldname produces a syntax error
3205
3200
3206
3201
QgsDebugMsg ( QString ( " SQL: %1" ).arg ( textEncoding ()->toUnicode ( sql ) ) );
3207
- QgsOgrLayer * l = mOgrLayer ->ExecuteSQL ( sql );
3202
+ QgsOgrLayerUniquePtr l = mOgrLayer ->ExecuteSQL ( sql );
3208
3203
if ( !l )
3209
3204
{
3210
3205
QgsDebugMsg ( " Failed to execute SQL" );
@@ -3221,7 +3216,6 @@ QStringList QgsOgrProvider::uniqueStringsMatching( int index, const QString &sub
3221
3216
break ;
3222
3217
}
3223
3218
3224
- QgsOgrProviderUtils::release ( l );
3225
3219
return results;
3226
3220
}
3227
3221
@@ -3242,7 +3236,7 @@ QVariant QgsOgrProvider::minimumValue( int index ) const
3242
3236
sql += " WHERE " + textEncoding ()->fromUnicode ( mSubsetString );
3243
3237
}
3244
3238
3245
- QgsOgrLayer * l = mOgrLayer ->ExecuteSQL ( sql );
3239
+ QgsOgrLayerUniquePtr l = mOgrLayer ->ExecuteSQL ( sql );
3246
3240
if ( !l )
3247
3241
{
3248
3242
QgsDebugMsg ( QString ( " Failed to execute SQL: %1" ).arg ( textEncoding ()->toUnicode ( sql ) ) );
@@ -3252,14 +3246,10 @@ QVariant QgsOgrProvider::minimumValue( int index ) const
3252
3246
gdal::ogr_feature_unique_ptr f ( l->GetNextFeature () );
3253
3247
if ( !f )
3254
3248
{
3255
- QgsOgrProviderUtils::release ( l );
3256
3249
return QVariant ();
3257
3250
}
3258
3251
3259
3252
QVariant value = OGR_F_IsFieldSetAndNotNull ( f.get (), 0 ) ? convertValue ( fld.type (), textEncoding ()->toUnicode ( OGR_F_GetFieldAsString ( f.get (), 0 ) ) ) : QVariant ( fld.type () );
3260
-
3261
- QgsOgrProviderUtils::release ( l );
3262
-
3263
3253
return value;
3264
3254
}
3265
3255
@@ -3280,7 +3270,7 @@ QVariant QgsOgrProvider::maximumValue( int index ) const
3280
3270
sql += " WHERE " + textEncoding ()->fromUnicode ( mSubsetString );
3281
3271
}
3282
3272
3283
- QgsOgrLayer * l = mOgrLayer ->ExecuteSQL ( sql );
3273
+ QgsOgrLayerUniquePtr l = mOgrLayer ->ExecuteSQL ( sql );
3284
3274
if ( !l )
3285
3275
{
3286
3276
QgsDebugMsg ( QString ( " Failed to execute SQL: %1" ).arg ( textEncoding ()->toUnicode ( sql ) ) );
@@ -3290,14 +3280,10 @@ QVariant QgsOgrProvider::maximumValue( int index ) const
3290
3280
gdal::ogr_feature_unique_ptr f ( l->GetNextFeature () );
3291
3281
if ( !f )
3292
3282
{
3293
- QgsOgrProviderUtils::release ( l );
3294
3283
return QVariant ();
3295
3284
}
3296
3285
3297
3286
QVariant value = OGR_F_IsFieldSetAndNotNull ( f.get (), 0 ) ? convertValue ( fld.type (), textEncoding ()->toUnicode ( OGR_F_GetFieldAsString ( f.get (), 0 ) ) ) : QVariant ( fld.type () );
3298
-
3299
- QgsOgrProviderUtils::release ( l );
3300
-
3301
3287
return value;
3302
3288
}
3303
3289
@@ -3850,11 +3836,11 @@ void QgsOgrProvider::open( OpenMode mode )
3850
3836
// has precedence over the layerid if both are given.
3851
3837
if ( !mLayerName .isNull () )
3852
3838
{
3853
- mOgrOrigLayer = QgsOgrProviderUtils::getLayer ( mFilePath , true , options, mLayerName , errCause );
3839
+ mOgrOrigLayer = QgsOgrProviderUtils::getLayer ( mFilePath , true , options, mLayerName , errCause ). release () ;
3854
3840
}
3855
3841
else
3856
3842
{
3857
- mOgrOrigLayer = QgsOgrProviderUtils::getLayer ( mFilePath , true , options, mLayerIndex , errCause );
3843
+ mOgrOrigLayer = QgsOgrProviderUtils::getLayer ( mFilePath , true , options, mLayerIndex , errCause ). release () ;
3858
3844
}
3859
3845
}
3860
3846
@@ -3875,11 +3861,11 @@ void QgsOgrProvider::open( OpenMode mode )
3875
3861
// try to open read-only
3876
3862
if ( !mLayerName .isNull () )
3877
3863
{
3878
- mOgrOrigLayer = QgsOgrProviderUtils::getLayer ( mFilePath , false , QStringList (), mLayerName , errCause );
3864
+ mOgrOrigLayer = QgsOgrProviderUtils::getLayer ( mFilePath , false , QStringList (), mLayerName , errCause ). release () ;
3879
3865
}
3880
3866
else
3881
3867
{
3882
- mOgrOrigLayer = QgsOgrProviderUtils::getLayer ( mFilePath , false , QStringList (), mLayerIndex , errCause );
3868
+ mOgrOrigLayer = QgsOgrProviderUtils::getLayer ( mFilePath , false , QStringList (), mLayerIndex , errCause ). release () ;
3883
3869
}
3884
3870
}
3885
3871
@@ -3943,11 +3929,11 @@ void QgsOgrProvider::open( OpenMode mode )
3943
3929
// try to open read-only
3944
3930
if ( !mLayerName .isNull () )
3945
3931
{
3946
- mOgrOrigLayer = QgsOgrProviderUtils::getLayer ( mFilePath , false , QStringList (), mLayerName , errCause );
3932
+ mOgrOrigLayer = QgsOgrProviderUtils::getLayer ( mFilePath , false , QStringList (), mLayerName , errCause ). release () ;
3947
3933
}
3948
3934
else
3949
3935
{
3950
- mOgrOrigLayer = QgsOgrProviderUtils::getLayer ( mFilePath , false , QStringList (), mLayerIndex , errCause );
3936
+ mOgrOrigLayer = QgsOgrProviderUtils::getLayer ( mFilePath , false , QStringList (), mLayerIndex , errCause ). release () ;
3951
3937
}
3952
3938
3953
3939
mWriteAccess = false ;
@@ -4130,7 +4116,7 @@ void QgsOgrProviderUtils::invalidateCachedDatasets( const QString &dsName )
4130
4116
}
4131
4117
}
4132
4118
4133
- QgsOgrLayer * QgsOgrProviderUtils::getLayer ( const QString &dsName,
4119
+ QgsOgrLayerUniquePtr QgsOgrProviderUtils::getLayer ( const QString &dsName,
4134
4120
int layerIndex,
4135
4121
QString &errCause )
4136
4122
{
@@ -4169,7 +4155,7 @@ QgsOgrLayer *QgsOgrProviderUtils::getLayer( const QString &dsName,
4169
4155
return getLayer ( dsName, false , QStringList (), layerIndex, errCause );
4170
4156
}
4171
4157
4172
- QgsOgrLayer * QgsOgrProviderUtils::getLayer ( const QString &dsName,
4158
+ QgsOgrLayerUniquePtr QgsOgrProviderUtils::getLayer ( const QString &dsName,
4173
4159
bool updateMode,
4174
4160
const QStringList &options,
4175
4161
int layerIndex,
@@ -4239,18 +4225,18 @@ QgsOgrLayer *QgsOgrProviderUtils::getLayer( const QString &dsName,
4239
4225
new QgsOgrProviderUtils::DatasetWithLayers;
4240
4226
ds->hDS = hDS;
4241
4227
4242
- QgsOgrLayer *QgsOgrLayer = QgsOgrLayer::CreateForLayer (
4243
- ident, layerName, ds, hLayer );
4244
- ds->setLayers [layerName] = QgsOgrLayer ;
4228
+ QgsOgrLayerUniquePtr layer = QgsOgrLayer::CreateForLayer (
4229
+ ident, layerName, ds, hLayer );
4230
+ ds->setLayers [layerName] = layer. get () ;
4245
4231
4246
4232
QList<DatasetWithLayers *> datasetList;
4247
4233
datasetList.push_back ( ds );
4248
4234
mapSharedDS[ident] = datasetList;
4249
4235
4250
- return QgsOgrLayer ;
4236
+ return layer ;
4251
4237
}
4252
4238
4253
- QgsOgrLayer * QgsOgrProviderUtils::getLayer ( const QString &dsName,
4239
+ QgsOgrLayerUniquePtr QgsOgrProviderUtils::getLayer ( const QString &dsName,
4254
4240
const QString &layerName,
4255
4241
QString &errCause )
4256
4242
{
@@ -4283,10 +4269,10 @@ QgsOgrLayer *QgsOgrProviderUtils::getLayer( const QString &dsName,
4283
4269
return nullptr ;
4284
4270
}
4285
4271
4286
- QgsOgrLayer *QgsOgrLayer = QgsOgrLayer::CreateForLayer (
4287
- iter.key (), layerName, ds, hLayer );
4288
- ds->setLayers [layerName] = QgsOgrLayer ;
4289
- return QgsOgrLayer ;
4272
+ QgsOgrLayerUniquePtr layer = QgsOgrLayer::CreateForLayer (
4273
+ iter.key (), layerName, ds, hLayer );
4274
+ ds->setLayers [layerName] = layer. get () ;
4275
+ return layer ;
4290
4276
}
4291
4277
}
4292
4278
}
@@ -4335,7 +4321,7 @@ bool QgsOgrProviderUtils::canUseOpenedDatasets( const QString &dsName )
4335
4321
}
4336
4322
4337
4323
4338
- QgsOgrLayer * QgsOgrProviderUtils::getLayer ( const QString &dsName,
4324
+ QgsOgrLayerUniquePtr QgsOgrProviderUtils::getLayer ( const QString &dsName,
4339
4325
bool updateMode,
4340
4326
const QStringList &options,
4341
4327
const QString &layerName,
@@ -4390,10 +4376,10 @@ QgsOgrLayer *QgsOgrProviderUtils::getLayer( const QString &dsName,
4390
4376
return nullptr ;
4391
4377
}
4392
4378
4393
- QgsOgrLayer *QgsOgrLayer = QgsOgrLayer::CreateForLayer (
4394
- ident, layerName, ds, hLayer );
4395
- ds->setLayers [layerName] = QgsOgrLayer ;
4396
- return QgsOgrLayer ;
4379
+ QgsOgrLayerUniquePtr layer = QgsOgrLayer::CreateForLayer (
4380
+ ident, layerName, ds, hLayer );
4381
+ ds->setLayers [layerName] = layer. get () ;
4382
+ return layer ;
4397
4383
}
4398
4384
}
4399
4385
@@ -4423,10 +4409,10 @@ QgsOgrLayer *QgsOgrProviderUtils::getLayer( const QString &dsName,
4423
4409
4424
4410
ds->hDS = hDS;
4425
4411
4426
- QgsOgrLayer *QgsOgrLayer = QgsOgrLayer::CreateForLayer (
4427
- ident, layerName, ds, hLayer );
4428
- ds->setLayers [layerName] = QgsOgrLayer ;
4429
- return QgsOgrLayer ;
4412
+ QgsOgrLayerUniquePtr layer = QgsOgrLayer::CreateForLayer (
4413
+ ident, layerName, ds, hLayer );
4414
+ ds->setLayers [layerName] = layer. get () ;
4415
+ return layer ;
4430
4416
}
4431
4417
4432
4418
GDALDatasetH hDS = OpenHelper ( dsName, updateMode, options );
@@ -4450,18 +4436,18 @@ QgsOgrLayer *QgsOgrProviderUtils::getLayer( const QString &dsName,
4450
4436
new QgsOgrProviderUtils::DatasetWithLayers;
4451
4437
ds->hDS = hDS;
4452
4438
4453
- QgsOgrLayer *QgsOgrLayer = QgsOgrLayer::CreateForLayer (
4454
- ident, layerName, ds, hLayer );
4455
- ds->setLayers [layerName] = QgsOgrLayer ;
4439
+ QgsOgrLayerUniquePtr layer = QgsOgrLayer::CreateForLayer (
4440
+ ident, layerName, ds, hLayer );
4441
+ ds->setLayers [layerName] = layer. get () ;
4456
4442
4457
4443
QList<DatasetWithLayers *> datasetList;
4458
4444
datasetList.push_back ( ds );
4459
4445
mapSharedDS[ident] = datasetList;
4460
4446
4461
- return QgsOgrLayer ;
4447
+ return layer ;
4462
4448
}
4463
4449
4464
- QgsOgrLayer * QgsOgrProviderUtils::getSqlLayer ( QgsOgrLayer *baseLayer,
4450
+ QgsOgrLayerUniquePtr QgsOgrProviderUtils::getSqlLayer ( QgsOgrLayer *baseLayer,
4465
4451
OGRLayerH hSqlLayer,
4466
4452
const QString &sql )
4467
4453
{
@@ -4530,13 +4516,13 @@ QgsOgrLayer::QgsOgrLayer()
4530
4516
oFDefn.layer = this ;
4531
4517
}
4532
4518
4533
- QgsOgrLayer * QgsOgrLayer::CreateForLayer (
4519
+ QgsOgrLayerUniquePtr QgsOgrLayer::CreateForLayer (
4534
4520
const QgsOgrProviderUtils::DatasetIdentification &ident,
4535
4521
const QString &layerName,
4536
4522
QgsOgrProviderUtils::DatasetWithLayers *ds,
4537
4523
OGRLayerH hLayer )
4538
4524
{
4539
- QgsOgrLayer * layer = new QgsOgrLayer;
4525
+ QgsOgrLayerUniquePtr layer ( new QgsOgrLayer () ) ;
4540
4526
layer->ident = ident;
4541
4527
layer->isSqlLayer = false ;
4542
4528
layer->layerName = layerName;
@@ -4550,13 +4536,13 @@ QgsOgrLayer *QgsOgrLayer::CreateForLayer(
4550
4536
return layer;
4551
4537
}
4552
4538
4553
- QgsOgrLayer * QgsOgrLayer::CreateForSql (
4539
+ QgsOgrLayerUniquePtr QgsOgrLayer::CreateForSql (
4554
4540
const QgsOgrProviderUtils::DatasetIdentification &ident,
4555
4541
const QString &sql,
4556
4542
QgsOgrProviderUtils::DatasetWithLayers *ds,
4557
4543
OGRLayerH hLayer )
4558
4544
{
4559
- QgsOgrLayer * layer = new QgsOgrLayer;
4545
+ QgsOgrLayerUniquePtr layer ( new QgsOgrLayer () ) ;
4560
4546
layer->ident = ident;
4561
4547
layer->isSqlLayer = true ;
4562
4548
layer->sql = sql;
@@ -4739,7 +4725,7 @@ void QgsOgrLayer::ExecuteSQLNoReturn( const QByteArray &sql )
4739
4725
GDALDatasetReleaseResultSet ( ds->hDS , hSqlLayer );
4740
4726
}
4741
4727
4742
- QgsOgrLayer * QgsOgrLayer::ExecuteSQL ( const QByteArray &sql )
4728
+ QgsOgrLayerUniquePtr QgsOgrLayer::ExecuteSQL ( const QByteArray &sql )
4743
4729
{
4744
4730
QMutexLocker locker ( &ds->mutex );
4745
4731
OGRLayerH hSqlLayer = GDALDatasetExecuteSQL ( ds->hDS ,
@@ -4816,8 +4802,8 @@ OGRFeatureH QgsOgrFeatureDefn::CreateFeature()
4816
4802
// ---------------------------------------------------------------------------
4817
4803
4818
4804
static
4819
- QgsOgrLayer * LoadDataSourceAndLayer ( const QString &uri,
4820
- QString &errCause )
4805
+ QgsOgrLayerUniquePtr LoadDataSourceAndLayer ( const QString &uri,
4806
+ QString &errCause )
4821
4807
{
4822
4808
bool isSubLayer;
4823
4809
int layerIndex;
@@ -4846,14 +4832,14 @@ QGISEXTERN bool saveStyle( const QString &uri, const QString &qmlStyle, const QS
4846
4832
const QString &styleName, const QString &styleDescription,
4847
4833
const QString &uiFileContent, bool useAsDefault, QString &errCause )
4848
4834
{
4849
- QgsOgrLayer * userLayer = LoadDataSourceAndLayer ( uri, errCause );
4835
+ QgsOgrLayerUniquePtr userLayer = LoadDataSourceAndLayer ( uri, errCause );
4850
4836
if ( !userLayer )
4851
4837
return false ;
4852
4838
4853
4839
QMutex *mutex = nullptr ;
4854
4840
OGRLayerH hUserLayer = userLayer->getHandleAndMutex ( mutex );
4855
4841
GDALDatasetH hDS = userLayer->getDatasetHandleAndMutex ( mutex );
4856
- mutex-> lock ( );
4842
+ QMutexLocker locker ( mutex );
4857
4843
4858
4844
// check if layer_styles table already exist
4859
4845
OGRLayerH hLayer = GDALDatasetGetLayerByName ( hDS, " layer_styles" );
@@ -4873,7 +4859,6 @@ QGISEXTERN bool saveStyle( const QString &uri, const QString &qmlStyle, const QS
4873
4859
{
4874
4860
errCause = QObject::tr ( " Unable to save layer style. It's not possible to create the destination table on the database." );
4875
4861
mutex->unlock ();
4876
- QgsOgrProviderUtils::release ( userLayer );
4877
4862
return false ;
4878
4863
}
4879
4864
bool ok = true ;
@@ -4938,7 +4923,6 @@ QGISEXTERN bool saveStyle( const QString &uri, const QString &qmlStyle, const QS
4938
4923
{
4939
4924
errCause = QObject::tr ( " Unable to save layer style. It's not possible to create the destination table on the database." );
4940
4925
mutex->unlock ();
4941
- QgsOgrProviderUtils::release ( userLayer );
4942
4926
return false ;
4943
4927
}
4944
4928
}
@@ -4996,7 +4980,6 @@ QGISEXTERN bool saveStyle( const QString &uri, const QString &qmlStyle, const QS
4996
4980
{
4997
4981
errCause = QObject::tr ( " Operation aborted" );
4998
4982
mutex->unlock ();
4999
- QgsOgrProviderUtils::release ( userLayer );
5000
4983
return false ;
5001
4984
}
5002
4985
bNew = false ;
@@ -5049,7 +5032,6 @@ QGISEXTERN bool saveStyle( const QString &uri, const QString &qmlStyle, const QS
5049
5032
bFeatureOK = OGR_L_SetFeature ( hLayer, hFeature.get () ) == OGRERR_NONE;
5050
5033
5051
5034
mutex->unlock ();
5052
- QgsOgrProviderUtils::release ( userLayer );
5053
5035
5054
5036
if ( !bFeatureOK )
5055
5037
{
@@ -5063,8 +5045,8 @@ QGISEXTERN bool saveStyle( const QString &uri, const QString &qmlStyle, const QS
5063
5045
5064
5046
static
5065
5047
bool LoadDataSourceLayerStylesAndLayer ( const QString &uri,
5066
- QgsOgrLayer * &layerStyles,
5067
- QgsOgrLayer * &userLayer,
5048
+ QgsOgrLayerUniquePtr &layerStyles,
5049
+ QgsOgrLayerUniquePtr &userLayer,
5068
5050
QString &errCause )
5069
5051
{
5070
5052
bool isSubLayer;
@@ -5098,7 +5080,7 @@ bool LoadDataSourceLayerStylesAndLayer( const QString &uri,
5098
5080
}
5099
5081
if ( !userLayer )
5100
5082
{
5101
- QgsOgrProviderUtils::release ( layerStyles );
5083
+ layerStyles. reset ( );
5102
5084
return false ;
5103
5085
}
5104
5086
return true ;
@@ -5107,8 +5089,8 @@ bool LoadDataSourceLayerStylesAndLayer( const QString &uri,
5107
5089
5108
5090
QGISEXTERN QString loadStyle ( const QString &uri, QString &errCause )
5109
5091
{
5110
- QgsOgrLayer * layerStyles = nullptr ;
5111
- QgsOgrLayer * userLayer = nullptr ;
5092
+ QgsOgrLayerUniquePtr layerStyles;
5093
+ QgsOgrLayerUniquePtr userLayer;
5112
5094
if ( !LoadDataSourceLayerStylesAndLayer ( uri, layerStyles, userLayer, errCause ) )
5113
5095
{
5114
5096
return QLatin1String ( " " );
@@ -5118,8 +5100,8 @@ QGISEXTERN QString loadStyle( const QString &uri, QString &errCause )
5118
5100
OGRLayerH hLayer = layerStyles->getHandleAndMutex ( mutex1 );
5119
5101
QMutex *mutex2 = nullptr ;
5120
5102
OGRLayerH hUserLayer = userLayer->getHandleAndMutex ( mutex2 );
5121
- mutex1-> lock ( );
5122
- mutex2-> lock ( );
5103
+ QMutexLocker lock1 ( mutex1 );
5104
+ QMutexLocker lock2 ( mutex2 );
5123
5105
5124
5106
QString selectQmlQuery = QStringLiteral ( " f_table_schema=''"
5125
5107
" AND f_table_name=%1"
@@ -5159,10 +5141,6 @@ QGISEXTERN QString loadStyle( const QString &uri, QString &errCause )
5159
5141
}
5160
5142
}
5161
5143
5162
- mutex1->unlock ();
5163
- mutex2->unlock ();
5164
- QgsOgrProviderUtils::release ( layerStyles );
5165
- QgsOgrProviderUtils::release ( userLayer );
5166
5144
return styleQML;
5167
5145
}
5168
5146
@@ -5181,7 +5159,7 @@ QGISEXTERN int listStyles( const QString &uri, QStringList &ids, QStringList &na
5181
5159
subsetString,
5182
5160
ogrGeometryType );
5183
5161
5184
- QgsOgrLayer * userLayer;
5162
+ QgsOgrLayerUniquePtr userLayer;
5185
5163
if ( !layerName.isEmpty () )
5186
5164
{
5187
5165
userLayer = QgsOgrProviderUtils::getLayer ( filePath, layerName, errCause );
@@ -5195,32 +5173,26 @@ QGISEXTERN int listStyles( const QString &uri, QStringList &ids, QStringList &na
5195
5173
return -1 ;
5196
5174
}
5197
5175
5198
- QgsOgrLayer * layerStyles =
5176
+ QgsOgrLayerUniquePtr layerStyles =
5199
5177
QgsOgrProviderUtils::getLayer ( filePath, " layer_styles" , errCause );
5200
5178
if ( !layerStyles )
5201
5179
{
5202
5180
QgsMessageLog::logMessage ( QObject::tr ( " No styles available on DB" ) );
5203
5181
errCause = QObject::tr ( " No styles available on DB" );
5204
- QgsOgrProviderUtils::release ( layerStyles );
5205
- QgsOgrProviderUtils::release ( userLayer );
5206
5182
return 0 ;
5207
5183
}
5208
5184
5209
5185
QMutex *mutex1 = nullptr ;
5210
5186
OGRLayerH hLayer = layerStyles->getHandleAndMutex ( mutex1 );
5211
- mutex1-> lock ( );
5187
+ QMutexLocker lock1 ( mutex1 );
5212
5188
QMutex *mutex2 = nullptr ;
5213
5189
OGRLayerH hUserLayer = userLayer->getHandleAndMutex ( mutex2 );
5214
- mutex2-> lock ( );
5190
+ QMutexLocker lock2 ( mutex2 );
5215
5191
5216
5192
if ( OGR_L_GetFeatureCount ( hLayer, TRUE ) == 0 )
5217
5193
{
5218
5194
QgsMessageLog::logMessage ( QObject::tr ( " No styles available on DB" ) );
5219
5195
errCause = QObject::tr ( " No styles available on DB" );
5220
- mutex1->unlock ();
5221
- mutex2->unlock ();
5222
- QgsOgrProviderUtils::release ( layerStyles );
5223
- QgsOgrProviderUtils::release ( userLayer );
5224
5196
return 0 ;
5225
5197
}
5226
5198
@@ -5292,45 +5264,34 @@ QGISEXTERN int listStyles( const QString &uri, QStringList &ids, QStringList &na
5292
5264
}
5293
5265
}
5294
5266
5295
- mutex1->unlock ();
5296
- mutex2->unlock ();
5297
- QgsOgrProviderUtils::release ( layerStyles );
5298
- QgsOgrProviderUtils::release ( userLayer );
5299
-
5300
5267
return numberOfRelatedStyles;
5301
5268
}
5302
5269
5303
5270
QGISEXTERN QString getStyleById ( const QString &uri, QString styleId, QString &errCause )
5304
5271
{
5305
- QgsOgrLayer * layerStyles = nullptr ;
5306
- QgsOgrLayer * userLayer = nullptr ;
5272
+ QgsOgrLayerUniquePtr layerStyles;
5273
+ QgsOgrLayerUniquePtr userLayer;
5307
5274
if ( !LoadDataSourceLayerStylesAndLayer ( uri, layerStyles, userLayer, errCause ) )
5308
5275
{
5309
5276
return QLatin1String ( " " );
5310
5277
}
5311
5278
5312
5279
QMutex *mutex1 = nullptr ;
5313
5280
OGRLayerH hLayer = layerStyles->getHandleAndMutex ( mutex1 );
5314
- mutex1-> lock ( );
5281
+ QMutexLocker lock1 ( mutex1 );
5315
5282
5316
5283
bool ok;
5317
5284
int id = styleId.toInt ( &ok );
5318
5285
if ( !ok )
5319
5286
{
5320
5287
errCause = QObject::tr ( " Invalid style identifier" );
5321
- mutex1->unlock ();
5322
- QgsOgrProviderUtils::release ( layerStyles );
5323
- QgsOgrProviderUtils::release ( userLayer );
5324
5288
return QLatin1String ( " " );
5325
5289
}
5326
5290
5327
5291
gdal::ogr_feature_unique_ptr hFeature ( OGR_L_GetFeature ( hLayer, id ) );
5328
5292
if ( !hFeature )
5329
5293
{
5330
5294
errCause = QObject::tr ( " No style corresponding to style identifier" );
5331
- mutex1->unlock ();
5332
- QgsOgrProviderUtils::release ( layerStyles );
5333
- QgsOgrProviderUtils::release ( userLayer );
5334
5295
return QLatin1String ( " " );
5335
5296
}
5336
5297
@@ -5339,10 +5300,6 @@ QGISEXTERN QString getStyleById( const QString &uri, QString styleId, QString &e
5339
5300
OGR_F_GetFieldAsString ( hFeature.get (),
5340
5301
OGR_FD_GetFieldIndex ( hLayerDefn, " styleQML" ) ) ) );
5341
5302
5342
- mutex1->unlock ();
5343
- QgsOgrProviderUtils::release ( layerStyles );
5344
- QgsOgrProviderUtils::release ( userLayer );
5345
-
5346
5303
return styleQML;
5347
5304
}
5348
5305
@@ -5510,3 +5467,8 @@ QGISEXTERN QList<QgsSourceSelectProvider *> *sourceSelectProviders()
5510
5467
}
5511
5468
5512
5469
#endif
5470
+
5471
+ void QgsOgrLayerReleaser::operator ()( QgsOgrLayer *layer )
5472
+ {
5473
+ QgsOgrProviderUtils::release ( layer );
5474
+ }
0 commit comments