Skip to content

Commit 867c678

Browse files
rouaultm-kuhn
authored andcommitted
[OGR provider] Use GDAL driver and dataset API
This is a preparation work to be able to provide open options to vector drivers, which require using the GDALOpenEx() API, and thus requires to use GDALDatasetH instead of OGRDataSourceH, GDALDriverH instead of OGRDriverH, GDALOpenEx() instead of OGROpen(), GDALClose() instead of OGR_DS_Destroy(), GDALDatasetXXXX instead of OGR_DS_XXXX, etc...
1 parent 0741925 commit 867c678

File tree

5 files changed

+188
-183
lines changed

5 files changed

+188
-183
lines changed

src/providers/ogr/qgsogrconnpool.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@
1818

1919
#include "qgsconnectionpool.h"
2020
#include "qgsogrprovider.h"
21-
#include <ogr_api.h>
21+
#include <gdal.h>
2222

2323

2424
struct QgsOgrConn
2525
{
2626
QString path;
27-
OGRDataSourceH ds;
27+
GDALDatasetH ds;
2828
bool valid;
2929
};
3030

@@ -37,14 +37,14 @@ inline void qgsConnectionPool_ConnectionCreate( const QString &connInfo, QgsOgrC
3737
{
3838
c = new QgsOgrConn;
3939
QString filePath = connInfo.left( connInfo.indexOf( QLatin1String( "|" ) ) );
40-
c->ds = OGROpen( filePath.toUtf8().constData(), false, nullptr );
40+
c->ds = GDALOpenEx( filePath.toUtf8().constData(), GDAL_OF_VECTOR, nullptr, nullptr, nullptr );
4141
c->path = connInfo;
4242
c->valid = true;
4343
}
4444

4545
inline void qgsConnectionPool_ConnectionDestroy( QgsOgrConn *c )
4646
{
47-
QgsOgrProviderUtils::OGRDestroyWrapper( c->ds );
47+
QgsOgrProviderUtils::GDALCloseWrapper( c->ds );
4848
delete c;
4949
}
5050

src/providers/ogr/qgsogrdataitems.cpp

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ QgsOgrLayerItem::QgsOgrLayerItem( QgsDataItem *parent,
5151
setState( Populated ); // children are not expected
5252

5353
OGRRegisterAll();
54-
OGRSFDriverH hDriver;
55-
OGRDataSourceH hDataSource = QgsOgrProviderUtils::OGROpenWrapper( mPath.toUtf8().constData(), true, &hDriver );
54+
GDALDriverH hDriver;
55+
GDALDatasetH hDataSource = QgsOgrProviderUtils::GDALOpenWrapper( mPath.toUtf8().constData(), true, &hDriver );
5656

5757
if ( hDataSource )
5858
{
59-
QString driverName = OGR_Dr_GetName( hDriver );
60-
OGR_DS_Destroy( hDataSource );
59+
QString driverName = GDALGetDriverShortName( hDriver );
60+
GDALClose( hDataSource );
6161

6262
if ( driverName == QLatin1String( "ESRI Shapefile" ) )
6363
mCapabilities |= SetCrs;
@@ -336,9 +336,9 @@ void QgsOgrLayerItem::deleteLayer()
336336

337337
// -------
338338

339-
static QgsOgrLayerItem *dataItemForLayer( QgsDataItem *parentItem, QString name, QString path, OGRDataSourceH hDataSource, int layerId, bool isSubLayer = false )
339+
static QgsOgrLayerItem *dataItemForLayer( QgsDataItem *parentItem, QString name, QString path, GDALDatasetH hDataSource, int layerId, bool isSubLayer = false )
340340
{
341-
OGRLayerH hLayer = OGR_DS_GetLayer( hDataSource, layerId );
341+
OGRLayerH hLayer = GDALDatasetGetLayer( hDataSource, layerId );
342342
OGRFeatureDefnH hDef = OGR_L_GetLayerDefn( hLayer );
343343

344344
QgsLayerItem::LayerType layerType = QgsLayerItem::Vector;
@@ -404,11 +404,11 @@ QVector<QgsDataItem *> QgsOgrDataCollectionItem::createChildren()
404404
{
405405
QVector<QgsDataItem *> children;
406406

407-
OGRSFDriverH hDriver;
408-
OGRDataSourceH hDataSource = QgsOgrProviderUtils::OGROpenWrapper( mPath.toUtf8().constData(), false, &hDriver );
407+
GDALDriverH hDriver;
408+
GDALDatasetH hDataSource = QgsOgrProviderUtils::GDALOpenWrapper( mPath.toUtf8().constData(), false, &hDriver );
409409
if ( !hDataSource )
410410
return children;
411-
int numLayers = OGR_DS_GetLayerCount( hDataSource );
411+
int numLayers = GDALDatasetGetLayerCount( hDataSource );
412412

413413
children.reserve( numLayers );
414414
for ( int i = 0; i < numLayers; ++i )
@@ -417,7 +417,7 @@ QVector<QgsDataItem *> QgsOgrDataCollectionItem::createChildren()
417417
children.append( item );
418418
}
419419

420-
OGR_DS_Destroy( hDataSource );
420+
GDALClose( hDataSource );
421421

422422
return children;
423423
}
@@ -576,20 +576,21 @@ QGISEXTERN QgsDataItem *dataItem( QString path, QgsDataItem *parentItem )
576576
// if this is a VRT file make sure it is vector VRT to avoid duplicates
577577
if ( suffix == QLatin1String( "vrt" ) )
578578
{
579-
OGRSFDriverH hDriver = OGRGetDriverByName( "VRT" );
579+
GDALDriverH hDriver = GDALGetDriverByName( "OGR_VRT" );
580580
if ( hDriver )
581581
{
582582
// do not print errors, but write to debug
583583
CPLPushErrorHandler( CPLQuietErrorHandler );
584584
CPLErrorReset();
585-
OGRDataSourceH hDataSource = OGR_Dr_Open( hDriver, path.toLocal8Bit().constData(), 0 );
585+
GDALDatasetH hDataSource = GDALOpenEx(
586+
path.toLocal8Bit().constData(), GDAL_OF_VECTOR, nullptr, nullptr, nullptr );
586587
CPLPopErrorHandler();
587588
if ( ! hDataSource )
588589
{
589590
QgsDebugMsgLevel( "Skipping VRT file because root is not a OGR VRT", 2 );
590591
return nullptr;
591592
}
592-
OGR_DS_Destroy( hDataSource );
593+
GDALClose( hDataSource );
593594
}
594595
}
595596
// Handle collections
@@ -609,22 +610,22 @@ QGISEXTERN QgsDataItem *dataItem( QString path, QgsDataItem *parentItem )
609610

610611
// test that file is valid with OGR
611612
OGRRegisterAll();
612-
OGRSFDriverH hDriver;
613+
GDALDriverH hDriver;
613614
// do not print errors, but write to debug
614615
CPLPushErrorHandler( CPLQuietErrorHandler );
615616
CPLErrorReset();
616-
OGRDataSourceH hDataSource = QgsOgrProviderUtils::OGROpenWrapper( path.toUtf8().constData(), false, &hDriver );
617+
GDALDatasetH hDataSource = QgsOgrProviderUtils::GDALOpenWrapper( path.toUtf8().constData(), false, &hDriver );
617618
CPLPopErrorHandler();
618619

619620
if ( ! hDataSource )
620621
{
621-
QgsDebugMsg( QString( "OGROpen error # %1 : %2 on %3" ).arg( CPLGetLastErrorNo() ).arg( CPLGetLastErrorMsg() ).arg( path ) );
622+
QgsDebugMsg( QString( "GDALOpen error # %1 : %2 on %3" ).arg( CPLGetLastErrorNo() ).arg( CPLGetLastErrorMsg() ).arg( path ) );
622623
return nullptr;
623624
}
624625

625-
QgsDebugMsgLevel( QString( "OGR Driver : %1" ).arg( OGR_Dr_GetName( hDriver ) ), 2 );
626+
QgsDebugMsgLevel( QString( "GDAL Driver : %1" ).arg( GDALGetDriverShortName( hDriver ) ), 2 );
626627

627-
int numLayers = OGR_DS_GetLayerCount( hDataSource );
628+
int numLayers = GDALDatasetGetLayerCount( hDataSource );
628629

629630
QgsDataItem *item = nullptr;
630631

@@ -639,6 +640,6 @@ QGISEXTERN QgsDataItem *dataItem( QString path, QgsDataItem *parentItem )
639640
item = new QgsOgrDataCollectionItem( parentItem, name, path );
640641
}
641642

642-
OGR_DS_Destroy( hDataSource );
643+
GDALClose( hDataSource );
643644
return item;
644645
}

src/providers/ogr/qgsogrfeatureiterator.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,11 @@ QgsOgrFeatureIterator::QgsOgrFeatureIterator( QgsOgrFeatureSource *source, bool
5555

5656
if ( mSource->mLayerName.isNull() )
5757
{
58-
ogrLayer = OGR_DS_GetLayer( mConn->ds, mSource->mLayerIndex );
58+
ogrLayer = GDALDatasetGetLayer( mConn->ds, mSource->mLayerIndex );
5959
}
6060
else
6161
{
62-
ogrLayer = OGR_DS_GetLayerByName( mConn->ds, mSource->mLayerName.toUtf8().constData() );
62+
ogrLayer = GDALDatasetGetLayerByName( mConn->ds, mSource->mLayerName.toUtf8().constData() );
6363
}
6464
if ( !ogrLayer )
6565
{
@@ -306,7 +306,7 @@ bool QgsOgrFeatureIterator::close()
306306

307307
if ( mSubsetStringSet )
308308
{
309-
OGR_DS_ReleaseResultSet( mConn->ds, ogrLayer );
309+
GDALDatasetReleaseResultSet( mConn->ds, ogrLayer );
310310
}
311311

312312
if ( mConn )
@@ -420,7 +420,7 @@ QgsOgrFeatureSource::QgsOgrFeatureSource( const QgsOgrProvider *p )
420420
, mFields( p->mAttributeFields )
421421
, mFirstFieldIsFid( p->mFirstFieldIsFid )
422422
, mOgrGeometryTypeFilter( QgsOgrProvider::ogrWkbSingleFlatten( p->mOgrGeometryTypeFilter ) )
423-
, mDriverName( p->ogrDriverName )
423+
, mDriverName( p->mGDALDriverName )
424424
, mCrs( p->crs() )
425425
, mWkbType( p->wkbType() )
426426
{

0 commit comments

Comments
 (0)