Skip to content

Commit 0e6cca3

Browse files
author
mhugent
committed
Fix for bug #1657 and fix for a memory leak in ogr provider
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@10667 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent 41130af commit 0e6cca3

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

src/core/qgsvectorlayer.cpp

+18-1
Original file line numberDiff line numberDiff line change
@@ -1707,7 +1707,7 @@ int QgsVectorLayer::translateFeature( int featureId, double dx, double dy )
17071707
}
17081708
}
17091709

1710-
//else, if must be contained in mCachedGeometries
1710+
//else look in mCachedGeometries to make access faster
17111711
QgsGeometryMap::iterator cachedIt = mCachedGeometries.find( featureId );
17121712
if ( cachedIt != mCachedGeometries.end() )
17131713
{
@@ -1719,6 +1719,23 @@ int QgsVectorLayer::translateFeature( int featureId, double dx, double dy )
17191719
}
17201720
return errorCode;
17211721
}
1722+
1723+
//else get the geometry from provider (may be slow)
1724+
QgsFeature f;
1725+
if(mDataProvider && mDataProvider->featureAtId(featureId, f, true))
1726+
{
1727+
if(f.geometry())
1728+
{
1729+
QgsGeometry translateGeom(*(f.geometry()));
1730+
int errorCode = translateGeom.translate(dx, dy);
1731+
if(errorCode == 0)
1732+
{
1733+
mChangedGeometries.insert(featureId, translateGeom);
1734+
setModified(true, true);
1735+
}
1736+
return errorCode;
1737+
}
1738+
}
17221739
return 1; //geometry not found
17231740
}
17241741

src/providers/ogr/qgsogrprovider.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,8 @@ bool QgsOgrProvider::featureAtId( int featureId,
337337
getFeatureAttribute( fet, feature, *it );
338338
}
339339

340+
OGR_F_Destroy( fet );
341+
feature.setValid( true );
340342
return true;
341343
}
342344

0 commit comments

Comments
 (0)