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
490b3cda54
commit
b2f27a8529
@ -1027,10 +1027,20 @@ void QgsMssqlProvider::UpdateStatistics( bool estimate ) const
|
|||||||
|
|
||||||
if ( !readAllGeography && query.next() )
|
if ( !readAllGeography && query.next() )
|
||||||
{
|
{
|
||||||
mExtent.setXMinimum( query.value( 0 ).toDouble() );
|
if ( QgsVariantUtils::isNull( query.value( 0 ) )
|
||||||
mExtent.setYMinimum( query.value( 1 ).toDouble() );
|
|| QgsVariantUtils::isNull( query.value( 1 ) )
|
||||||
mExtent.setXMaximum( query.value( 2 ).toDouble() );
|
|| QgsVariantUtils::isNull( query.value( 2 ) )
|
||||||
mExtent.setYMaximum( query.value( 3 ).toDouble() );
|
|| 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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1042,15 +1052,7 @@ void QgsMssqlProvider::UpdateStatistics( bool estimate ) const
|
|||||||
if ( geom )
|
if ( geom )
|
||||||
{
|
{
|
||||||
const QgsRectangle rect = geom->boundingBox();
|
const QgsRectangle rect = geom->boundingBox();
|
||||||
|
mExtent.combineExtentWith( rect );
|
||||||
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() );
|
|
||||||
|
|
||||||
mWkbType = geom->wkbType();
|
mWkbType = geom->wkbType();
|
||||||
mSRId = mParser.GetSRSId();
|
mSRId = mParser.GetSRSId();
|
||||||
@ -1061,7 +1063,7 @@ void QgsMssqlProvider::UpdateStatistics( bool estimate ) const
|
|||||||
// Return the extent of the layer
|
// Return the extent of the layer
|
||||||
QgsRectangle QgsMssqlProvider::extent() const
|
QgsRectangle QgsMssqlProvider::extent() const
|
||||||
{
|
{
|
||||||
if ( mExtent.isEmpty() )
|
if ( mExtent.isNull() )
|
||||||
UpdateStatistics( mUseEstimatedMetadata );
|
UpdateStatistics( mUseEstimatedMetadata );
|
||||||
return mExtent;
|
return mExtent;
|
||||||
}
|
}
|
||||||
|
@ -558,10 +558,18 @@ class ProviderTestCase(FeatureSourceTestCase):
|
|||||||
def testExtent(self):
|
def testExtent(self):
|
||||||
reference_extent = self.referenceExtent()
|
reference_extent = self.referenceExtent()
|
||||||
provider_extent = self.source.extent()
|
provider_extent = self.source.extent()
|
||||||
self.assertAlmostEqual(provider_extent.xMinimum(), reference_extent.xMinimum())
|
self.assertAlmostEqual(
|
||||||
self.assertAlmostEqual(provider_extent.xMaximum(), reference_extent.xMaximum())
|
provider_extent.xMinimum(), reference_extent.xMinimum(), 5
|
||||||
self.assertAlmostEqual(provider_extent.yMinimum(), reference_extent.yMinimum())
|
)
|
||||||
self.assertAlmostEqual(provider_extent.yMaximum(), reference_extent.yMaximum())
|
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):
|
def testExtentSubsetString(self):
|
||||||
if self.source.supportsSubsetString():
|
if self.source.supportsSubsetString():
|
||||||
|
@ -746,9 +746,7 @@ class TestPyQgsMssqlProvider(QgisTestCase, ProviderTestCase):
|
|||||||
)
|
)
|
||||||
self.assertTrue(vl.isValid())
|
self.assertTrue(vl.isValid())
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertTrue(vl.dataProvider().extent().isNull()) # HAHA - you asked for it
|
||||||
vl.dataProvider().extent().toString(1), "Empty"
|
|
||||||
) # HAHA - you asked for it
|
|
||||||
# burn through features - don't expect anything wrong here yet
|
# burn through features - don't expect anything wrong here yet
|
||||||
count = 0
|
count = 0
|
||||||
for f in vl.dataProvider().getFeatures():
|
for f in vl.dataProvider().getFeatures():
|
||||||
@ -772,7 +770,7 @@ class TestPyQgsMssqlProvider(QgisTestCase, ProviderTestCase):
|
|||||||
"mssql",
|
"mssql",
|
||||||
)
|
)
|
||||||
self.assertTrue(vl.isValid())
|
self.assertTrue(vl.isValid())
|
||||||
self.assertEqual(vl.dataProvider().extent().toString(1), "Empty")
|
self.assertTrue(vl.dataProvider().extent().isNull())
|
||||||
|
|
||||||
def testEvaluateDefaultValueClause(self):
|
def testEvaluateDefaultValueClause(self):
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user