Skip to content

Commit

Permalink
postgres provider: don't try to detect geometry type or srid, if it's…
Browse files Browse the repository at this point in the history
… already known (fixes #9421)
  • Loading branch information
jef-n committed Jan 24, 2014
1 parent 72988e9 commit eaf5725
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 17 deletions.
50 changes: 35 additions & 15 deletions src/providers/postgres/qgspostgresconn.cpp
Expand Up @@ -1132,21 +1132,41 @@ void QgsPostgresConn::retrieveLayerTypes( QgsPostgresLayerProperty &layerPropert
table += QString( " WHERE %1" ).arg( layerProperty.sql );
}

QString query = QString( "SELECT DISTINCT"
" CASE"
" WHEN %1 THEN 'POINT'"
" WHEN %2 THEN 'LINESTRING'"
" WHEN %3 THEN 'POLYGON'"
" END,"
" %4(%5%6)"
" FROM %7" )
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBPoint, layerProperty.geometryColType == sctGeography ) )
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBLineString, layerProperty.geometryColType == sctGeography ) )
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBPolygon, layerProperty.geometryColType == sctGeography ) )
.arg( majorVersion() < 2 ? "srid" : "st_srid" )
.arg( quotedIdentifier( layerProperty.geometryColName ) )
.arg( layerProperty.geometryColType == sctGeography ? "::geometry" : "" )
.arg( table );
QString query = "SELECT DISTINCT ";

QGis::WkbType type = layerProperty.types.value( 0, QGis::WKBUnknown );
if ( type == QGis::WKBUnknown )
{
query += QString( "CASE"
" WHEN %1 THEN 'POINT'"
" WHEN %2 THEN 'LINESTRING'"
" WHEN %3 THEN 'POLYGON'"
" END" )
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBPoint, layerProperty.geometryColType == sctGeography ) )
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBLineString, layerProperty.geometryColType == sctGeography ) )
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBPolygon, layerProperty.geometryColType == sctGeography ) );
}
else
{
query += quotedValue( QgsPostgresConn::postgisWkbTypeName( type ) );
}

query += ",";

int srid = layerProperty.srids.value( 0, INT_MIN );
if ( srid == INT_MIN )
{
query += QString( "%1(%2%3)" )
.arg( majorVersion() < 2 ? "srid" : "st_srid" )
.arg( quotedIdentifier( layerProperty.geometryColName ) )
.arg( layerProperty.geometryColType == sctGeography ? "::geometry" : "" );
}
else
{
query += QString::number( srid );
}

query += " FROM " + table;

QgsDebugMsg( "Retrieving geometry types: " + query );

Expand Down
4 changes: 2 additions & 2 deletions src/providers/postgres/qgspostgresfeatureiterator.cpp
Expand Up @@ -305,7 +305,7 @@ bool QgsPostgresFeatureIterator::declareCursor( const QString& whereClause )
{
QString simplifyFunctionName = simplifyMethod.methodType() == QgsSimplifyMethod::OptimizeForRendering
? ( P->mConnectionRO->majorVersion() < 2 ? "simplify" : "st_simplify" )
: ( P->mConnectionRO->majorVersion() < 2 ? "simplifypreservetopology" : "st_simplifypreservetopology" );
: ( P->mConnectionRO->majorVersion() < 2 ? "simplifypreservetopology" : "st_simplifypreservetopology" );

double tolerance = simplifyMethod.tolerance() * 0.8; //-> Default factor for the maximum displacement distance for simplification, similar as GeoServer does
simplifyGeometry = simplifyMethod.methodType() == QgsSimplifyMethod::OptimizeForRendering;
Expand Down Expand Up @@ -635,7 +635,7 @@ bool QgsPostgresFeatureIterator::getFeature( QgsPostgresResult &queryResult, int

geometry = QgsGeometry::fromPolyline( polyline );
feature.setGeometry( geometry );
}
}
}
}
}
Expand Down

0 comments on commit eaf5725

Please sign in to comment.