From f512e87ffd0ed7297520bf63830c1fc5c37d7ee9 Mon Sep 17 00:00:00 2001 From: Sandro Santilli Date: Tue, 3 Mar 2015 17:34:48 +0100 Subject: [PATCH] Detect number of dimensions for tables with unconstrained type Fixes #9748 --- src/providers/postgres/qgspostgresconn.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/providers/postgres/qgspostgresconn.cpp b/src/providers/postgres/qgspostgresconn.cpp index 5e11bf275d1..9dc18805a5b 100644 --- a/src/providers/postgres/qgspostgresconn.cpp +++ b/src/providers/postgres/qgspostgresconn.cpp @@ -1298,6 +1298,12 @@ void QgsPostgresConn::retrieveLayerTypes( QgsPostgresLayerProperty &layerPropert query += QString::number( srid ); } + query += ","; + query += QString( "%1(%2%3)" ) + .arg( majorVersion() < 2 ? "ndims" : "st_ndims" ) + .arg( quotedIdentifier( layerProperty.geometryColName ) ) + .arg( layerProperty.geometryColType == sctGeography ? "::geometry" : "" ); + query += " FROM " + table; //QgsDebugMsg( "Retrieving geometry types: " + query ); @@ -1310,6 +1316,10 @@ void QgsPostgresConn::retrieveLayerTypes( QgsPostgresLayerProperty &layerPropert { QString type = gresult.PQgetvalue( i, 0 ); QString srid = gresult.PQgetvalue( i, 1 ); + QString ndims = gresult.PQgetvalue( i, 2 ); + + if ( ndims.toInt() > 2 ) layerProperty.force2d = true; + if ( type.isEmpty() ) continue;