Skip to content

Commit f70213f

Browse files
committedNov 13, 2017
Overridden dataSourceUri for OGR
1 parent 58fdd70 commit f70213f

File tree

3 files changed

+39
-18
lines changed

3 files changed

+39
-18
lines changed
 

‎src/providers/ogr/qgsogrfeatureiterator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ bool QgsOgrFeatureIterator::readFeature( gdal::ogr_feature_unique_ptr fet, QgsFe
422422

423423

424424
QgsOgrFeatureSource::QgsOgrFeatureSource( const QgsOgrProvider *p )
425-
: mDataSource( QgsOgrProviderUtils::expandAuthConfig( p->dataSourceUri() ) )
425+
: mDataSource( p->dataSourceUri( true ) )
426426
, mLayerName( p->layerName() )
427427
, mLayerIndex( p->layerIndex() )
428428
, mSubsetString( p->mSubsetString )

‎src/providers/ogr/qgsogrprovider.cpp

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -457,21 +457,33 @@ QgsOgrProvider::QgsOgrProvider( QString const &uri )
457457

458458
setNativeTypes( nativeTypes );
459459

460-
QgsOgrConnPool::instance()->ref( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
460+
QgsOgrConnPool::instance()->ref( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
461461
}
462462

463463
QgsOgrProvider::~QgsOgrProvider()
464464
{
465-
QgsOgrConnPool::instance()->unref( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
465+
QgsOgrConnPool::instance()->unref( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
466466
// We must also make sure to flush unusef cached connections so that
467467
// the file can be removed (#15137)
468-
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
468+
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
469469

470470
// Do that as last step for final cleanup that might be prevented by
471471
// still opened datasets.
472472
close();
473473
}
474474

475+
QString QgsOgrProvider::dataSourceUri( bool expandAuthConfig ) const
476+
{
477+
if ( expandAuthConfig && QgsDataProvider::dataSourceUri( ).contains( QLatin1String( "authcfg" ) ) )
478+
{
479+
return QgsOgrProviderUtils::expandAuthConfig( QgsDataProvider::dataSourceUri( ) );
480+
}
481+
else
482+
{
483+
return QgsDataProvider::dataSourceUri( );
484+
}
485+
}
486+
475487
QgsAbstractFeatureSource *QgsOgrProvider::featureSource() const
476488
{
477489
return new QgsOgrFeatureSource( this );
@@ -537,9 +549,9 @@ bool QgsOgrProvider::setSubsetString( const QString &theSQL, bool updateFeatureC
537549

538550
if ( uri != dataSourceUri() )
539551
{
540-
QgsOgrConnPool::instance()->unref( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
552+
QgsOgrConnPool::instance()->unref( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
541553
setDataSourceUri( uri );
542-
QgsOgrConnPool::instance()->ref( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
554+
QgsOgrConnPool::instance()->ref( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
543555
}
544556

545557
mOgrLayer->ResetReading();
@@ -889,7 +901,7 @@ OGRwkbGeometryType QgsOgrProvider::getOgrGeomType( OGRLayerH ogrLayer )
889901

890902
void QgsOgrProvider::loadFields()
891903
{
892-
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
904+
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
893905
//the attribute fields need to be read again when the encoding changes
894906
mAttributeFields.clear();
895907
mDefaultValues.clear();
@@ -1458,7 +1470,7 @@ bool QgsOgrProvider::addAttributes( const QList<QgsField> &attributes )
14581470
{
14591471
// adding attributes in mapinfo requires to be able to delete the .dat file
14601472
// so drop any cached connections.
1461-
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
1473+
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
14621474
}
14631475

14641476
bool returnvalue = true;
@@ -1792,7 +1804,7 @@ bool QgsOgrProvider::changeAttributeValues( const QgsChangedAttributesMap &attr_
17921804
{
17931805
pushError( tr( "OGR error syncing to disk: %1" ).arg( CPLGetLastErrorMsg() ) );
17941806
}
1795-
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
1807+
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
17961808
return true;
17971809
}
17981810

@@ -1868,7 +1880,7 @@ bool QgsOgrProvider::changeGeometryValues( const QgsGeometryMap &geometry_map )
18681880
commitTransaction();
18691881
}
18701882

1871-
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
1883+
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
18721884
return syncToDisc();
18731885
}
18741886

@@ -3261,7 +3273,7 @@ QByteArray QgsOgrProvider::quotedIdentifier( const QByteArray &field ) const
32613273

32623274
void QgsOgrProvider::forceReload()
32633275
{
3264-
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
3276+
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
32653277
}
32663278

32673279
QString QgsOgrProviderUtils::connectionPoolId( const QString &dataSourceURI )
@@ -3539,7 +3551,7 @@ QString QgsOgrProviderUtils::quotedValue( const QVariant &value )
35393551
bool QgsOgrProvider::syncToDisc()
35403552
{
35413553
//for shapefiles, remove spatial index files and create a new index
3542-
QgsOgrConnPool::instance()->unref( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
3554+
QgsOgrConnPool::instance()->unref( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
35433555
bool shapeIndex = false;
35443556
if ( mGDALDriverName == QLatin1String( "ESRI Shapefile" ) )
35453557
{
@@ -3554,7 +3566,7 @@ bool QgsOgrProvider::syncToDisc()
35543566
{
35553567
shapeIndex = true;
35563568
close();
3557-
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
3569+
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
35583570
QFile::remove( sbnIndexFile );
35593571
open( OpenModeSameAsCurrent );
35603572
if ( !mValid )
@@ -3578,7 +3590,7 @@ bool QgsOgrProvider::syncToDisc()
35783590
}
35793591
#endif
35803592

3581-
QgsOgrConnPool::instance()->ref( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
3593+
QgsOgrConnPool::instance()->ref( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
35823594
if ( shapeIndex )
35833595
{
35843596
return createSpatialIndex();
@@ -3640,7 +3652,7 @@ void QgsOgrProvider::recalculateFeatureCount()
36403652
mOgrLayer->SetSpatialFilter( filter );
36413653
}
36423654

3643-
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri() ) );
3655+
QgsOgrConnPool::instance()->invalidateConnections( QgsOgrProviderUtils::connectionPoolId( dataSourceUri( true ) ) );
36443656
}
36453657

36463658
bool QgsOgrProvider::doesStrictFeatureTypeCheck() const
@@ -3753,9 +3765,6 @@ void QgsOgrProvider::open( OpenMode mode )
37533765
Q_ASSERT( !mOgrLayer );
37543766
Q_ASSERT( !mOgrOrigLayer );
37553767

3756-
// Expand authentication
3757-
setDataSourceUri( QgsOgrProviderUtils::expandAuthConfig( mFilePath ) );
3758-
37593768
// Try to open using VSIFileHandler
37603769
// see http://trac.osgeo.org/gdal/wiki/UserDocs/ReadInZip
37613770
QString vsiPrefix = QgsZipItem::vsiPrefix( dataSourceUri() );

‎src/providers/ogr/qgsogrprovider.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,18 @@ class QgsOgrProvider : public QgsVectorDataProvider
6464

6565
virtual ~QgsOgrProvider();
6666

67+
/**
68+
* Get the data source specification. This may be a path or database
69+
* connection string
70+
* \param expandAuthConfig Whether to expand any assigned authentication configuration
71+
* \returns data source specification
72+
* \note The default authentication configuration expansion is FALSE. This keeps credentials
73+
* out of layer data source URIs and project files. Expansion should be specifically done
74+
* only when needed within a provider
75+
*/
76+
QString dataSourceUri( bool expandAuthConfig = false ) const override;
77+
78+
6779
virtual QgsAbstractFeatureSource *featureSource() const override;
6880

6981
virtual QgsCoordinateReferenceSystem crs() const override;

0 commit comments

Comments
 (0)
Please sign in to comment.