From 6c2d7bd7c94f2f95ba28e942ed7b656c8718ece0 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Wed, 21 Jul 2021 14:04:35 +1000 Subject: [PATCH] Add driver name to QgsProviderSublayerDetails --- .../providers/qgsprovidersublayerdetails.sip.in | 16 ++++++++++++++++ .../providers/qgsprovidersublayerdetails.cpp | 3 ++- src/core/providers/qgsprovidersublayerdetails.h | 17 +++++++++++++++++ .../python/test_qgsprovidersublayerdetails.py | 16 ++++++++++++++-- 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/python/core/auto_generated/providers/qgsprovidersublayerdetails.sip.in b/python/core/auto_generated/providers/qgsprovidersublayerdetails.sip.in index f408125efc7..517724f21a6 100644 --- a/python/core/auto_generated/providers/qgsprovidersublayerdetails.sip.in +++ b/python/core/auto_generated/providers/qgsprovidersublayerdetails.sip.in @@ -121,6 +121,22 @@ Returns the layer's description. Sets the layer's ``description``. .. seealso:: :py:func:`description` +%End + + QString driverName() const; +%Docstring +Returns the layer's driver name. + +This is supported only for providers which handle multiple drivers. + +.. seealso:: :py:func:`setDriverName` +%End + + void setDriverName( const QString &driver ); +%Docstring +Sets the layer's ``driver`` name. + +.. seealso:: :py:func:`driverName` %End QStringList path() const; diff --git a/src/core/providers/qgsprovidersublayerdetails.cpp b/src/core/providers/qgsprovidersublayerdetails.cpp index bd4427932ad..2f3cf757d95 100644 --- a/src/core/providers/qgsprovidersublayerdetails.cpp +++ b/src/core/providers/qgsprovidersublayerdetails.cpp @@ -37,7 +37,8 @@ bool QgsProviderSublayerDetails::operator==( const QgsProviderSublayerDetails &o && mFeatureCount == other.mFeatureCount && mGeometryColumnName == other.mGeometryColumnName && mPath == other.mPath - && mWkbType == other.mWkbType; + && mWkbType == other.mWkbType + && mDriverName == other.mDriverName; } bool QgsProviderSublayerDetails::operator!=( const QgsProviderSublayerDetails &other ) const diff --git a/src/core/providers/qgsprovidersublayerdetails.h b/src/core/providers/qgsprovidersublayerdetails.h index ddd92db6afb..0c43c383630 100644 --- a/src/core/providers/qgsprovidersublayerdetails.h +++ b/src/core/providers/qgsprovidersublayerdetails.h @@ -142,6 +142,22 @@ class CORE_EXPORT QgsProviderSublayerDetails */ void setDescription( const QString &description ) { mDescription = description; } + /** + * Returns the layer's driver name. + * + * This is supported only for providers which handle multiple drivers. + * + * \see setDriverName() + */ + QString driverName() const { return mDriverName; } + + /** + * Sets the layer's \a driver name. + * + * \see driverName() + */ + void setDriverName( const QString &driver ) { mDriverName = driver; } + /** * Returns the path to the sublayer. * @@ -250,6 +266,7 @@ class CORE_EXPORT QgsProviderSublayerDetails QString mGeometryColumnName; QStringList mPath; QgsWkbTypes::Type mWkbType = QgsWkbTypes::Unknown; + QString mDriverName; }; diff --git a/tests/src/python/test_qgsprovidersublayerdetails.py b/tests/src/python/test_qgsprovidersublayerdetails.py index d9c97650fe8..7cd77674f20 100644 --- a/tests/src/python/test_qgsprovidersublayerdetails.py +++ b/tests/src/python/test_qgsprovidersublayerdetails.py @@ -69,6 +69,9 @@ class TestQgsProviderSublayerDetails(unittest.TestCase): d.setLayerNumber(13) self.assertEqual(d.layerNumber(), 13) + d.setDriverName('drv') + self.assertEqual(d.driverName(), 'drv') + def test_equality(self): """ Test equality operator @@ -116,10 +119,19 @@ class TestQgsProviderSublayerDetails(unittest.TestCase): self.assertEqual(d, d2) d.setGeometryColumnName('geom_col') - self.assertEqual(d.geometryColumnName(), 'geom_col') + self.assertNotEqual(d, d2) + d2.setGeometryColumnName('geom_col') + self.assertEqual(d, d2) d.setLayerNumber(13) - self.assertEqual(d.layerNumber(), 13) + self.assertNotEqual(d, d2) + d2.setLayerNumber(13) + self.assertEqual(d, d2) + + d.setDriverName('drv') + self.assertNotEqual(d, d2) + d2.setDriverName('drv') + self.assertEqual(d, d2) def test_to_layer(self): """