@@ -2910,7 +2910,42 @@ bool QgsPostgresProvider::getGeometryDetails()
2910
2910
}
2911
2911
else
2912
2912
{
2913
- detectedType = mRequestedGeomType == QGis::WKBUnknown ? " " : QgsPostgresConn::postgisWkbTypeName ( mRequestedGeomType );
2913
+ sql = QString ( " SELECT %1 FROM %2 LIMIT 0" ).arg ( quotedIdentifier ( mGeometryColumn ), mQuery );
2914
+ result = connectionRO ()->PQexec ( sql );
2915
+ if ( PGRES_TUPLES_OK == result.PQresultStatus () )
2916
+ {
2917
+ sql = QString ( " SELECT (SELECT t.typname FROM pg_type t WHERE oid = %1), upper(postgis_typmod_type(%2)), postgis_typmod_srid(%2)" )
2918
+ .arg (QString::number ( result.PQftype ( 0 ) ), QString::number ( result.PQfmod ( 0 ) ) );
2919
+ result = connectionRO ()->PQexec ( sql );
2920
+ if ( result.PQntuples () == 1 )
2921
+ {
2922
+ geomColType = result.PQgetvalue ( 0 , 0 );
2923
+ detectedType = result.PQgetvalue ( 0 , 1 );
2924
+ detectedSrid = result.PQgetvalue ( 0 , 2 );
2925
+ if ( geomColType == " geometry" )
2926
+ mSpatialColType = sctGeometry;
2927
+ else if ( geomColType == " geography" )
2928
+ mSpatialColType = sctGeography;
2929
+ else if ( geomColType == " topogeometry" )
2930
+ mSpatialColType = sctTopoGeometry;
2931
+ else if ( geomColType == " pcpatch" )
2932
+ mSpatialColType = sctPcPatch;
2933
+ else {
2934
+ detectedType = mRequestedGeomType == QGis::WKBUnknown ? " " : QgsPostgresConn::postgisWkbTypeName ( mRequestedGeomType );
2935
+ detectedSrid = mRequestedSrid ;
2936
+ }
2937
+ }
2938
+ else
2939
+ {
2940
+ connectionRO ()->PQexecNR ( " COMMIT" );
2941
+ detectedType = mRequestedGeomType == QGis::WKBUnknown ? " " : QgsPostgresConn::postgisWkbTypeName ( mRequestedGeomType );
2942
+ }
2943
+ }
2944
+ else
2945
+ {
2946
+ mValid = false ;
2947
+ return false ;
2948
+ }
2914
2949
}
2915
2950
2916
2951
mDetectedGeomType = QgsPostgresConn::wkbTypeFromPostgis ( detectedType );
0 commit comments