Skip to content

Commit

Permalink
If a sublayer has the skippedContainerScan flag set, then
Browse files Browse the repository at this point in the history
the sublayer details are incomplete
  • Loading branch information
nyalldawson committed Jul 23, 2021
1 parent e28a0b7 commit f654019
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
3 changes: 2 additions & 1 deletion src/core/providers/qgsproviderutils.cpp
Expand Up @@ -29,7 +29,8 @@ bool QgsProviderUtils::sublayerDetailsAreIncomplete( const QList<QgsProviderSubl
switch ( sublayer.type() )
{
case QgsMapLayerType::VectorLayer:
if ( ( !ignoreUnknownGeometryTypes && sublayer.wkbType() == QgsWkbTypes::Unknown )
if ( sublayer.skippedContainerScan()
|| ( !ignoreUnknownGeometryTypes && sublayer.wkbType() == QgsWkbTypes::Unknown )
|| ( !ignoreUnknownFeatureCount &&
( sublayer.featureCount() == static_cast< long long >( Qgis::FeatureCountState::Uncounted )
|| sublayer.featureCount() == static_cast< long long >( Qgis::FeatureCountState::UnknownCount ) ) ) )
Expand Down
24 changes: 23 additions & 1 deletion tests/src/python/test_qgsproviderutils.py
Expand Up @@ -14,7 +14,9 @@
Qgis,
QgsWkbTypes,
QgsProviderRegistry,
QgsProviderUtils
QgsProviderUtils,
QgsProviderSublayerDetails,
QgsMapLayerType
)
from qgis.testing import (
unittest,
Expand Down Expand Up @@ -112,6 +114,26 @@ def test_sublayerDetailsAreIncomplete(self):
self.assertEqual(sublayers[3].name(), 'lines')
self.assertEqual(sublayers[3].featureCount(), 6)

# test with sublayer with skippedContainerScan flag
sl1 = QgsProviderSublayerDetails()
sl1.setProviderKey('ogr')
sl1.setType(QgsMapLayerType.VectorLayer)
sl1.setWkbType(QgsWkbTypes.Point)
sl1.setFeatureCount(1)
sl1.setSkippedContainerScan(False)
self.assertFalse(QgsProviderUtils.sublayerDetailsAreIncomplete([sl1], True))
self.assertFalse(QgsProviderUtils.sublayerDetailsAreIncomplete([sl1], False))
sl2 = QgsProviderSublayerDetails()
sl2.setProviderKey('ogr')
sl2.setType(QgsMapLayerType.VectorLayer)
sl2.setWkbType(QgsWkbTypes.Point)
sl2.setFeatureCount(1)
sl2.setSkippedContainerScan(True)
self.assertTrue(QgsProviderUtils.sublayerDetailsAreIncomplete([sl2], True))
self.assertTrue(QgsProviderUtils.sublayerDetailsAreIncomplete([sl2], False))
self.assertTrue(QgsProviderUtils.sublayerDetailsAreIncomplete([sl1, sl2], True))
self.assertTrue(QgsProviderUtils.sublayerDetailsAreIncomplete([sl1, sl2], False))

def test_suggestLayerNameFromFilePath(self):
"""
test suggestLayerNameFromFilePath
Expand Down

0 comments on commit f654019

Please sign in to comment.