If a sublayer has the skippedContainerScan flag set, then

the sublayer details are incomplete
This commit is contained in:
Nyall Dawson 2021-07-21 14:38:32 +10:00
parent e28a0b7258
commit f6540193c5
2 changed files with 25 additions and 2 deletions

View File

@ -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 ) ) ) )

View File

@ -14,7 +14,9 @@ from qgis.core import (
Qgis,
QgsWkbTypes,
QgsProviderRegistry,
QgsProviderUtils
QgsProviderUtils,
QgsProviderSublayerDetails,
QgsMapLayerType
)
from qgis.testing import (
unittest,
@ -112,6 +114,26 @@ class TestQgsProviderUtils(unittest.TestCase):
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