Skip to content

Commit

Permalink
Tests for 50841 and fix source select missing key for raster views
Browse files Browse the repository at this point in the history
  • Loading branch information
elpaso committed Nov 11, 2022
1 parent 6b891c7 commit e6e1b9c
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 7 deletions.
19 changes: 14 additions & 5 deletions src/providers/postgres/qgspgtablemodel.cpp
Expand Up @@ -423,14 +423,23 @@ QString QgsPgTableModel::layerURI( const QModelIndex &index, const QString &conn
if ( isRaster )
{
// GDAL/PG connection string
QStandardItem *pkItem = itemFromIndex( index.sibling( index.row(), DbtmPkCol ) );
const QSet<QString> s1( qgis::listToSet( pkItem->data( Qt::UserRole + 2 ).toStringList() ) );
QStringList cols;
cols.reserve( s1.size() );
for ( const QString &col : std::as_const( s1 ) )
{
cols << QgsPostgresConn::quotedIdentifier( col );
}
const QString schemaName = index.sibling( index.row(), DbtmSchema ).data( Qt::DisplayRole ).toString();
const QString tableName = index.sibling( index.row(), DbtmTable ).data( Qt::DisplayRole ).toString();
const QString geomColumnName = index.sibling( index.row(), DbtmGeomCol ).data( Qt::DisplayRole ).toString();
QString connString { QStringLiteral( "PG: %1 mode=2 schema='%2' column='%3' table='%4'" )
.arg( connInfo )
.arg( schemaName )
.arg( geomColumnName )
.arg( tableName ) };
QString connString { QStringLiteral( "PG: %1 mode=2 %2schema='%3' column='%4' table='%5'" )
.arg( connInfo,
cols.isEmpty() ? QString() : QStringLiteral( "key='%1' " ).arg( cols.join( ',' ) ),
schemaName,
geomColumnName,
tableName ) };
const QString sql { index.sibling( index.row(), DbtmSql ).data( Qt::DisplayRole ).toString() };
if ( ! sql.isEmpty() )
{
Expand Down
4 changes: 2 additions & 2 deletions src/providers/postgres/raster/qgspostgresrasterprovider.cpp
Expand Up @@ -1944,9 +1944,9 @@ bool QgsPostgresRasterProvider::loadFields()
QgsField newField = QgsField( fieldName, fieldType, fieldTypeName, fieldSize, fieldPrec, fieldComment, fieldSubType );

QgsFieldConstraints constraints;
if ( notNullMap[tableoid][attnum] || ( mPrimaryKeyAttrs.size() == 1 && mPrimaryKeyAttrs[0] == fieldName ) || identityMap[tableoid][attnum] != ' ' )
if ( notNullMap[tableoid][attnum] || ( mPrimaryKeyAttrs.size() == 1 && mPrimaryKeyAttrs[0] == i ) || identityMap[tableoid][attnum] != ' ' )
constraints.setConstraint( QgsFieldConstraints::ConstraintNotNull, QgsFieldConstraints::ConstraintOriginProvider );
if ( uniqueMap[tableoid][attnum] || ( mPrimaryKeyAttrs.size() == 1 && mPrimaryKeyAttrs[0] == fieldName ) || identityMap[tableoid][attnum] != ' ' )
if ( uniqueMap[tableoid][attnum] || ( mPrimaryKeyAttrs.size() == 1 && mPrimaryKeyAttrs[0] == i ) || identityMap[tableoid][attnum] != ' ' )
constraints.setConstraint( QgsFieldConstraints::ConstraintUnique, QgsFieldConstraints::ConstraintOriginProvider );
newField.setConstraints( constraints );

Expand Down
9 changes: 9 additions & 0 deletions tests/src/python/test_provider_postgresraster.py
Expand Up @@ -551,6 +551,15 @@ def _6x6_block_data(layer, extent):
r2_r2 = _6x6_block_data(rl2, extent_2)
self.assertEqual(rl_r2, r2_r2)

def testView(self):
"""Test issue GH #50841"""

rl = QgsRasterLayer(
self.dbconn + " key=\'rid\' srid=3035 sslmode=disable table={table} schema={schema}".format(
table='raster_tiled_3035_view', schema='public'), 'pg_layer', 'postgresraster')

self.assertTrue(rl.isValid())


if __name__ == '__main__':
unittest.main()
3 changes: 3 additions & 0 deletions tests/testdata/provider/postgresraster/raster_tiled_3035.sql
Expand Up @@ -23,3 +23,6 @@ SELECT AddRasterConstraints('','o_2_raster_tiled_3035','rast',TRUE,TRUE,TRUE,TRU
SELECT AddRasterConstraints('','o_4_raster_tiled_3035','rast',TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE);
SELECT AddOverviewConstraints('','o_2_raster_tiled_3035','rast','','raster_tiled_3035','rast',2);
SELECT AddOverviewConstraints('','o_4_raster_tiled_3035','rast','','raster_tiled_3035','rast',4);

-- views
CREATE VIEW "public"."raster_tiled_3035_view" AS SELECT rid, rast FROM "public"."raster_tiled_3035" WHERE rid < 2;

0 comments on commit e6e1b9c

Please sign in to comment.