Skip to content

Commit cab3c1a

Browse files
committed
[mssql] Always use connection method with full QgsDataSourceUri
Remove the older method which took explicit host/database/service/... arguments, and ensure we always use the method which takes a full QgsDataSourceUri argument. This ensures that the db connection always has access to ALL the properties of the original data source uri, including any additional parameters set on it.
1 parent e0af537 commit cab3c1a

12 files changed

+69
-79
lines changed

src/providers/mssql/qgsmssqlconnection.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ bool QgsMssqlConnection::dropView( const QString &uri, QString *errorMessage )
107107
const QgsDataSourceUri dsUri( uri );
108108

109109
// connect to database
110-
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri.service(), dsUri.host(), dsUri.database(), dsUri.username(), dsUri.password() );
110+
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri );
111111
const QString schema = dsUri.schema();
112112
const QString table = dsUri.table();
113113

@@ -134,7 +134,7 @@ bool QgsMssqlConnection::dropTable( const QString &uri, QString *errorMessage )
134134
const QgsDataSourceUri dsUri( uri );
135135

136136
// connect to database
137-
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri.service(), dsUri.host(), dsUri.database(), dsUri.username(), dsUri.password() );
137+
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri );
138138
const QString schema = dsUri.schema();
139139
const QString table = dsUri.table();
140140

@@ -165,7 +165,7 @@ bool QgsMssqlConnection::truncateTable( const QString &uri, QString *errorMessag
165165
const QgsDataSourceUri dsUri( uri );
166166

167167
// connect to database
168-
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri.service(), dsUri.host(), dsUri.database(), dsUri.username(), dsUri.password() );
168+
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri );
169169
const QString schema = dsUri.schema();
170170
const QString table = dsUri.table();
171171

@@ -194,7 +194,7 @@ bool QgsMssqlConnection::createSchema( const QString &uri, const QString &schema
194194
const QgsDataSourceUri dsUri( uri );
195195

196196
// connect to database
197-
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri.service(), dsUri.host(), dsUri.database(), dsUri.username(), dsUri.password() );
197+
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri );
198198

199199
if ( !db->isValid() )
200200
{
@@ -221,7 +221,7 @@ QStringList QgsMssqlConnection::schemas( const QString &uri, QString *errorMessa
221221
const QgsDataSourceUri dsUri( uri );
222222

223223
// connect to database
224-
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri.service(), dsUri.host(), dsUri.database(), dsUri.username(), dsUri.password() );
224+
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri );
225225

226226
return schemas( std::move( db ), errorMessage );
227227
}

src/providers/mssql/qgsmssqldatabase.cpp

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,6 @@ std::shared_ptr<QgsMssqlDatabase> QgsMssqlDatabase::connectDb( const QString &ur
6969
return connectDb( dsUri, transaction );
7070
}
7171

