Skip to content

Commit 38e6947

Browse files
committed
allow setting geometry empty in postgres and spatialite provider (applies PR#1343)
1 parent 59e6abc commit 38e6947

File tree

2 files changed

+27
-39
lines changed

2 files changed

+27
-39
lines changed

src/providers/postgres/qgspostgresprovider.cpp

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2171,18 +2171,12 @@ bool QgsPostgresProvider::changeGeometryValues( QgsGeometryMap & geometry_map )
21712171
throw PGException( result );
21722172
}
21732173

2174+
QgsDebugMsg( "iterating over the map of changed geometries..." );
2175+
21742176
for ( QgsGeometryMap::iterator iter = geometry_map.begin();
21752177
iter != geometry_map.end();
21762178
++iter )
21772179
{
2178-
QgsDebugMsg( "iterating over the map of changed geometries..." );
2179-
2180-
if ( !iter->asWkb() )
2181-
{
2182-
QgsDebugMsg( "empty geometry" );
2183-
continue;
2184-
}
2185-
21862180
QgsDebugMsg( "iterating over feature id " + FID_TO_STRING( iter.key() ) );
21872181

21882182
// Save the id of the current topogeometry

src/providers/spatialite/qgsspatialiteprovider.cpp

Lines changed: 25 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3981,39 +3981,33 @@ bool QgsSpatiaLiteProvider::changeGeometryValues( QgsGeometryMap & geometry_map
39813981

39823982
for ( QgsGeometryMap::iterator iter = geometry_map.begin(); iter != geometry_map.end(); ++iter )
39833983
{
3984-
// looping on each feature to change
3985-
if ( iter->asWkb() )
3986-
{
3987-
3988-
// resetting Prepared Statement and bindings
3989-
sqlite3_reset( stmt );
3990-
sqlite3_clear_bindings( stmt );
3991-
3992-
// binding GEOMETRY to Prepared Statement
3993-
unsigned char *wkb = NULL;
3994-
size_t wkb_size;
3995-
convertFromGeosWKB( iter->asWkb(), iter->wkbSize(), &wkb, &wkb_size,
3996-
nDims );
3997-
if ( !wkb )
3998-
sqlite3_bind_null( stmt, 1 );
3999-
else
4000-
sqlite3_bind_blob( stmt, 1, wkb, wkb_size, free );
4001-
sqlite3_bind_int64( stmt, 2, FID_TO_NUMBER( iter.key() ) );
3984+
// resetting Prepared Statement and bindings
3985+
sqlite3_reset( stmt );
3986+
sqlite3_clear_bindings( stmt );
40023987

4003-
// performing actual row update
4004-
ret = sqlite3_step( stmt );
4005-
if ( ret == SQLITE_DONE || ret == SQLITE_ROW )
4006-
;
4007-
else
4008-
{
4009-
// some unexpected error occurred
4010-
const char *err = sqlite3_errmsg( sqliteHandle );
4011-
int len = strlen( err );
4012-
errMsg = ( char * ) sqlite3_malloc( len + 1 );
4013-
strcpy( errMsg, err );
4014-
goto abort;
4015-
}
3988+
// binding GEOMETRY to Prepared Statement
3989+
unsigned char *wkb = NULL;
3990+
size_t wkb_size;
3991+
convertFromGeosWKB( iter->asWkb(), iter->wkbSize(), &wkb, &wkb_size,
3992+
nDims );
3993+
if ( !wkb )
3994+
sqlite3_bind_null( stmt, 1 );
3995+
else
3996+
sqlite3_bind_blob( stmt, 1, wkb, wkb_size, free );
3997+
sqlite3_bind_int64( stmt, 2, FID_TO_NUMBER( iter.key() ) );
40163998

3999+
// performing actual row update
4000+
ret = sqlite3_step( stmt );
4001+
if ( ret == SQLITE_DONE || ret == SQLITE_ROW )
4002+
;
4003+
else
4004+
{
4005+
// some unexpected error occurred
4006+
const char *err = sqlite3_errmsg( sqliteHandle );
4007+
int len = strlen( err );
4008+
errMsg = ( char * ) sqlite3_malloc( len + 1 );
4009+
strcpy( errMsg, err );
4010+
goto abort;
40174011
}
40184012
}
40194013
sqlite3_finalize( stmt );

0 commit comments

Comments
 (0)