Skip to content

Commit

Permalink
Add flag for select at id in the result dlg
Browse files Browse the repository at this point in the history
  • Loading branch information
elpaso committed Jul 6, 2021
1 parent 5ba105f commit aa6c1bd
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 9 deletions.
Expand Up @@ -124,10 +124,11 @@ Returns the number of fetched rows.
struct SqlVectorLayerOptions
{
QString sql; //! The SQL expression that defines the SQL (query) layer
QString filter; //! Additional subset string (provider-side filter), not all data providers support this feature: check support with SqlLayerFilters capability
QString filter; //! Additional subset string (provider-side filter), not all data providers support this feature: check support with SqlLayerDefinitionCapability::Filters capability
QString layerName; //! Optional name for the new layer
QStringList primaryKeyColumns; //! List of primary key column names
QString geometryColumn; //! Name of the geometry column
bool disableSelectAtId; //! If SelectAtId is disabled (default is false), not all data providers support this feature: check support with SqlLayerDefinitionCapability::SelectAtId capability
};

struct TableProperty
Expand Down Expand Up @@ -349,7 +350,8 @@ This information is calculated from the geometry columns types.
{
Filters,
GeometryColumn,
PrimaryKeys
PrimaryKeys,
SelectAtId
};

typedef QFlags<QgsAbstractDatabaseProviderConnection::SqlLayerDefinitionCapability> SqlLayerDefinitionCapabilities;
Expand Down
6 changes: 6 additions & 0 deletions src/core/providers/ogr/qgsgeopackageproviderconnection.cpp
Expand Up @@ -377,6 +377,12 @@ void QgsGeoPackageProviderConnection::setDefaultCapabilities()
GeometryColumnCapability::SinglePart,
GeometryColumnCapability::Curves
};
mSqlLayerDefinitionCapabilities =
{
SqlLayerDefinitionCapability::Filters,
SqlLayerDefinitionCapability::PrimaryKeys,
SqlLayerDefinitionCapability::GeometryColumn,
};
}

QgsAbstractDatabaseProviderConnection::QueryResult QgsGeoPackageProviderConnection::executeGdalSqlPrivate( const QString &sql, QgsFeedback *feedback ) const
Expand Down
10 changes: 6 additions & 4 deletions src/core/providers/qgsabstractdatabaseproviderconnection.h
Expand Up @@ -206,10 +206,11 @@ class CORE_EXPORT QgsAbstractDatabaseProviderConnection : public QgsAbstractProv
struct CORE_EXPORT SqlVectorLayerOptions
{
QString sql; //! The SQL expression that defines the SQL (query) layer
QString filter; //! Additional subset string (provider-side filter), not all data providers support this feature: check support with SqlLayerFilters capability
QString filter; //! Additional subset string (provider-side filter), not all data providers support this feature: check support with SqlLayerDefinitionCapability::Filters capability
QString layerName; //! Optional name for the new layer
QStringList primaryKeyColumns; //! List of primary key column names
QString geometryColumn; //! Name of the geometry column
bool disableSelectAtId; //! If SelectAtId is disabled (default is false), not all data providers support this feature: check support with SqlLayerDefinitionCapability::SelectAtId capability
};

/**
Expand Down Expand Up @@ -487,9 +488,10 @@ class CORE_EXPORT QgsAbstractDatabaseProviderConnection : public QgsAbstractProv
*/
enum SqlLayerDefinitionCapability
{
Filters = 1 << 1, //! SQL layer definition support filters
GeometryColumn = 1 << 2, //! SQL layer definition support geometry colum
PrimaryKeys = 1 << 3 //! SQL layer definition support primary keys
Filters = 1 << 1, //! SQL layer definition supports filters
GeometryColumn = 1 << 2, //! SQL layer definition supports geometry colum
PrimaryKeys = 1 << 3, //! SQL layer definition supports primary keys
SelectAtId = 1 << 4 //! SQL layer definition supports disabling select at id
};

