Skip to content

Commit b90fb29

Browse files
author
Sandro Santilli
committed
Backport fix for mis-detection of PostGIS table types (#9421)
Don't try to detect geometry type or srid, if it's already known Backport of eaf5725 by Jef
1 parent 96dd172 commit b90fb29

File tree

1 file changed

+35
-15
lines changed

1 file changed

+35
-15
lines changed

src/providers/postgres/qgspostgresconn.cpp

+35-15
Original file line numberDiff line numberDiff line change
@@ -1118,21 +1118,41 @@ void QgsPostgresConn::retrieveLayerTypes( QgsPostgresLayerProperty &layerPropert
11181118
table += QString( " WHERE %1" ).arg( layerProperty.sql );
11191119
}
11201120

1121-
QString query = QString( "SELECT DISTINCT"
1122-
" CASE"
1123-
" WHEN %1 THEN 'POINT'"
1124-
" WHEN %2 THEN 'LINESTRING'"
1125-
" WHEN %3 THEN 'POLYGON'"
1126-
" END,"
1127-
" %4(%5%6)"
1128-
" FROM %7" )
1129-
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBPoint, layerProperty.geometryColType == sctGeography ) )
1130-
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBLineString, layerProperty.geometryColType == sctGeography ) )
1131-
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBPolygon, layerProperty.geometryColType == sctGeography ) )
1132-
.arg( majorVersion() < 2 ? "srid" : "st_srid" )
1133-
.arg( quotedIdentifier( layerProperty.geometryColName ) )
1134-
.arg( layerProperty.geometryColType == sctGeography ? "::geometry" : "" )
1135-
.arg( table );
1121+
QString query = "SELECT DISTINCT ";
1122+
1123+
QGis::WkbType type = layerProperty.types.value( 0, QGis::WKBUnknown );
1124+
if ( type == QGis::WKBUnknown )
1125+
{
1126+
query += QString( "CASE"
1127+
" WHEN %1 THEN 'POINT'"
1128+
" WHEN %2 THEN 'LINESTRING'"
1129+
" WHEN %3 THEN 'POLYGON'"
1130+
" END" )
1131+
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBPoint, layerProperty.geometryColType == sctGeography ) )
1132+
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBLineString, layerProperty.geometryColType == sctGeography ) )
1133+
.arg( postgisTypeFilter( layerProperty.geometryColName, QGis::WKBPolygon, layerProperty.geometryColType == sctGeography ) );
1134+
}
1135+
else
1136+
{
1137+
query += quotedValue( QgsPostgresConn::postgisWkbTypeName( type ) );
1138+
}
1139+
1140+
query += ",";
1141+
1142+
int srid = layerProperty.srids.value( 0, INT_MIN );
1143+
if ( srid == INT_MIN )
1144+
{
1145+
query += QString( "%1(%2%3)" )
1146+
.arg( majorVersion() < 2 ? "srid" : "st_srid" )
1147+
.arg( quotedIdentifier( layerProperty.geometryColName ) )
1148+
.arg( layerProperty.geometryColType == sctGeography ? "::geometry" : "" );
1149+
}
1150+
else
1151+
{
1152+
query += QString::number( srid );
1153+
}
1154+
1155+
query += " FROM " + table;
11361156

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

0 commit comments

Comments
 (0)