@@ -350,7 +350,7 @@ void QgsMssqlProvider::loadMetadata()
350
350
mSRId = 0 ;
351
351
mWkbType = QgsWkbTypes::Unknown;
352
352
353
- QSqlQuery query = QSqlQuery ( mDatabase );
353
+ QSqlQuery query = createQuery ( );
354
354
query.setForwardOnly ( true );
355
355
if ( !query.exec ( QStringLiteral ( " select f_geometry_column, srid, geometry_type from geometry_columns where f_table_schema = '%1' and f_table_name = '%2'" ).arg ( mSchemaName , mTableName ) ) )
356
356
{
@@ -370,6 +370,15 @@ void QgsMssqlProvider::setLastError( const QString &error )
370
370
mLastError = error;
371
371
}
372
372
373
+ QSqlQuery QgsMssqlProvider::createQuery () const
374
+ {
375
+ if ( !mDatabase .isOpen () )
376
+ {
377
+ mDatabase = GetDatabase ( mService , mHost , mDatabaseName , mUserName , mPassword );
378
+ }
379
+ return QSqlQuery ( mDatabase );
380
+ }
381
+
373
382
void QgsMssqlProvider::loadFields ()
374
383
{
375
384
bool isIdentity = false ;
@@ -378,7 +387,7 @@ void QgsMssqlProvider::loadFields()
378
387
mComputedColumns .clear ();
379
388
380
389
// get field spec
381
- QSqlQuery query = QSqlQuery ( mDatabase );
390
+ QSqlQuery query = createQuery ( );
382
391
query.setForwardOnly ( true );
383
392
384
393
// Get computed columns which need to be ignored on insert or update.
@@ -576,7 +585,8 @@ QVariant QgsMssqlProvider::minimumValue( int index ) const
576
585
sql += QStringLiteral ( " where (%1)" ).arg ( mSqlWhereClause );
577
586
}
578
587
579
- QSqlQuery query = QSqlQuery ( mDatabase );
588
+
589
+ QSqlQuery query = createQuery ();
580
590
query.setForwardOnly ( true );
581
591
582
592
if ( !query.exec ( sql ) )
@@ -607,7 +617,7 @@ QVariant QgsMssqlProvider::maximumValue( int index ) const
607
617
sql += QStringLiteral ( " where (%1)" ).arg ( mSqlWhereClause );
608
618
}
609
619
610
- QSqlQuery query = QSqlQuery ( mDatabase );
620
+ QSqlQuery query = createQuery ( );
611
621
query.setForwardOnly ( true );
612
622
613
623
if ( !query.exec ( sql ) )
@@ -647,7 +657,7 @@ QSet<QVariant> QgsMssqlProvider::uniqueValues( int index, int limit ) const
647
657
sql += QStringLiteral ( " where (%1)" ).arg ( mSqlWhereClause );
648
658
}
649
659
650
- QSqlQuery query = QSqlQuery ( mDatabase );
660
+ QSqlQuery query = createQuery ( );
651
661
query.setForwardOnly ( true );
652
662
653
663
if ( !query.exec ( sql ) )
@@ -676,7 +686,7 @@ void QgsMssqlProvider::UpdateStatistics( bool estimate ) const
676
686
// get features to calculate the statistics
677
687
QString statement;
678
688
679
- QSqlQuery query = QSqlQuery ( mDatabase );
689
+ QSqlQuery query = createQuery ( );
680
690
query.setForwardOnly ( true );
681
691
682
692
// Get the extents from the spatial index table to speed up load times.
@@ -803,7 +813,7 @@ long QgsMssqlProvider::featureCount() const
803
813
804
814
// If there is no subset set we can get the count from the system tables.
805
815
// Which is faster then doing select count(*)
806
- QSqlQuery query = QSqlQuery ( mDatabase );
816
+ QSqlQuery query = createQuery ( );
807
817
query.setForwardOnly ( true );
808
818
809
819
QString sql = " SELECT rows"
@@ -844,11 +854,7 @@ bool QgsMssqlProvider::addFeatures( QgsFeatureList &flist, Flags flags )
844
854
statement = QStringLiteral ( " INSERT INTO [%1].[%2] (" ).arg ( mSchemaName , mTableName );
845
855
846
856
bool first = true ;
847
- if ( !mDatabase .isOpen () )
848
- {
849
- mDatabase = GetDatabase ( mService , mHost , mDatabaseName , mUserName , mPassword );
850
- }
851
- QSqlQuery query = QSqlQuery ( mDatabase );
857
+ QSqlQuery query = createQuery ();
852
858
query.setForwardOnly ( true );
853
859
854
860
QgsAttributes attrs = it->attributes ();
@@ -1098,11 +1104,7 @@ bool QgsMssqlProvider::addAttributes( const QList<QgsField> &attributes )
1098
1104
statement += QStringLiteral ( " [%1] %2" ).arg ( it->name (), type );
1099
1105
}
1100
1106
1101
- if ( !mDatabase .isOpen () )
1102
- {
1103
- mDatabase = GetDatabase ( mService , mHost , mDatabaseName , mUserName , mPassword );
1104
- }
1105
- QSqlQuery query = QSqlQuery ( mDatabase );
1107
+ QSqlQuery query = createQuery ();
1106
1108
query.setForwardOnly ( true );
1107
1109
if ( !query.exec ( statement ) )
1108
1110
{
@@ -1130,12 +1132,7 @@ bool QgsMssqlProvider::deleteAttributes( const QgsAttributeIds &attributes )
1130
1132
statement += QStringLiteral ( " [%1]" ).arg ( mAttributeFields .at ( *it ).name () );
1131
1133
}
1132
1134
1133
- if ( !mDatabase .isOpen () )
1134
- {
1135
- mDatabase = GetDatabase ( mService , mHost , mDatabaseName , mUserName , mPassword );
1136
- }
1137
-
1138
- QSqlQuery query = QSqlQuery ( mDatabase );
1135
+ QSqlQuery query = createQuery ();
1139
1136
query.setForwardOnly ( true );
1140
1137
1141
1138
if ( !query.exec ( statement ) )
@@ -1173,11 +1170,7 @@ bool QgsMssqlProvider::changeAttributeValues( const QgsChangedAttributesMap &att
1173
1170
QString statement = QStringLiteral ( " UPDATE [%1].[%2] SET " ).arg ( mSchemaName , mTableName );
1174
1171
1175
1172
bool first = true ;
1176
- if ( !mDatabase .isOpen () )
1177
- {
1178
- mDatabase = GetDatabase ( mService , mHost , mDatabaseName , mUserName , mPassword );
1179
- }
1180
- QSqlQuery query = QSqlQuery ( mDatabase );
1173
+ QSqlQuery query = createQuery ();
1181
1174
query.setForwardOnly ( true );
1182
1175
1183
1176
for ( QgsAttributeMap::const_iterator it2 = attrs.begin (); it2 != attrs.end (); ++it2 )
@@ -1306,11 +1299,7 @@ bool QgsMssqlProvider::changeGeometryValues( const QgsGeometryMap &geometry_map
1306
1299
QString statement;
1307
1300
statement = QStringLiteral ( " UPDATE [%1].[%2] SET " ).arg ( mSchemaName , mTableName );
1308
1301
1309
- if ( !mDatabase .isOpen () )
1310
- {
1311
- mDatabase = GetDatabase ( mService , mHost , mDatabaseName , mUserName , mPassword );
1312
- }
1313
- QSqlQuery query = QSqlQuery ( mDatabase );
1302
+ QSqlQuery query = createQuery ();
1314
1303
query.setForwardOnly ( true );
1315
1304
1316
1305
if ( mGeometryColType == QLatin1String ( " geometry" ) )
@@ -1380,11 +1369,7 @@ bool QgsMssqlProvider::deleteFeatures( const QgsFeatureIds &id )
1380
1369
featureIds += ' ,' + FID_TO_STRING ( *it );
1381
1370
}
1382
1371
1383
- if ( !mDatabase .isOpen () )
1384
- {
1385
- mDatabase = GetDatabase ( mService , mHost , mDatabaseName , mUserName , mPassword );
1386
- }
1387
- QSqlQuery query = QSqlQuery ( mDatabase );
1372
+ QSqlQuery query = createQuery ();
1388
1373
query.setForwardOnly ( true );
1389
1374
QString statement;
1390
1375
statement = QStringLiteral ( " DELETE FROM [%1].[%2] WHERE [%3] IN (%4)" ).arg ( mSchemaName ,
@@ -1426,11 +1411,7 @@ bool QgsMssqlProvider::createSpatialIndex()
1426
1411
if ( mUseEstimatedMetadata )
1427
1412
UpdateStatistics ( false );
1428
1413
1429
- if ( !mDatabase .isOpen () )
1430
- {
1431
- mDatabase = GetDatabase ( mService , mHost , mDatabaseName , mUserName , mPassword );
1432
- }
1433
- QSqlQuery query = QSqlQuery ( mDatabase );
1414
+ QSqlQuery query = createQuery ();
1434
1415
query.setForwardOnly ( true );
1435
1416
QString statement;
1436
1417
statement = QStringLiteral ( " CREATE SPATIAL INDEX [qgs_%1_sidx] ON [%2].[%3] ( [%4] )" ).arg (
@@ -1458,11 +1439,7 @@ bool QgsMssqlProvider::createSpatialIndex()
1458
1439
1459
1440
bool QgsMssqlProvider::createAttributeIndex ( int field )
1460
1441
{
1461
- if ( !mDatabase .isOpen () )
1462
- {
1463
- mDatabase = GetDatabase ( mService , mHost , mDatabaseName , mUserName , mPassword );
1464
- }
1465
- QSqlQuery query = QSqlQuery ( mDatabase );
1442
+ QSqlQuery query = createQuery ();
1466
1443
query.setForwardOnly ( true );
1467
1444
QString statement;
1468
1445
@@ -1493,7 +1470,7 @@ QgsCoordinateReferenceSystem QgsMssqlProvider::crs() const
1493
1470
return mCrs ;
1494
1471
1495
1472
// try to load crs from the database tables as a fallback
1496
- QSqlQuery query = QSqlQuery ( mDatabase );
1473
+ QSqlQuery query = createQuery ( );
1497
1474
query.setForwardOnly ( true );
1498
1475
bool execOk = query.exec ( QStringLiteral ( " select srtext from spatial_ref_sys where srid = %1" ).arg ( QString::number ( mSRId ) ) );
1499
1476
if ( execOk && query.isActive () )
@@ -1555,7 +1532,7 @@ bool QgsMssqlProvider::setSubsetString( const QString &theSQL, bool )
1555
1532
sql += QStringLiteral ( " where %1" ).arg ( mSqlWhereClause );
1556
1533
}
1557
1534
1558
- QSqlQuery query = QSqlQuery ( mDatabase );
1535
+ QSqlQuery query = createQuery ( );
1559
1536
query.setForwardOnly ( true );
1560
1537
if ( !query.exec ( sql ) )
1561
1538
{
0 commit comments