72-
std::shared_ptr<QgsMssqlDatabase> QgsMssqlDatabase::connectDb( const QString &service, const QString &host, const QString &database, const QString &username, const QString &password, bool transaction )
73-
{
74-
QgsDataSourceUri uri;
75-
uri.setService( service );
76-
uri.setHost( host );
77-
uri.setDatabase( database );
78-
uri.setUsername( username );
79-
uri.setPassword( password );
80-
return connectDb( uri, transaction );
81-
}
82-
8372
std::shared_ptr<QgsMssqlDatabase> QgsMssqlDatabase::connectDb( const QgsDataSourceUri &uri, bool transaction )
8473
{
8574
// try to use existing conn or create a new one

src/providers/mssql/qgsmssqldatabase.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ class QgsMssqlDatabase
6363
* \note The function is thread-safe
6464
*/
6565
static std::shared_ptr<QgsMssqlDatabase> connectDb( const QString &uri, bool transaction = false );
66-
static std::shared_ptr<QgsMssqlDatabase> connectDb( const QString &service, const QString &host, const QString &database, const QString &username, const QString &password, bool transaction = false );
6766
static std::shared_ptr<QgsMssqlDatabase> connectDb( const QgsDataSourceUri &uri, bool transaction = false );
6867

6968
/////

src/providers/mssql/qgsmssqldataitems.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,13 @@ QVector<QgsDataItem *> QgsMssqlConnectionItem::createChildren()
133133

134134
readConnectionSettings();
135135

136-
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( mService, mHost, mDatabase, mUsername, mPassword );
136+
QgsDataSourceUri uri;
137+
uri.setService( mService );
138+
uri.setHost( mHost );
139+
uri.setDatabase( mDatabase );
140+
uri.setUsername( mUsername );
141+
uri.setPassword( mPassword );
142+
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( uri );
137143

138144
if ( !db->isValid() )
139145
{

src/providers/mssql/qgsmssqlfeatureiterator.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ bool QgsMssqlFeatureIterator::fetchFeature( QgsFeature &feature )
454454
{
455455
// No existing connection, so set it up now. It's safe to do here as we're now in
456456
// the thread were iteration is actually occurring.
457-
mDatabase = QgsMssqlDatabase::connectDb( mSource->mService, mSource->mHost, mSource->mDatabaseName, mSource->mUserName, mSource->mPassword );
457+
mDatabase = QgsMssqlDatabase::connectDb( mSource->mUri );
458458
}
459459

460460
if ( !mDatabase->isValid() )
@@ -710,11 +710,7 @@ QgsMssqlFeatureSource::QgsMssqlFeatureSource( const QgsMssqlProvider *p )
710710
, mSchemaName( p->mSchemaName )
711711
, mTableName( p->mTableName )
712712
, mQuery( p->mQuery )
713-
, mUserName( p->mUserName )
714-
, mPassword( p->mPassword )
715-
, mService( p->mService )
716-
, mDatabaseName( p->mDatabaseName )
717-
, mHost( p->mHost )
713+
, mUri( p->mUri )
718714
, mSqlWhereClause( p->mSqlWhereClause )
719715
, mDisableInvalidGeometryHandling( p->mDisableInvalidGeometryHandling )
720716
, mCrs( p->crs() )

src/providers/mssql/qgsmssqlfeatureiterator.h

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,7 @@ class QgsMssqlFeatureSource final : public QgsAbstractFeatureSource
5959
QString mQuery;
6060

6161
// login
62-
QString mUserName;
63-
QString mPassword;
64-
65-
// server access
66-
QString mService;
67-
QString mDatabaseName;
68-
QString mHost;
62+
QgsDataSourceUri mUri;
6963

7064
// SQL statement used to limit the features retrieved
7165
QString mSqlWhereClause;

src/providers/mssql/qgsmssqlgeomcolumntypethread.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,14 @@ void QgsMssqlGeomColumnTypeThread::run()
4848
{
4949
mStopped = false;
5050

51-
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( mService, mHost, mDatabase, mUsername, mPassword );
51+
QgsDataSourceUri uri;
52+
uri.setService( mService );
53+
uri.setHost( mHost );
54+
uri.setDatabase( mDatabase );
55+
uri.setUsername( mUsername );
56+
uri.setPassword( mPassword );
57+
58+
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( uri );
5259
if ( !db->isValid() )
5360
{
5461
QgsDebugError( db->errorText() );

src/providers/mssql/qgsmssqlnewconnection.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,13 @@ std::shared_ptr<QgsMssqlDatabase> QgsMssqlNewConnection::getDatabase( const QStr
293293
database = item->text();
294294
}
295295

296-
return QgsMssqlDatabase::connectDb( txtService->text().trimmed(), txtHost->text().trimmed(), database, txtUsername->text().trimmed(), txtPassword->text().trimmed() );
296+
QgsDataSourceUri uri;
297+
uri.setService( txtService->text().trimmed() );
298+
uri.setHost( txtHost->text().trimmed() );
299+
uri.setDatabase( database );
300+
uri.setUsername( txtUsername->text().trimmed() );
301+
uri.setPassword( txtPassword->text().trimmed() );
302+
return QgsMssqlDatabase::connectDb( uri );
297303
}
298304

299305

src/providers/mssql/qgsmssqlprovider.cpp

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -71,42 +71,35 @@ int QgsMssqlProvider::sConnectionId = 0;
7171

7272
QgsMssqlProvider::QgsMssqlProvider( const QString &uri, const ProviderOptions &options, Qgis::DataProviderReadFlags flags )
7373
: QgsVectorDataProvider( uri, options, flags )
74+
, mUri( uri )
7475
, mShared( new QgsMssqlSharedData )
7576
{
76-
const QgsDataSourceUri anUri = QgsDataSourceUri( uri );
77-
78-
if ( !anUri.srid().isEmpty() )
79-
mSRId = anUri.srid().toInt();
77+
if ( !mUri.srid().isEmpty() )
78+
mSRId = mUri.srid().toInt();
8079
else
8180
mSRId = -1;
8281

83-
mWkbType = anUri.wkbType();
82+
mWkbType = mUri.wkbType();
8483

8584
mValid = true;
8685

87-
mUserName = anUri.username();
88-
mPassword = anUri.password();
89-
mService = anUri.service();
90-
mDatabaseName = anUri.database();
91-
mHost = anUri.host();
92-
93-
mUseEstimatedMetadata = anUri.useEstimatedMetadata();
86+
mUseEstimatedMetadata = mUri.useEstimatedMetadata();
9487
if ( mReadFlags & Qgis::DataProviderReadFlag::TrustDataSource )
9588
{
9689
mUseEstimatedMetadata = true;
9790
}
9891

99-
mDisableInvalidGeometryHandling = anUri.hasParam( QStringLiteral( "disableInvalidGeometryHandling" ) )
100-
? anUri.param( QStringLiteral( "disableInvalidGeometryHandling" ) ).toInt()
92+
mDisableInvalidGeometryHandling = mUri.hasParam( QStringLiteral( "disableInvalidGeometryHandling" ) )
93+
? mUri.param( QStringLiteral( "disableInvalidGeometryHandling" ) ).toInt()
10194
: false;
10295

103-
mUseGeometryColumnsTableForExtent = anUri.hasParam( QStringLiteral( "extentInGeometryColumns" ) )
104-
? anUri.param( QStringLiteral( "extentInGeometryColumns" ) ).toInt()
96+
mUseGeometryColumnsTableForExtent = mUri.hasParam( QStringLiteral( "extentInGeometryColumns" ) )
97+
? mUri.param( QStringLiteral( "extentInGeometryColumns" ) ).toInt()
10598
: false;
10699

107-
mSqlWhereClause = anUri.sql();
100+
mSqlWhereClause = mUri.sql();
108101

109-
mConn = QgsMssqlDatabase::connectDb( mService, mHost, mDatabaseName, mUserName, mPassword, false );
102+
mConn = QgsMssqlDatabase::connectDb( mUri, false );
110103
if ( !mConn )
111104
{
112105
mValid = false;
@@ -124,23 +117,23 @@ QgsMssqlProvider::QgsMssqlProvider( const QString &uri, const ProviderOptions &o
124117

125118
// Database successfully opened; we can now issue SQL commands.
126119

127-
if ( mSchemaName.isEmpty() && anUri.table().startsWith( '(' ) && anUri.table().endsWith( ')' ) )
120+
if ( mSchemaName.isEmpty() && mUri.table().startsWith( '(' ) && mUri.table().endsWith( ')' ) )
128121
{
129122
mIsQuery = true;
130-
mQuery = anUri.table();
123+
mQuery = mUri.table();
131124
}
132125
else
133126
{
134127
mIsQuery = false;
135-
if ( !anUri.schema().isEmpty() )
136-
mSchemaName = anUri.schema();
128+
if ( !mUri.schema().isEmpty() )
129+
mSchemaName = mUri.schema();
137130
else
138131
mSchemaName = QStringLiteral( "dbo" );
139132

140-
if ( !anUri.table().isEmpty() )
133+
if ( !mUri.table().isEmpty() )
141134
{
142135
// the layer name has been specified
143-
mTableName = anUri.table();
136+
mTableName = mUri.table();
144137
QStringList sl = mTableName.split( '.' );
145138
if ( sl.length() == 2 )
146139
{
@@ -162,8 +155,8 @@ QgsMssqlProvider::QgsMssqlProvider( const QString &uri, const ProviderOptions &o
162155

163156
if ( mValid )
164157
{
165-
if ( !anUri.geometryColumn().isEmpty() )
166-
mGeometryColName = anUri.geometryColumn();
158+
if ( !mUri.geometryColumn().isEmpty() )
159+
mGeometryColName = mUri.geometryColumn();
167160

168161
if ( !mIsQuery )
169162
{
@@ -181,8 +174,8 @@ QgsMssqlProvider::QgsMssqlProvider( const QString &uri, const ProviderOptions &o
181174
UpdateStatistics( mUseEstimatedMetadata );
182175

183176
//only for views, defined in layer data when loading layer for first time
184-
bool primaryKeyFromGeometryColumnsTable = anUri.hasParam( QStringLiteral( "primaryKeyInGeometryColumns" ) )
185-
? anUri.param( QStringLiteral( "primaryKeyInGeometryColumns" ) ).toInt()
177+
bool primaryKeyFromGeometryColumnsTable = mUri.hasParam( QStringLiteral( "primaryKeyInGeometryColumns" ) )
178+
? mUri.param( QStringLiteral( "primaryKeyInGeometryColumns" ) ).toInt()
186179
: false;
187180

188181
QStringList cols;
@@ -192,12 +185,12 @@ QgsMssqlProvider::QgsMssqlProvider( const QString &uri, const ProviderOptions &o
192185
mPrimaryKeyAttrs.clear();
193186
primaryKeyFromGeometryColumnsTable = getPrimaryKeyFromGeometryColumns( cols );
194187
if ( !primaryKeyFromGeometryColumnsTable )
195-
QgsMessageLog::logMessage( tr( "Invalid primary key from geometry_columns table for layer '%1', get primary key from the layer." ).arg( anUri.table() ), tr( "MS SQL Server" ) );
188+
QgsMessageLog::logMessage( tr( "Invalid primary key from geometry_columns table for layer '%1', get primary key from the layer." ).arg( mUri.table() ), tr( "MS SQL Server" ) );
196189
}
197190

198191
if ( !primaryKeyFromGeometryColumnsTable )
199192
{
200-
const QString primaryKey = anUri.keyColumn();
193+
const QString primaryKey = mUri.keyColumn();
201194
if ( !primaryKey.isEmpty() )
202195
{
203196
mPrimaryKeyAttrs.clear();
@@ -2357,7 +2350,7 @@ bool QgsMssqlProviderMetadata::styleExists( const QString &uri, const QString &s
23572350
errorCause.clear();
23582351
const QgsDataSourceUri dsUri( uri );
23592352
// connect to database
2360-
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri.service(), dsUri.host(), dsUri.database(), dsUri.username(), dsUri.password() );
2353+
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri );
23612354

23622355
if ( !db->isValid() )
23632356
{
@@ -2416,7 +2409,7 @@ bool QgsMssqlProviderMetadata::saveStyle( const QString &uri, const QString &qml
24162409
{
24172410
const QgsDataSourceUri dsUri( uri );
24182411
// connect to database
2419-
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri.service(), dsUri.host(), dsUri.database(), dsUri.username(), dsUri.password() );
2412+
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri );
24202413

24212414
if ( !db->isValid() )
24222415
{
@@ -2580,7 +2573,7 @@ QString QgsMssqlProviderMetadata::loadStoredStyle( const QString &uri, QString &
25802573
errCause.clear();
25812574
const QgsDataSourceUri dsUri( uri );
25822575
// connect to database
2583-
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri.service(), dsUri.host(), dsUri.database(), dsUri.username(), dsUri.password() );
2576+
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri );
25842577

25852578
if ( !db->isValid() )
25862579
{
@@ -2645,7 +2638,7 @@ int QgsMssqlProviderMetadata::listStyles( const QString &uri, QStringList &ids,
26452638
{
26462639
const QgsDataSourceUri dsUri( uri );
26472640
// connect to database
2648-
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri.service(), dsUri.host(), dsUri.database(), dsUri.username(), dsUri.password() );
2641+
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri );
26492642

26502643
if ( !db->isValid() )
26512644
{
@@ -2742,7 +2735,7 @@ QString QgsMssqlProviderMetadata::getStyleById( const QString &uri, const QStrin
27422735
{
27432736
const QgsDataSourceUri dsUri( uri );
27442737
// connect to database
2745-
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri.service(), dsUri.host(), dsUri.database(), dsUri.username(), dsUri.password() );
2738+
std::shared_ptr<QgsMssqlDatabase> db = QgsMssqlDatabase::connectDb( dsUri );
27462739

27472740
if ( !db->isValid() )
27482741
{

src/providers/mssql/qgsmssqlprovider.h

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -213,19 +213,12 @@ class QgsMssqlProvider final : public QgsVectorDataProvider
213213

214214
mutable Qgis::WkbType mWkbType = Qgis::WkbType::Unknown;
215215

216+
QgsDataSourceUri mUri;
217+
216218
// current layer name
217219
QString mSchemaName;
218220
QString mTableName;
219221

220-
// login
221-
QString mUserName;
222-
QString mPassword;
223-
224-
// server access
225-
QString mService;
226-
QString mDatabaseName;
227-
QString mHost;
228-
229222
// available tables
230223
QStringList mTables;
231224

0 commit comments

Comments
 (0)