Skip to content

Commit 6b3651f

Browse files
committed
Determine geometry type and srid directly from column type
1 parent 4edf1ee commit 6b3651f

File tree

1 file changed

+36
-1
lines changed

1 file changed

+36
-1
lines changed

src/providers/postgres/qgspostgresprovider.cpp

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2910,7 +2910,42 @@ bool QgsPostgresProvider::getGeometryDetails()
29102910
}
29112911
else
29122912
{
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+
}
29142949
}
29152950

29162951
mDetectedGeomType = QgsPostgresConn::wkbTypeFromPostgis( detectedType );

0 commit comments

Comments
 (0)