Skip to content

Commit

Permalink
SL provider: convert geometries to multipart when necessary (fix #6257)
Browse files Browse the repository at this point in the history
  • Loading branch information
brushtyler committed Dec 5, 2012
1 parent e169735 commit 1bde6c5
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 1 deletion.
45 changes: 44 additions & 1 deletion src/providers/spatialite/qgsspatialiteprovider.cpp
Expand Up @@ -3720,6 +3720,49 @@ void QgsSpatiaLiteProvider::uniqueValues( int index, QList < QVariant > &uniqueV
return;
}

QString QgsSpatiaLiteProvider::geomParam() const
{
QString geometry;

bool forceMulti = false;

switch ( geometryType() )
{
case QGis::WKBPoint:
case QGis::WKBLineString:
case QGis::WKBPolygon:
case QGis::WKBPoint25D:
case QGis::WKBLineString25D:
case QGis::WKBPolygon25D:
case QGis::WKBUnknown:
case QGis::WKBNoGeometry:
forceMulti = false;
break;

case QGis::WKBMultiPoint:
case QGis::WKBMultiLineString:
case QGis::WKBMultiPolygon:
case QGis::WKBMultiPoint25D:
case QGis::WKBMultiLineString25D:
case QGis::WKBMultiPolygon25D:
forceMulti = true;
break;
}

if ( forceMulti )
{
geometry += "ST_Multi(";
}

geometry += QString( "GeomFromWKB(?, %2)" ).arg( mSrid );

if ( forceMulti )
{
geometry += ")";
}

return geometry;
}

bool QgsSpatiaLiteProvider::addFeatures( QgsFeatureList & flist )
{
Expand Down Expand Up @@ -3750,7 +3793,7 @@ bool QgsSpatiaLiteProvider::addFeatures( QgsFeatureList & flist )
if ( !mGeometryColumn.isNull() )
{
sql += separator + quotedIdentifier( mGeometryColumn );
values += separator + QString( "GeomFromWKB(?, %2)" ).arg( mSrid );
values += separator + geomParam();
separator = ",";
}

Expand Down
2 changes: 2 additions & 0 deletions src/providers/spatialite/qgsspatialiteprovider.h
Expand Up @@ -286,6 +286,8 @@ class QgsSpatiaLiteProvider: public QgsVectorDataProvider
/** convert a QgsField to work with SL */
static bool convertField( QgsField &field );

QString geomParam() const;

QgsFieldMap attributeFields;
/**
* Flag indicating if the layer data source is a valid SpatiaLite layer
Expand Down

0 comments on commit 1bde6c5

Please sign in to comment.