Skip to content

Commit

Permalink
Support raster without constraints
Browse files Browse the repository at this point in the history
  • Loading branch information
elpaso committed Jan 10, 2020
1 parent 91ed375 commit 4f55df0
Show file tree
Hide file tree
Showing 6 changed files with 413 additions and 177 deletions.
21 changes: 4 additions & 17 deletions src/providers/postgres/qgspostgresdataitems.cpp
Expand Up @@ -26,7 +26,6 @@
#include "qgsprojectstorageregistry.h"
#include "qgsvectorlayer.h"
#include "qgssettings.h"
#include "providers/gdal/qgsgdaldataitems.h"
#include <QMessageBox>
#include <climits>

Expand Down Expand Up @@ -312,7 +311,7 @@ bool QgsPGConnectionItem::handleDrop( const QMimeData *data, const QString &toSc

// ---------------------------------------------------------------------------
QgsPGLayerItem::QgsPGLayerItem( QgsDataItem *parent, const QString &name, const QString &path, QgsLayerItem::LayerType layerType, const QgsPostgresLayerProperty &layerProperty )
: QgsLayerItem( parent, name, path, QString(), layerType, QStringLiteral( "postgres" ) )
: QgsLayerItem( parent, name, path, QString(), layerType, layerProperty.isRaster ? QStringLiteral( "postgresraster" ) : QStringLiteral( "postgres" ) )
, mLayerProperty( layerProperty )
{
mCapabilities |= Delete;
Expand Down Expand Up @@ -410,6 +409,7 @@ QVector<QgsDataItem *> QgsPGSchemaItem::createChildren()
continue;

if ( !layerProperty.geometryColName.isNull() &&
//!layerProperty.isRaster &&
( layerProperty.types.value( 0, QgsWkbTypes::Unknown ) == QgsWkbTypes::Unknown ||
layerProperty.srids.value( 0, std::numeric_limits<int>::min() ) == std::numeric_limits<int>::min() ) )
{
Expand All @@ -424,20 +424,7 @@ QVector<QgsDataItem *> QgsPGSchemaItem::createChildren()
for ( int i = 0; i < layerProperty.size(); i++ )
{
QgsDataItem *layerItem = nullptr;
if ( ! layerProperty.isRaster )
{
layerItem = createLayer( layerProperty.at( i ) );
}
else
{
const QString connInfo = conn->connInfo();
const QString uri = QStringLiteral( "PG: %1 mode=2 schema='%2' column='%3' table='%4'" )
.arg( connInfo )
.arg( layerProperty.schemaName )
.arg( layerProperty.geometryColName )
.arg( layerProperty.tableName );
layerItem = new QgsGdalLayerItem( this, layerProperty.tableName, QString(), uri );
}
layerItem = createLayer( layerProperty.at( i ) );
if ( layerItem )
items.append( layerItem );
}
Expand Down Expand Up @@ -479,7 +466,7 @@ QgsPGLayerItem *QgsPGSchemaItem::createLayer( QgsPostgresLayerProperty layerProp
}
else if ( layerProperty.isRaster )
{
tip = tr( "Raster (GDAL)" );
tip = tr( "Raster" );
}
else
{
Expand Down
20 changes: 1 addition & 19 deletions src/providers/postgres/qgspostgresproviderconnection.cpp
Expand Up @@ -117,25 +117,7 @@ QString QgsPostgresProviderConnection::tableUri( const QString &schema, const QS
QgsDataSourceUri dsUri( uri() );
dsUri.setTable( name );
dsUri.setSchema( schema );
if ( tableInfo.flags().testFlag( QgsAbstractDatabaseProviderConnection::TableFlag::Raster ) )
{
const QRegularExpression removePartsRe { R"raw(\s*sql=\s*|\s*table=("[^"]+"\.?)*\s*)raw" };
if ( tableInfo.geometryColumn().isEmpty() )
{
throw QgsProviderConnectionException( QObject::tr( "Raster table '%1' in schema '%2' has no geometry column." )
.arg( name )
.arg( schema ) );
}
return QStringLiteral( "PG: %1 mode=2 schema='%2' table='%4' column='%3'" )
.arg( dsUri.uri( false ).replace( removePartsRe, QString() ) )
.arg( schema )
.arg( tableInfo.geometryColumn() )
.arg( name );
}
else
{
return dsUri.uri( false );
}
return dsUri.uri( false );
}

void QgsPostgresProviderConnection::dropVectorTable( const QString &schema, const QString &name ) const
Expand Down

0 comments on commit 4f55df0

Please sign in to comment.