@@ -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
0 commit comments