Skip to content

Commit 96f73fd

Browse files
Hugo Mercierm-kuhn
authored andcommittedSep 25, 2015
Add table comments to the columns of pg source select
1 parent e47a97b commit 96f73fd

File tree

8 files changed

+46
-4
lines changed

8 files changed

+46
-4
lines changed
 

‎src/core/qgsdataitem.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -305,13 +305,13 @@ class CORE_EXPORT QgsLayerItem : public QgsDataItem
305305

306306
// --- New virtual methods for layer item derived classes ---
307307

308-
// Returns QgsMapLayer::LayerType
308+
/** Returns QgsMapLayer::LayerType */
309309
QgsMapLayer::LayerType mapLayerType();
310310

311-
// Returns layer uri or empty string if layer cannot be created
311+
/** Returns layer uri or empty string if layer cannot be created */
312312
QString uri() { return mUri; }
313313

314-
// Returns provider key
314+
/** Returns provider key */
315315
QString providerKey() { return mProviderKey; }
316316

317317
/** Returns the supported CRS
@@ -324,12 +324,22 @@ class CORE_EXPORT QgsLayerItem : public QgsDataItem
324324
*/
325325
QStringList supportedFormats() { return mSupportFormats; }
326326

327+
/** Returns comments of the layer
328+
* @note added in 2.12
329+
*/
330+
virtual QString comments() const { return ""; }
331+
327332
protected:
328333

334+
/** the provider key */
329335
QString mProviderKey;
336+
/** the URI */
330337
QString mUri;
338+
/** the layer type */
331339
LayerType mLayerType;
340+
/** the list of supported CRS */
332341
QStringList mSupportedCRS;
342+
/** the list of supported formats */
333343
QStringList mSupportFormats;
334344

335345
public:
@@ -340,6 +350,7 @@ class CORE_EXPORT QgsLayerItem : public QgsDataItem
340350
static const QIcon &iconRaster();
341351
static const QIcon &iconDefault();
342352

353+
/** returns the layer name */
343354
virtual QString layerName() const { return name(); }
344355
};
345356

