mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-15 00:07:25 -05:00
Also show a relationships item when expanding out tables for
tables which form the parent side of a relationship
This commit is contained in:
parent
622562f6c0
commit
7275fb2033
@ -24,7 +24,9 @@ Contains a collection of relationship items.
|
||||
QgsRelationshipsItem( QgsDataItem *parent /TransferThis/,
|
||||
const QString &path,
|
||||
const QString &connectionUri,
|
||||
const QString &providerKey );
|
||||
const QString &providerKey,
|
||||
const QString &schema = QString(),
|
||||
const QString &tableName = QString() );
|
||||
%Docstring
|
||||
Constructor for QgsRelationshipsItem, with the specified ``parent`` item.
|
||||
|
||||
@ -33,6 +35,9 @@ but :py:class:`QgsDataItem` items pointing to different logical locations should
|
||||
The ``connectionUri`` argument is the connection part of the layer URI that it is used internally to create
|
||||
a connection and retrieve fields information.
|
||||
The ``providerKey`` string can be used to specify the key for the :py:class:`QgsDataItemProvider` that created this item.
|
||||
|
||||
The optional ``schema`` and ``tableName`` arguments can be used to restrict the visible relationships to
|
||||
those with a matching parent table.
|
||||
%End
|
||||
|
||||
~QgsRelationshipsItem();
|
||||
@ -52,6 +57,20 @@ The ``providerKey`` string can be used to specify the key for the :py:class:`Qgs
|
||||
QString connectionUri() const;
|
||||
%Docstring
|
||||
Returns the connection URI
|
||||
%End
|
||||
|
||||
QString schema() const;
|
||||
%Docstring
|
||||
Returns the schema for filtering relationships, if set.
|
||||
|
||||
.. seealso:: :py:func:`tableName`
|
||||
%End
|
||||
|
||||
QString tableName() const;
|
||||
%Docstring
|
||||
Returns the table name for filtering relationships, if set.
|
||||
|
||||
.. seealso:: :py:func:`schema`
|
||||
%End
|
||||
|
||||
};
|
||||
|
||||
@ -2292,7 +2292,7 @@ QWidget *QgsRelationshipItemGuiProvider::createParamWidget( QgsDataItem *item, Q
|
||||
}
|
||||
else if ( QgsRelationshipsItem *relationsItem = qobject_cast< QgsRelationshipsItem * >( item ) )
|
||||
{
|
||||
return new QgsRelationshipsDetailsWidget( nullptr, relationsItem->providerKey(), relationsItem->connectionUri() );
|
||||
return new QgsRelationshipsDetailsWidget( nullptr, relationsItem->providerKey(), relationsItem->connectionUri(), relationsItem->schema(), relationsItem->tableName() );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2399,7 +2399,7 @@ QgsRelationshipDetailsWidget::~QgsRelationshipDetailsWidget() = default;
|
||||
// QgsRelationshipsDetailsWidget
|
||||
//
|
||||
|
||||
QgsRelationshipsDetailsWidget::QgsRelationshipsDetailsWidget( QWidget *parent, const QString &providerKey, const QString &uri )
|
||||
QgsRelationshipsDetailsWidget::QgsRelationshipsDetailsWidget( QWidget *parent, const QString &providerKey, const QString &uri, const QString &schema, const QString &tableName )
|
||||
: QWidget( parent )
|
||||
{
|
||||
setupUi( this );
|
||||
@ -2419,7 +2419,7 @@ QgsRelationshipsDetailsWidget::QgsRelationshipsDetailsWidget( QWidget *parent, c
|
||||
QList< QgsWeakRelation > relationships;
|
||||
try
|
||||
{
|
||||
relationships = conn->relationships();
|
||||
relationships = conn->relationships( schema, tableName );
|
||||
}
|
||||
catch ( QgsProviderConnectionException &ex )
|
||||
{
|
||||
|
||||
@ -256,7 +256,7 @@ class QgsRelationshipsDetailsWidget : public QWidget, private Ui_QgsBrowserItemM
|
||||
|
||||
public:
|
||||
|
||||
QgsRelationshipsDetailsWidget( QWidget *parent, const QString &providerKey, const QString &uri );
|
||||
QgsRelationshipsDetailsWidget( QWidget *parent, const QString &providerKey, const QString &uri, const QString &schema, const QString &tableName );
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -70,6 +70,29 @@ QVector<QgsDataItem *> QgsProviderSublayerItem::createChildren()
|
||||
path() + QStringLiteral( "/columns/ " ),
|
||||
path(),
|
||||
QStringLiteral( "ogr" ), QString(), name() ) );
|
||||
|
||||
std::unique_ptr<QgsAbstractDatabaseProviderConnection> conn( databaseConnection() );
|
||||
if ( conn && ( conn->capabilities() & QgsAbstractDatabaseProviderConnection::Capability::RetrieveRelationships ) )
|
||||
{
|
||||
QString relationError;
|
||||
QList< QgsWeakRelation > relations;
|
||||
try
|
||||
{
|
||||
relations = conn->relationships( QString(), mDetails.name() );
|
||||
}
|
||||
catch ( QgsProviderConnectionException &ex )
|
||||
{
|
||||
relationError = ex.what();
|
||||
}
|
||||
|
||||
if ( !relations.empty() || !relationError.isEmpty() )
|
||||
{
|
||||
std::unique_ptr< QgsRelationshipsItem > relationsItem = std::make_unique< QgsRelationshipsItem >( this, mPath + "/relations", conn->uri(), QStringLiteral( "ogr" ), QString(), mDetails.name() );
|
||||
// force this item to appear last by setting a maximum string value for the sort key
|
||||
relationsItem->setSortKey( QString( QChar( 0x11FFFF ) ) );
|
||||
children.append( relationsItem.release() );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return children;
|
||||
|
||||
@ -25,9 +25,11 @@
|
||||
QgsRelationshipsItem::QgsRelationshipsItem( QgsDataItem *parent,
|
||||
const QString &path,
|
||||
const QString &connectionUri,
|
||||
const QString &providerKey )
|
||||
const QString &providerKey, const QString &schema, const QString &tableName )
|
||||
: QgsDataItem( Qgis::BrowserItemType::Custom, parent, tr( "Relationships" ), path, providerKey )
|
||||
, mConnectionUri( connectionUri )
|
||||
, mSchema( schema )
|
||||
, mTableName( tableName )
|
||||
{
|
||||
mCapabilities |= ( Qgis::BrowserItemCapability::Fertile | Qgis::BrowserItemCapability::Collapse | Qgis::BrowserItemCapability::RefreshChildrenWhenItemIsRefreshed );
|
||||
}
|
||||
@ -49,7 +51,7 @@ QVector<QgsDataItem *> QgsRelationshipsItem::createChildren()
|
||||
QList< QgsWeakRelation > relations;
|
||||
try
|
||||
{
|
||||
relations = conn->relationships();
|
||||
relations = conn->relationships( mSchema, mTableName );
|
||||
}
|
||||
catch ( QgsProviderConnectionException &ex )
|
||||
{
|
||||
|
||||
@ -41,11 +41,16 @@ class CORE_EXPORT QgsRelationshipsItem : public QgsDataItem
|
||||
* The \a connectionUri argument is the connection part of the layer URI that it is used internally to create
|
||||
* a connection and retrieve fields information.
|
||||
* The \a providerKey string can be used to specify the key for the QgsDataItemProvider that created this item.
|
||||
*
|
||||
* The optional \a schema and \a tableName arguments can be used to restrict the visible relationships to
|
||||
* those with a matching parent table.
|
||||
*/
|
||||
QgsRelationshipsItem( QgsDataItem *parent SIP_TRANSFERTHIS,
|
||||
const QString &path,
|
||||
const QString &connectionUri,
|
||||
const QString &providerKey );
|
||||
const QString &providerKey,
|
||||
const QString &schema = QString(),
|
||||
const QString &tableName = QString() );
|
||||
|
||||
~QgsRelationshipsItem() override;
|
||||
|
||||
@ -66,9 +71,25 @@ class CORE_EXPORT QgsRelationshipsItem : public QgsDataItem
|
||||
*/
|
||||
QString connectionUri() const;
|
||||
|
||||
/**
|
||||
* Returns the schema for filtering relationships, if set.
|
||||
*
|
||||
* \see tableName()
|
||||
*/
|
||||
QString schema() const { return mSchema; }
|
||||
|
||||
/**
|
||||
* Returns the table name for filtering relationships, if set.
|
||||
*
|
||||
* \see schema()
|
||||
*/
|
||||
QString tableName() const {return mTableName;}
|
||||
|
||||
private:
|
||||
|
||||
QString mConnectionUri;
|
||||
QString mSchema;
|
||||
QString mTableName;
|
||||
QStringList mRelationshipNames;
|
||||
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user