mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-22 00:06:12 -05:00
[mssql] Fix empty extent handling
This commit is contained in:
parent
4dd7d7e969
commit
535b548e55
@ -1027,10 +1027,20 @@ void QgsMssqlProvider::UpdateStatistics( bool estimate ) const
|
||||
|
||||
if ( !readAllGeography && query.next() )
|
||||
{
|
||||
mExtent.setXMinimum( query.value( 0 ).toDouble() );
|
||||
mExtent.setYMinimum( query.value( 1 ).toDouble() );
|
||||
mExtent.setXMaximum( query.value( 2 ).toDouble() );
|
||||
mExtent.setYMaximum( query.value( 3 ).toDouble() );
|
||||
if ( QgsVariantUtils::isNull( query.value( 0 ) )
|
||||
|| QgsVariantUtils::isNull( query.value( 1 ) )
|
||||
|| QgsVariantUtils::isNull( query.value( 2 ) )
|
||||
|| QgsVariantUtils::isNull( query.value( 3 ) ) )
|
||||
{
|
||||
mExtent.setNull();
|
||||
}
|
||||
else
|
||||
{
|
||||
mExtent.setXMinimum( query.value( 0 ).toDouble() );
|
||||
mExtent.setYMinimum( query.value( 1 ).toDouble() );
|
||||
mExtent.setXMaximum( query.value( 2 ).toDouble() );
|
||||
mExtent.setYMaximum( query.value( 3 ).toDouble() );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1042,15 +1052,7 @@ void QgsMssqlProvider::UpdateStatistics( bool estimate ) const
|
||||
if ( geom )
|
||||
{
|
||||
const QgsRectangle rect = geom->boundingBox();
|
||||
|
||||
if ( rect.xMinimum() < mExtent.xMinimum() )
|
||||
mExtent.setXMinimum( rect.xMinimum() );
|
||||
if ( rect.yMinimum() < mExtent.yMinimum() )
|
||||
mExtent.setYMinimum( rect.yMinimum() );
|
||||
if ( rect.xMaximum() > mExtent.xMaximum() )
|
||||
mExtent.setXMaximum( rect.xMaximum() );
|
||||
if ( rect.yMaximum() > mExtent.yMaximum() )
|
||||
mExtent.setYMaximum( rect.yMaximum() );
|
||||
mExtent.combineExtentWith( rect );
|
||||
|
||||
mWkbType = geom->wkbType();
|
||||
mSRId = mParser.GetSRSId();
|
||||
@ -1061,7 +1063,7 @@ void QgsMssqlProvider::UpdateStatistics( bool estimate ) const
|
||||
// Return the extent of the layer
|
||||
QgsRectangle QgsMssqlProvider::extent() const
|
||||
{
|
||||
if ( mExtent.isEmpty() )
|
||||
if ( mExtent.isNull() )
|
||||
UpdateStatistics( mUseEstimatedMetadata );
|
||||
return mExtent;
|
||||
}
|
||||
|
@ -557,10 +557,18 @@ class ProviderTestCase(FeatureSourceTestCase):
|
||||
def testExtent(self):
|
||||
reference_extent = self.referenceExtent()
|
||||
provider_extent = self.source.extent()
|
||||
self.assertAlmostEqual(provider_extent.xMinimum(), reference_extent.xMinimum())
|
||||
self.assertAlmostEqual(provider_extent.xMaximum(), reference_extent.xMaximum())
|
||||
self.assertAlmostEqual(provider_extent.yMinimum(), reference_extent.yMinimum())
|
||||
self.assertAlmostEqual(provider_extent.yMaximum(), reference_extent.yMaximum())
|
||||
self.assertAlmostEqual(
|
||||
provider_extent.xMinimum(), reference_extent.xMinimum(), 5
|
||||
)
|
||||
self.assertAlmostEqual(
|
||||
provider_extent.xMaximum(), reference_extent.xMaximum(), 5
|
||||
)
|
||||
self.assertAlmostEqual(
|
||||
provider_extent.yMinimum(), reference_extent.yMinimum(), 5
|
||||
)
|
||||
self.assertAlmostEqual(
|
||||
provider_extent.yMaximum(), reference_extent.yMaximum(), 5
|
||||
)
|
||||
|
||||
def testExtentSubsetString(self):
|
||||
if self.source.supportsSubsetString():
|
||||
|
@ -746,9 +746,7 @@ class TestPyQgsMssqlProvider(QgisTestCase, ProviderTestCase):
|
||||
)
|
||||
self.assertTrue(vl.isValid())
|
||||
|
||||
self.assertEqual(
|
||||
vl.dataProvider().extent().toString(1), "Empty"
|
||||
) # HAHA - you asked for it
|
||||
self.assertTrue(vl.dataProvider().extent().isNull()) # HAHA - you asked for it
|
||||
# burn through features - don't expect anything wrong here yet
|
||||
count = 0
|
||||
for f in vl.dataProvider().getFeatures():
|
||||
@ -772,7 +770,7 @@ class TestPyQgsMssqlProvider(QgisTestCase, ProviderTestCase):
|
||||
"mssql",
|
||||
)
|
||||
self.assertTrue(vl.isValid())
|
||||
self.assertEqual(vl.dataProvider().extent().toString(1), "Empty")
|
||||
self.assertTrue(vl.dataProvider().extent().isNull())
|
||||
|
||||
def testEvaluateDefaultValueClause(self):
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user