@@ -469,11 +469,12 @@ bool QgsPostgresConn::getTableInfo( bool searchGeometryColumnsOnly, bool searchP
469
469
layerProperty.types = QList<QGis::WkbType>() << ( QgsPostgresConn::wkbTypeFromPostgis ( type ) );
470
470
layerProperty.srids = QList<int >() << srid;
471
471
layerProperty.sql = " " ;
472
- /* TODO: why not != 2 ?
473
- * Also note the value is not necessarely trustworthy:
472
+ /*
473
+ * NOTE: force2d may get a false negative value
474
+ * (dim == 2 but is not really constrained)
474
475
* http://trac.osgeo.org/postgis/ticket/3068
475
476
*/
476
- layerProperty.force2d = dim == 4 ;
477
+ layerProperty.force2d = dim > 2 ;
477
478
addColumnInfo ( layerProperty, schemaName, tableName, isView );
478
479
479
480
if ( isView && layerProperty.pkCols .empty () )
@@ -1303,11 +1304,14 @@ void QgsPostgresConn::retrieveLayerTypes( QgsPostgresLayerProperty &layerPropert
1303
1304
query += QString::number ( srid );
1304
1305
}
1305
1306
1306
- query += " ," ;
1307
- query += QString ( " %1(%2%3)" )
1308
- .arg ( majorVersion () < 2 ? " ndims" : " st_ndims" )
1309
- .arg ( quotedIdentifier ( layerProperty.geometryColName ) )
1310
- .arg ( layerProperty.geometryColType == sctGeography ? " ::geometry" : " " );
1307
+ if ( ! layerProperty.force2d )
1308
+ {
1309
+ query += " ," ;
1310
+ query += QString ( " %1(%2%3)" )
1311
+ .arg ( majorVersion () < 2 ? " ndims" : " st_ndims" )
1312
+ .arg ( quotedIdentifier ( layerProperty.geometryColName ) )
1313
+ .arg ( layerProperty.geometryColType == sctGeography ? " ::geometry" : " " );
1314
+ }
1311
1315
1312
1316
query += " FROM " + table;
1313
1317
@@ -1321,9 +1325,12 @@ void QgsPostgresConn::retrieveLayerTypes( QgsPostgresLayerProperty &layerPropert
1321
1325
{
1322
1326
QString type = gresult.PQgetvalue ( i, 0 );
1323
1327
QString srid = gresult.PQgetvalue ( i, 1 );
1324
- QString ndims = gresult.PQgetvalue ( i, 2 );
1325
1328
1326
- if ( ndims.toInt () > 2 ) layerProperty.force2d = true ;
1329
+ if ( ! layerProperty.force2d )
1330
+ {
1331
+ QString ndims = gresult.PQgetvalue ( i, 2 );
1332
+ if ( ndims.toInt () > 2 ) layerProperty.force2d = true ;
1333
+ }
1327
1334
1328
1335
if ( type.isEmpty () )
1329
1336
continue ;
0 commit comments