‎src/providers/postgres/qgspgsourceselect.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ QgsPgSourceSelect::QgsPgSourceSelect( QWidget *parent, Qt::WindowFlags fl, bool
235235
mSearchColumnComboBox->addItem( tr( "All" ) );
236236
mSearchColumnComboBox->addItem( tr( "Schema" ) );
237237
mSearchColumnComboBox->addItem( tr( "Table" ) );
238+
mSearchColumnComboBox->addItem( tr( "Comment" ) );
238239
mSearchColumnComboBox->addItem( tr( "Type" ) );
239240
mSearchColumnComboBox->addItem( tr( "Geometry column" ) );
240241
mSearchColumnComboBox->addItem( tr( "Feature id" ) );
@@ -411,6 +412,10 @@ void QgsPgSourceSelect::on_mSearchColumnComboBox_currentIndexChanged( const QStr
411412
{
412413
mProxyModel.setFilterKeyColumn( QgsPgTableModel::dbtmTable );
413414
}
415+
else if ( text == tr( "Comment" ) )
416+
{
417+
mProxyModel.setFilterKeyColumn( QgsPgTableModel::dbtmComment );
418+
}
414419
else if ( text == tr( "Type" ) )
415420
{
416421
mProxyModel.setFilterKeyColumn( QgsPgTableModel::dbtmType );

‎src/providers/postgres/qgspgtablemodel.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ QgsPgTableModel::QgsPgTableModel()
2828
QStringList headerLabels;
2929
headerLabels << tr( "Schema" );
3030
headerLabels << tr( "Table" );
31+
headerLabels << tr( "Comment" );
3132
headerLabels << tr( "Column" );
3233
headerLabels << tr( "Data Type" );
3334
headerLabels << tr( "Spatial Type" );
@@ -83,6 +84,7 @@ void QgsPgTableModel::addTableEntry( const QgsPostgresLayerProperty& layerProper
8384
QStandardItem *geomTypeItem = new QStandardItem( QgsPostgresConn::displayStringForGeomType( layerProperty.geometryColType ) );
8485

8586
QStandardItem *tableItem = new QStandardItem( layerProperty.tableName );
87+
QStandardItem *commentItem = new QStandardItem( layerProperty.tableComment );
8688
QStandardItem *geomItem = new QStandardItem( layerProperty.geometryColName );
8789
QStandardItem *sridItem = new QStandardItem( wkbType != QGis::WKBNoGeometry ? QString::number( srid ) : "" );
8890
sridItem->setEditable( wkbType != QGis::WKBNoGeometry && srid == INT_MIN );
@@ -115,6 +117,7 @@ void QgsPgTableModel::addTableEntry( const QgsPostgresLayerProperty& layerProper
115117

116118
childItemList << schemaNameItem;
117119
childItemList << tableItem;
120+
childItemList << commentItem;
118121
childItemList << geomItem;
119122
childItemList << geomTypeItem;
120123
childItemList << typeItem;

‎src/providers/postgres/qgspgtablemodel.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class QgsPgTableModel : public QStandardItemModel
4646
{
4747
dbtmSchema = 0,
4848
dbtmTable,
49+
dbtmComment,
4950
dbtmGeomCol,
5051
dbtmGeomType, // Data type (geometry, geography, topogeometry, ...)
5152
dbtmType, // Spatial type (point, line, polygon, ...)

‎src/providers/postgres/qgspostgresconn.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ bool QgsPostgresConn::getTableInfo( bool searchGeometryColumnsOnly, bool searchP
435435

436436
// The following query returns only tables that exist and the user has SELECT privilege on.
437437
// Can't use regclass here because table must exist, else error occurs.
438-
sql = QString( "SELECT %1,%2,%3,%4,%5,%6,c.relkind"
438+
sql = QString( "SELECT %1,%2,%3,%4,%5,%6,c.relkind,obj_description(c.oid)"
439439
" FROM %7 l,pg_class c,pg_namespace n"
440440
" WHERE c.relname=%1"
441441
" AND %2=n.nspname"
@@ -471,6 +471,7 @@ bool QgsPostgresConn::getTableInfo( bool searchGeometryColumnsOnly, bool searchP
471471
int dim = result.PQgetvalue( idx, 5 ).toInt();
472472
QString relkind = result.PQgetvalue( idx, 6 );
473473
bool isView = relkind == "v" || relkind == "m";
474+
QString comment = result.PQgetvalue( idx, 7 );
474475

475476
int srid = ssrid.isEmpty() ? INT_MIN : ssrid.toInt();
476477
if ( majorVersion() >= 2 && srid == 0 )
@@ -498,6 +499,7 @@ bool QgsPostgresConn::getTableInfo( bool searchGeometryColumnsOnly, bool searchP
498499
layerProperty.sql = "";
499500
layerProperty.relKind = relkind;
500501
layerProperty.isView = isView;
502+
layerProperty.tableComment = comment;
501503
/*
502504
* force2d may get a false negative value
503505
* (dim == 2 but is not really constrained)
@@ -529,6 +531,7 @@ bool QgsPostgresConn::getTableInfo( bool searchGeometryColumnsOnly, bool searchP
529531
",a.attname"
530532
",c.relkind"
531533
",CASE WHEN t.typname IN ('geometry','geography','topogeometry') THEN t.typname ELSE b.typname END AS coltype"
534+
",obj_description(c.oid)"
532535
" FROM pg_attribute a"
533536
" JOIN pg_class c ON c.oid=a.attrelid"
534537
" JOIN pg_namespace n ON n.oid=c.relnamespace"
@@ -593,6 +596,7 @@ bool QgsPostgresConn::getTableInfo( bool searchGeometryColumnsOnly, bool searchP
593596
QString relkind = result.PQgetvalue( i, 3 ); // relation kind
594597
QString coltype = result.PQgetvalue( i, 4 ); // column type
595598
bool isView = relkind == "v" || relkind == "m";
599+
QString comment = result.PQgetvalue( i, 5 ); // table comment
596600

597601
//QgsDebugMsg( QString( "%1.%2.%3: %4" ).arg( schemaName ).arg( tableName ).arg( column ).arg( relkind ) );
598602

@@ -603,6 +607,7 @@ bool QgsPostgresConn::getTableInfo( bool searchGeometryColumnsOnly, bool searchP
603607
layerProperty.geometryColName = column;
604608
layerProperty.relKind = relkind;
605609
layerProperty.isView = isView;
610+
layerProperty.tableComment = comment;
606611
if ( coltype == "geometry" )
607612
{
608613
layerProperty.geometryColType = sctGeometry;
@@ -644,6 +649,7 @@ bool QgsPostgresConn::getTableInfo( bool searchGeometryColumnsOnly, bool searchP
644649
"pg_class.relname"
645650
",pg_namespace.nspname"
646651
",pg_class.relkind"
652+
",obj_description(pg_class.oid)"
647653
" FROM "
648654
" pg_class"
649655
",pg_namespace"
@@ -677,6 +683,7 @@ bool QgsPostgresConn::getTableInfo( bool searchGeometryColumnsOnly, bool searchP
677683
QString schema = result.PQgetvalue( i, 1 ); // nspname
678684
QString relkind = result.PQgetvalue( i, 2 ); // relation kind
679685
bool isView = relkind == "v" || relkind == "m";
686+
QString comment = result.PQgetvalue( i, 3 ); // table comment
680687

681688
//QgsDebugMsg( QString( "%1.%2: %3" ).arg( schema ).arg( table ).arg( relkind ) );
682689

@@ -688,6 +695,7 @@ bool QgsPostgresConn::getTableInfo( bool searchGeometryColumnsOnly, bool searchP
688695
layerProperty.geometryColType = sctNone;
689696
layerProperty.relKind = relkind;
690697
layerProperty.isView = isView;
698+
layerProperty.tableComment = comment;
691699

692700
//check if we've already added this layer in some form
693701
bool alreadyFound = false;

‎src/providers/postgres/qgspostgresconn.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ struct QgsPostgresLayerProperty
7979
bool force2d;
8080
QString relKind;
8181
bool isView;
82+
QString tableComment;
8283

8384

8485
// TODO: rename this !
@@ -109,6 +110,7 @@ struct QgsPostgresLayerProperty
109110
property.force2d = force2d;
110111
property.relKind = relKind;
111112
property.isView = isView;
113+
property.tableComment = tableComment;
112114

113115
return property;
114116
}

‎src/providers/postgres/qgspostgresdataitems.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,11 @@ QgsPGLayerItem::QgsPGLayerItem( QgsDataItem* parent, QString name, QString path,
281281
Q_ASSERT( mLayerProperty.size() == 1 );
282282
}
283283

284+
QString QgsPGLayerItem::comments() const
285+
{
286+
return mLayerProperty.tableComment;
287+
}
288+
284289
QgsPGLayerItem::~QgsPGLayerItem()
285290
{
286291
}
@@ -645,6 +650,10 @@ QgsPGLayerItem *QgsPGSchemaItem::createLayer( QgsPostgresLayerProperty layerProp
645650
//QgsDebugMsg( "schemaName = " + layerProperty.schemaName + " tableName = " + layerProperty.tableName + " geometryColName = " + layerProperty.geometryColName );
646651
QGis::WkbType wkbType = layerProperty.types[0];
647652
QString tip = tr( "%1 as %2 in %3" ).arg( layerProperty.geometryColName ).arg( QgsPostgresConn::displayStringForWkbType( wkbType ) ).arg( layerProperty.srids[0] );
653+
if ( !layerProperty.tableComment.isEmpty() )
654+
{
655+
tip = layerProperty.tableComment + "\n" + tip;
656+
}
648657

649658
QgsLayerItem::LayerType layerType;
650659
QgsWKBTypes::GeometryType geomType = QgsWKBTypes::geometryType(( QgsWKBTypes::Type )wkbType );

‎src/providers/postgres/qgspostgresdataitems.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ class QgsPGLayerItem : public QgsLayerItem
111111

112112
virtual QList<QAction*> actions() override;
113113

114+
/** Returns comments of the layer */
115+
virtual QString comments() const override;
116+
114117
public slots:
115118
void deleteLayer();
116119
void renameLayer();

0 commit comments

Comments
 (0)
Please sign in to comment.