Skip to content

Commit fcafc82

Browse files
committedMay 29, 2017
[mssql] Followup a76359, fix provider methods like featureCount,
uniqueValues, etc not working when using DSN for connection
1 parent 67d778f commit fcafc82

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed
 

‎src/providers/mssql/qgsmssqlprovider.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,11 @@ void QgsMssqlProvider::loadMetadata()
350350
mSRId = 0;
351351
mWkbType = QGis::WKBUnknown;
352352

353+
if ( !mDatabase.isOpen() )
354+
{
355+
mDatabase = GetDatabase( mService, mHost, mDatabaseName, mUserName, mPassword );
356+
}
357+
353358
QSqlQuery query = QSqlQuery( mDatabase );
354359
query.setForwardOnly( true );
355360
if ( !query.exec( QString( "select f_geometry_column, coord_dimension, srid, geometry_type from geometry_columns where f_table_schema = '%1' and f_table_name = '%2'" ).arg( mSchemaName, mTableName ) ) )
@@ -368,7 +373,12 @@ void QgsMssqlProvider::loadFields()
368373
{
369374
mAttributeFields.clear();
370375
mDefaultValues.clear();
376+
371377
// get field spec
378+
if ( !mDatabase.isOpen() )
379+
{
380+
mDatabase = GetDatabase( mService, mHost, mDatabaseName, mUserName, mPassword );
381+
}
372382
QSqlQuery query = QSqlQuery( mDatabase );
373383
query.setForwardOnly( true );
374384
if ( !query.exec( QString( "exec sp_columns @table_name = N'%1', @table_owner = '%2'" ).arg( mTableName, mSchemaName ) ) )
@@ -532,6 +542,10 @@ QVariant QgsMssqlProvider::minimumValue( int index )
532542
sql += QString( " where (%1)" ).arg( mSqlWhereClause );
533543
}
534544

545+
if ( !mDatabase.isOpen() )
546+
{
547+
mDatabase = GetDatabase( mService, mHost, mDatabaseName, mUserName, mPassword );
548+
}
535549
QSqlQuery query = QSqlQuery( mDatabase );
536550
query.setForwardOnly( true );
537551

@@ -563,6 +577,10 @@ QVariant QgsMssqlProvider::maximumValue( int index )
563577
sql += QString( " where (%1)" ).arg( mSqlWhereClause );
564578
}
565579

580+
if ( !mDatabase.isOpen() )
581+
{
582+
mDatabase = GetDatabase( mService, mHost, mDatabaseName, mUserName, mPassword );
583+
}
566584
QSqlQuery query = QSqlQuery( mDatabase );
567585
query.setForwardOnly( true );
568586

@@ -603,6 +621,10 @@ void QgsMssqlProvider::uniqueValues( int index, QList<QVariant> &uniqueValues, i
603621
sql += QString( " where (%1)" ).arg( mSqlWhereClause );
604622
}
605623

624+
if ( !mDatabase.isOpen() )
625+
{
626+
mDatabase = GetDatabase( mService, mHost, mDatabaseName, mUserName, mPassword );
627+
}
606628
QSqlQuery query = QSqlQuery( mDatabase );
607629
query.setForwardOnly( true );
608630

@@ -631,6 +653,10 @@ void QgsMssqlProvider::UpdateStatistics( bool estimate )
631653
// get features to calculate the statistics
632654
QString statement;
633655

656+
if ( !mDatabase.isOpen() )
657+
{
658+
mDatabase = GetDatabase( mService, mHost, mDatabaseName, mUserName, mPassword );
659+
}
634660
QSqlQuery query = QSqlQuery( mDatabase );
635661
query.setForwardOnly( true );
636662

@@ -758,6 +784,10 @@ long QgsMssqlProvider::featureCount() const
758784

759785
// If there is no subset set we can get the count from the system tables.
760786
// Which is faster then doing select count(*)
787+
if ( !mDatabase.isOpen() )
788+
{
789+
mDatabase = GetDatabase( mService, mHost, mDatabaseName, mUserName, mPassword );
790+
}
761791
QSqlQuery query = QSqlQuery( mDatabase );
762792
query.setForwardOnly( true );
763793

@@ -1419,6 +1449,10 @@ QgsCoordinateReferenceSystem QgsMssqlProvider::crs()
14191449
return mCrs;
14201450

14211451
// try to load crs from the database tables as a fallback
1452+
if ( !mDatabase.isOpen() )
1453+
{
1454+
mDatabase = GetDatabase( mService, mHost, mDatabaseName, mUserName, mPassword );
1455+
}
14221456
QSqlQuery query = QSqlQuery( mDatabase );
14231457
query.setForwardOnly( true );
14241458
bool execOk = query.exec( QString( "select srtext from spatial_ref_sys where srid = %1" ).arg( QString::number( mSRId ) ) );
@@ -1472,6 +1506,10 @@ bool QgsMssqlProvider::setSubsetString( const QString& theSQL, bool )
14721506
sql += QString( " where %1" ).arg( mSqlWhereClause );
14731507
}
14741508

1509+
if ( !mDatabase.isOpen() )
1510+
{
1511+
mDatabase = GetDatabase( mService, mHost, mDatabaseName, mUserName, mPassword );
1512+
}
14751513
QSqlQuery query = QSqlQuery( mDatabase );
14761514
query.setForwardOnly( true );
14771515
if ( !query.exec( sql ) )

‎src/providers/mssql/qgsmssqlprovider.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ class QgsMssqlProvider : public QgsVectorDataProvider
290290
QGis::WkbType mWkbType;
291291

292292
// The database object
293-
QSqlDatabase mDatabase;
293+
mutable QSqlDatabase mDatabase;
294294

295295
// The current sql query
296296
QSqlQuery mQuery;

0 commit comments

Comments
 (0)
Please sign in to comment.