Skip to content

Commit eaf5725

Browse files
committed
postgres provider: don't try to detect geometry type or srid, if it's already known (fixes #9421)
1 parent 72988e9 commit eaf5725

File tree

2 files changed

+37
-17
lines changed

2 files changed

+37
-17
lines changed

src/providers/postgres/qgspostgresconn.cpp

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1132,21 +1132,41 @@ void QgsPostgresConn::retrieveLayerTypes( QgsPostgresLayerProperty &layerPropert
11321132
table += QString( " WHERE %1" ).arg( layerProperty.sql );
11331133
}
11341134

1135-
QString query = QString( "SELECT DISTINCT"
1136-
" CASE"
1137-
" WHEN %1 THEN 'POINT'"
1138-
" WHEN %2 THEN 'LINESTRING'"
1139-
" WHEN %3 THEN 'POLYGON'"
1140-
" END,"
1141-
" %4(%5%6)"
1142-
" FROM %7" )
1143-
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBPoint, layerProperty.geometryColType == sctGeography ) )
1144-
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBLineString, layerProperty.geometryColType == sctGeography ) )
1145-
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBPolygon, layerProperty.geometryColType == sctGeography ) )
1146-
.arg( majorVersion() < 2 ? "srid" : "st_srid" )
1147-
.arg( quotedIdentifier( layerProperty.geometryColName ) )
1148-
.arg( layerProperty.geometryColType == sctGeography ? "::geometry" : "" )
1149-
.arg( table );
1135+
QString query = "SELECT DISTINCT ";
1136+
1137+
QGis::WkbType type = layerProperty.types.value( 0, QGis::WKBUnknown );
1138+
if ( type == QGis::WKBUnknown )
1139+
{
1140+
query += QString( "CASE"
1141+
" WHEN %1 THEN 'POINT'"
1142+
" WHEN %2 THEN 'LINESTRING'"
1143+
" WHEN %3 THEN 'POLYGON'"
1144+
" END" )
1145+
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBPoint, layerProperty.geometryColType == sctGeography ) )
1146+
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBLineString, layerProperty.geometryColType == sctGeography ) )
1147+
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBPolygon, layerProperty.geometryColType == sctGeography ) );
1148+
}
1149+
else
1150+
{
1151+
query += quotedValue( QgsPostgresConn::postgisWkbTypeName( type ) );
1152+
}
1153+
1154+
query += ",";
1155+
1156+
int srid = layerProperty.srids.value( 0, INT_MIN );
1157+
if ( srid == INT_MIN )
1158+
{
1159+
query += QString( "%1(%2%3)" )
1160+
.arg( majorVersion() < 2 ? "srid" : "st_srid" )
1161+
.arg( quotedIdentifier( layerProperty.geometryColName ) )
1162+
.arg( layerProperty.geometryColType == sctGeography ? "::geometry" : "" );
1163+
}
1164+
else
1165+
{
1166+
query += QString::number( srid );
1167+
}
1168+
1169+
query += " FROM " + table;
11501170

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

src/providers/postgres/qgspostgresfeatureiterator.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ bool QgsPostgresFeatureIterator::declareCursor( const QString& whereClause )
305305
{
306306
QString simplifyFunctionName = simplifyMethod.methodType() == QgsSimplifyMethod::OptimizeForRendering
307307
? ( P->mConnectionRO->majorVersion() < 2 ? "simplify" : "st_simplify" )
308-
: ( P->mConnectionRO->majorVersion() < 2 ? "simplifypreservetopology" : "st_simplifypreservetopology" );
308+
: ( P->mConnectionRO->majorVersion() < 2 ? "simplifypreservetopology" : "st_simplifypreservetopology" );
309309

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

636636
geometry = QgsGeometry::fromPolyline( polyline );
637637
feature.setGeometry( geometry );
638-
}
638+
}
639639
}
640640
}
641641
}

0 commit comments

Comments
 (0)