Skip to content

Commit

Permalink
[mssql] Optimise field retrieval in browser, don't require opening la…
Browse files Browse the repository at this point in the history
…yers
  • Loading branch information
nyalldawson committed Feb 23, 2025
1 parent f3c37f5 commit 555bbe3
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
30 changes: 29 additions & 1 deletion src/providers/mssql/qgsmssqlproviderconnection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -508,14 +508,42 @@ SELECT %4 UPPER( %1.STGeometryType()), %1.STSrid,
return tables;
}

QgsFields QgsMssqlProviderConnection::fields( const QString &schema, const QString &table, QgsFeedback *feedback ) const
{
if ( feedback && feedback->isCanceled() )
{
return QgsFields();
}

const QgsDataSourceUri dsUri { uri() };

// connect to database
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri );
if ( !db->isValid() )
{
throw QgsProviderConnectionException( QObject::tr( "Connection to %1 failed: %2" )
.arg( uri(), db->errorText() ) );
}

QgsMssqlDatabase::FieldDetails details;

QString error;
const bool result = db->loadFields( details, schema, table, error );
if ( !result )
{
throw QgsProviderConnectionException( QObject::tr( "Error retrieving fields information: %1" ).arg( error ) );
}

return details.attributeFields;
}

QStringList QgsMssqlProviderConnection::schemas() const
{
checkCapability( Capability::Schemas );
QStringList schemas;

const QgsDataSourceUri connUri( uri() );

const QgsDataSourceUri dsUri { uri() };
const QString sql {
QStringLiteral(
R"raw(
Expand Down
1 change: 1 addition & 0 deletions src/providers/mssql/qgsmssqlproviderconnection.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ class QgsMssqlProviderConnection : public QgsAbstractDatabaseProviderConnection
QgsAbstractDatabaseProviderConnection::QueryResult execSql( const QString &sql, QgsFeedback *feedback ) const override;
QList<QgsAbstractDatabaseProviderConnection::TableProperty> tables( const QString &schema, const TableFlags &flags = TableFlags(), QgsFeedback *feedback = nullptr ) const override;
QgsAbstractDatabaseProviderConnection::TableProperty table( const QString &schema, const QString &table, QgsFeedback *feedback = nullptr ) const override;
QgsFields fields( const QString &schema, const QString &table, QgsFeedback *feedback = nullptr ) const override;
QStringList schemas() const override;
void store( const QString &name ) const override;
void remove( const QString &name ) const override;
Expand Down

0 comments on commit 555bbe3

Please sign in to comment.