Skip to content

Commit 10a91b7

Browse files
committed
postgres provider: use INT_MIN for unknown srid (fixes #7889)
1 parent 7a47be2 commit 10a91b7

File tree

4 files changed

+15
-11
lines changed

4 files changed

+15
-11
lines changed

src/providers/postgres/qgscolumntypethread.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ void QgsGeomColumnTypeThread::run()
7777

7878
if ( !layerProperty.geometryColName.isNull() &&
7979
( layerProperty.types.value( 0, QGis::WKBUnknown ) == QGis::WKBUnknown ||
80-
layerProperty.srids.value( 0, 0 ) <= 0 ) )
80+
layerProperty.srids.value( 0, INT_MIN ) == INT_MIN ) )
8181
{
8282
if ( dontResolveType )
8383
{

src/providers/postgres/qgspgtablemodel.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ void QgsPgTableModel::addTableEntry( QgsPostgresLayerProperty layerProperty )
5656
wkbType = QGis::WKBNoGeometry;
5757
}
5858

59-
bool selectable = wkbType == QGis::WKBNoGeometry || ( wkbType != QGis::WKBUnknown && srid >= 0 );
59+
bool selectable = wkbType == QGis::WKBNoGeometry || ( wkbType != QGis::WKBUnknown && srid != INT_MIN );
6060

6161
QStandardItem *schemaNameItem = new QStandardItem( layerProperty.schemaName );
6262
QStandardItem *typeItem = new QStandardItem( iconForWkbType( wkbType ), wkbType == QGis::WKBUnknown ? tr( "Select..." ) : QgsPostgresConn::displayStringForWkbType( wkbType ) );
@@ -70,7 +70,7 @@ void QgsPgTableModel::addTableEntry( QgsPostgresLayerProperty layerProperty )
7070
QStandardItem *tableItem = new QStandardItem( layerProperty.tableName );
7171
QStandardItem *geomItem = new QStandardItem( layerProperty.geometryColName );
7272
QStandardItem *sridItem = new QStandardItem( wkbType != QGis::WKBNoGeometry ? QString::number( srid ) : "" );
73-
sridItem->setEditable( wkbType != QGis::WKBNoGeometry && srid < 0 );
73+
sridItem->setEditable( wkbType != QGis::WKBNoGeometry && srid == INT_MIN );
7474
if ( sridItem->isEditable() )
7575
{
7676
sridItem->setText( tr( "Enter..." ) );
@@ -250,7 +250,7 @@ bool QgsPgTableModel::setData( const QModelIndex &idx, const QVariant &value, in
250250
if ( ok && geomType != QGis::WKBNoGeometry )
251251
{
252252
int srid = idx.sibling( idx.row(), dbtmSrid ).data().toInt( &ok );
253-
ok &= srid >= 0;
253+
ok &= srid != INT_MIN;
254254
}
255255

256256
QStringList pkCols = idx.sibling( idx.row(), dbtmPkCol ).data( Qt::UserRole + 1 ).toStringList();

src/providers/postgres/qgspostgresconn.cpp

+10-5
Original file line numberDiff line numberDiff line change
@@ -378,10 +378,15 @@ bool QgsPostgresConn::getTableInfo( bool searchGeometryColumnsOnly, bool searchP
378378
QString schemaName = result.PQgetvalue( idx, 1 );
379379
QString column = result.PQgetvalue( idx, 2 );
380380
QString type = result.PQgetvalue( idx, 3 );
381-
QString srid = result.PQgetvalue( idx, 4 );
381+
QString ssrid = result.PQgetvalue( idx, 4 );
382382
QString relkind = result.PQgetvalue( idx, 5 );
383-
if ( srid.isEmpty() || srid == "0" )
384-
srid = "-1";
383+
384+
int srid = ssrid.isEmpty() ? INT_MIN : ssrid.toInt();
385+
if ( majorVersion() >= 2 && srid == 0 )
386+
{
387+
// 0 doesn't constraint => detect
388+
srid = INT_MIN;
389+
}
385390

386391
QgsDebugMsg( QString( "%1 : %2.%3.%4: %5 %6 %7" )
387392
.arg( gtableName )
@@ -396,7 +401,7 @@ bool QgsPostgresConn::getTableInfo( bool searchGeometryColumnsOnly, bool searchP
396401
layerProperty.geometryColName = column;
397402
layerProperty.geometryColType = columnType;
398403
layerProperty.types = QList<QGis::WkbType>() << ( QgsPostgresConn::wkbTypeFromPostgis( type ) );
399-
layerProperty.srids = QList<int>() << srid.toInt();
404+
layerProperty.srids = QList<int>() << srid;
400405
layerProperty.sql = "";
401406

402407
if ( relkind == "v" )
@@ -572,7 +577,7 @@ bool QgsPostgresConn::getTableInfo( bool searchGeometryColumnsOnly, bool searchP
572577
QgsDebugMsg( QString( "%1.%2: %3" ).arg( schema ).arg( table ).arg( relkind ) );
573578

574579
layerProperty.types = QList<QGis::WkbType>() << QGis::WKBNoGeometry;
575-
layerProperty.srids = QList<int>() << -1;
580+
layerProperty.srids = QList<int>() << INT_MIN;
576581
layerProperty.schemaName = schema;
577582
layerProperty.tableName = table;
578583
layerProperty.geometryColName = QString::null;

src/providers/postgres/qgspostgresdataitems.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,8 @@ void QgsPGConnectionItem::setLayerType( QgsPostgresLayerProperty layerProperties
122122
for ( int i = 0; i < layerProperties.size(); i++ )
123123
{
124124
QgsPostgresLayerProperty layerProperty = layerProperties.at( i );
125-
126125
if ( layerProperty.types[0] == QGis::WKBUnknown ||
127-
(!layerProperty.geometryColName.isEmpty() && layerProperty.srids[0] < 0 ) )
126+
( !layerProperty.geometryColName.isEmpty() && layerProperty.srids[0] == INT_MIN ) )
128127
continue;
129128

130129
if ( !schemaItem )

0 commit comments

Comments
 (0)