diff --git a/src/providers/postgres/qgspostgresconn.cpp b/src/providers/postgres/qgspostgresconn.cpp index 89ed35ec5896..794c30a030f6 100644 --- a/src/providers/postgres/qgspostgresconn.cpp +++ b/src/providers/postgres/qgspostgresconn.cpp @@ -1021,28 +1021,29 @@ void QgsPostgresConn::retrieveLayerTypes( QgsPostgresLayerProperty &layerPropert { QString table; + if ( !layerProperty.schemaName.isEmpty() ) + { + table = QString("%1.%2").arg( quotedIdentifier( layerProperty.schemaName ) ).arg( layerProperty.tableName ); + } + else + { + // Query + table = layerProperty.tableName; + } + + // it is possible that the where clause restricts the feature type or srid if ( useEstimatedMetadata ) { - table = QString( "(SELECT %1 FROM %2.%3 WHERE %1 IS NOT NULL%4 LIMIT %5) AS t" ) + table = QString( "(SELECT %1 FROM %2 WHERE %1 IS NOT NULL%3 LIMIT %4) AS t" ) .arg( quotedIdentifier( layerProperty.geometryColName ) ) - .arg( quotedIdentifier( layerProperty.schemaName ) ) - .arg( quotedIdentifier( layerProperty.tableName ) ) + .arg( table ) .arg( layerProperty.sql.isEmpty() ? "" : QString( " AND (%1)" ).arg( layerProperty.sql ) ) .arg( sGeomTypeSelectLimit ); } - else if ( !layerProperty.schemaName.isEmpty() ) - { - table = QString( "%1.%2%3" ) - .arg( quotedIdentifier( layerProperty.schemaName ) ) - .arg( quotedIdentifier( layerProperty.tableName ) ) - .arg( layerProperty.sql.isEmpty() ? "" : QString( " WHERE %1" ).arg( layerProperty.sql ) ); - } - else + else if( !layerProperty.sql.isEmpty() ) { - table = QString( "%1%2" ) - .arg( layerProperty.tableName ) - .arg( layerProperty.sql.isEmpty() ? "" : QString( " WHERE %1" ).arg( layerProperty.sql ) ); + table += QString( " WHERE %1" ).arg( layerProperty.sql ); } QString query = QString( "SELECT DISTINCT" diff --git a/src/providers/postgres/qgspostgresprovider.cpp b/src/providers/postgres/qgspostgresprovider.cpp index d63c5c73df6f..7125efdc2d9c 100644 --- a/src/providers/postgres/qgspostgresprovider.cpp +++ b/src/providers/postgres/qgspostgresprovider.cpp @@ -2778,8 +2778,16 @@ bool QgsPostgresProvider::getGeometryDetails() if ( QgsPostgresConn::wkbTypeFromPostgis( detectedType ) == QGis::WKBUnknown ) { QgsPostgresLayerProperty layerProperty; - layerProperty.schemaName = schemaName; - layerProperty.tableName = tableName; + if( !mIsQuery ) + { + layerProperty.schemaName = schemaName; + layerProperty.tableName = tableName; + } + else + { + layerProperty.schemaName = ""; + layerProperty.tableName = mQuery; + } layerProperty.geometryColName = mGeometryColumn; layerProperty.isGeography = mIsGeography;