Q_ENUM( SqlLayerDefinitionCapability )
Expand Down
5 changes: 5 additions & 0 deletions src/gui/qgsqueryresultwidget.cpp
Expand Up @@ -86,6 +86,10 @@ QgsQueryResultWidget::QgsQueryResultWidget( QWidget *parent, QgsAbstractDatabase
mFilterLabel->setVisible( showFilterConfig );
mFilterToolButton->setVisible( showFilterConfig );
mFilterLineEdit->setVisible( showFilterConfig );

const bool showDisableSelectAtId{ connection &&connection->sqlLayerDefinitionCapabilities().testFlag( QgsAbstractDatabaseProviderConnection::SqlLayerDefinitionCapability::SelectAtId ) };
mAvoidSelectingAsFeatureIdCheckBox->setVisible( showDisableSelectAtId );

}
} );

Expand Down Expand Up @@ -291,6 +295,7 @@ void QgsQueryResultWidget::syncSqlOptions()
mSqlVectorLayerOptions.primaryKeyColumns = mPkColumnsComboBox->checkedItems();
mSqlVectorLayerOptions.geometryColumn = mGeometryColumnComboBox->currentText();
mSqlVectorLayerOptions.layerName = mLayerNameLineEdit->text();
mSqlVectorLayerOptions.disableSelectAtId = mAvoidSelectingAsFeatureIdCheckBox->isChecked();
}

QgsAbstractDatabaseProviderConnection::SqlVectorLayerOptions QgsQueryResultWidget::sqlVectorLayerOptions() const
Expand Down
7 changes: 7 additions & 0 deletions src/providers/mssql/qgsmssqlproviderconnection.cpp
Expand Up @@ -99,6 +99,13 @@ void QgsMssqlProviderConnection::setDefaultCapabilities()
GeometryColumnCapability::M,
GeometryColumnCapability::Curves
};
mSqlLayerDefinitionCapabilities =
{
SqlLayerDefinitionCapability::Filters,
SqlLayerDefinitionCapability::PrimaryKeys,
SqlLayerDefinitionCapability::GeometryColumn,
SqlLayerDefinitionCapability::SelectAtId,
};
}

void QgsMssqlProviderConnection::dropTablePrivate( const QString &schema, const QString &name ) const
Expand Down
6 changes: 6 additions & 0 deletions src/providers/oracle/qgsoracleproviderconnection.cpp
Expand Up @@ -121,6 +121,12 @@ void QgsOracleProviderConnection::setDefaultCapabilities()
GeometryColumnCapability::SinglePart,
GeometryColumnCapability::Curves
};
mSqlLayerDefinitionCapabilities =
{
SqlLayerDefinitionCapability::Filters,
SqlLayerDefinitionCapability::GeometryColumn,
SqlLayerDefinitionCapability::PrimaryKeys,
};
}

void QgsOracleProviderConnection::store( const QString &name ) const
Expand Down
8 changes: 5 additions & 3 deletions src/providers/postgres/qgspostgresproviderconnection.cpp
Expand Up @@ -85,9 +85,10 @@ void QgsPostgresProviderConnection::setDefaultCapabilities()
};
mSqlLayerDefinitionCapabilities =
{
Filters,
PrimaryKeys,
GeometryColumn
SqlLayerDefinitionCapability::Filters,
SqlLayerDefinitionCapability::PrimaryKeys,
SqlLayerDefinitionCapability::GeometryColumn,
SqlLayerDefinitionCapability::SelectAtId,
};
}

Expand Down Expand Up @@ -762,6 +763,7 @@ QgsVectorLayer *QgsPostgresProviderConnection::createSqlVectorLayer( const SqlVe
QgsDataSourceUri tUri( uri( ) );

tUri.setSql( options.filter );
tUri.disableSelectAtId( options.disableSelectAtId );

if ( ! options.primaryKeyColumns.isEmpty() )
{
Expand Down

0 comments on commit aa6c1bd

Please sign in to comment.