@@ -38,6 +38,7 @@ QgsOracleFeatureIterator::QgsOracleFeatureIterator( QgsOracleFeatureSource* sour
38
38
return ;
39
39
}
40
40
41
+ QVariantList args;
41
42
mQry = QSqlQuery ( *mConnection );
42
43
43
44
if ( mRequest .flags () & QgsFeatureRequest::SubsetOfAttributes )
@@ -79,17 +80,15 @@ QgsOracleFeatureIterator::QgsOracleFeatureIterator( QgsOracleFeatureSource* sour
79
80
if ( mSource ->mHasSpatialIndex )
80
81
{
81
82
QgsRectangle rect ( mRequest .filterRect () );
82
- QString bbox = QString ( " mdsys.sdo_geometry(2003,%1,NULL,"
83
- " mdsys.sdo_elem_info_array(1,1003,3),"
84
- " mdsys.sdo_ordinate_array(%2,%3,%4,%5)"
85
- " )" )
86
- .arg ( mSource ->mSrid < 1 ? " NULL" : QString::number ( mSource ->mSrid ) )
87
- .arg ( qgsDoubleToString ( rect.xMinimum () ) )
88
- .arg ( qgsDoubleToString ( rect.yMinimum () ) )
89
- .arg ( qgsDoubleToString ( rect.xMaximum () ) )
90
- .arg ( qgsDoubleToString ( rect.yMaximum () ) );
91
-
92
- whereClause = QString ( " sdo_filter(%1,%2)='TRUE'" ).arg ( QgsOracleProvider::quotedIdentifier ( mSource ->mGeometryColumn ) ).arg ( bbox );
83
+ QString bbox = QStringLiteral ( " mdsys.sdo_geometry(2003,?,NULL,"
84
+ " mdsys.sdo_elem_info_array(1,1003,3),"
85
+ " mdsys.sdo_ordinate_array(?,?,?,?)"
86
+ " )" );
87
+
88
+ whereClause = QStringLiteral ( " sdo_filter(%1,%2)='TRUE'" )
89
+ .arg ( QgsOracleProvider::quotedIdentifier ( mSource ->mGeometryColumn ) ).arg ( bbox );
90
+
91
+ args << ( mSource ->mSrid < 1 ? QVariant ( QVariant::Int ) : mSource ->mSrid ) << rect.xMinimum () << rect.yMinimum () << rect.xMaximum () << rect.yMaximum ();
93
92
94
93
if (( mRequest .flags () & QgsFeatureRequest::ExactIntersect ) != 0 )
95
94
{
@@ -99,6 +98,7 @@ QgsOracleFeatureIterator::QgsOracleFeatureIterator( QgsOracleFeatureSource* sour
99
98
whereClause += QString ( " AND sdo_relate(%1,%2,'mask=ANYINTERACT')='TRUE'" )
100
99
.arg ( QgsOracleProvider::quotedIdentifier ( mSource ->mGeometryColumn ) )
101
100
.arg ( bbox );
101
+ args << ( mSource ->mSrid < 1 ? QVariant ( QVariant::Int ) : mSource ->mSrid ) << rect.xMinimum () << rect.yMinimum () << rect.xMaximum () << rect.yMaximum ();
102
102
}
103
103
else
104
104
{
@@ -123,14 +123,14 @@ QgsOracleFeatureIterator::QgsOracleFeatureIterator( QgsOracleFeatureSource* sour
123
123
{
124
124
case QgsFeatureRequest::FilterFid:
125
125
{
126
- QString fidWhereClause = QgsOracleUtils::whereClause ( mRequest .filterFid (), mSource ->mFields , mSource ->mPrimaryKeyType , mSource ->mPrimaryKeyAttrs , mSource ->mShared );
126
+ QString fidWhereClause = QgsOracleUtils::whereClause ( mRequest .filterFid (), mSource ->mFields , mSource ->mPrimaryKeyType , mSource ->mPrimaryKeyAttrs , mSource ->mShared , args );
127
127
whereClause = QgsOracleUtils::andWhereClauses ( whereClause, fidWhereClause );
128
128
}
129
129
break ;
130
130
131
131
case QgsFeatureRequest::FilterFids:
132
132
{
133
- QString fidsWhereClause = QgsOracleUtils::whereClause ( mRequest .filterFids (), mSource ->mFields , mSource ->mPrimaryKeyType , mSource ->mPrimaryKeyAttrs , mSource ->mShared );
133
+ QString fidsWhereClause = QgsOracleUtils::whereClause ( mRequest .filterFids (), mSource ->mFields , mSource ->mPrimaryKeyType , mSource ->mPrimaryKeyAttrs , mSource ->mShared , args );
134
134
whereClause = QgsOracleUtils::andWhereClauses ( whereClause, fidsWhereClause );
135
135
}
136
136
break ;
@@ -205,14 +205,15 @@ QgsOracleFeatureIterator::QgsOracleFeatureIterator( QgsOracleFeatureSource* sour
205
205
if ( !whereClause.isEmpty () )
206
206
whereClause += " AND " ;
207
207
208
- whereClause += QString ( " rownum<=%1" ).arg ( mRequest .limit () );
209
- fallbackStatement += QString ( " rownum<=%1" ).arg ( mRequest .limit () );
208
+ whereClause += QStringLiteral ( " rownum<=?" );
209
+ fallbackStatement += QStringLiteral ( " rownum<=?" );
210
+ args << QVariant::fromValue ( mRequest .limit () );
210
211
}
211
212
212
- bool result = openQuery ( whereClause, !useFallback );
213
+ bool result = openQuery ( whereClause, args, !useFallback );
213
214
if ( !result && useFallback )
214
215
{
215
- result = openQuery ( fallbackStatement );
216
+ result = openQuery ( fallbackStatement, args );
216
217
if ( result )
217
218
{
218
219
mExpressionCompiled = false ;
@@ -249,7 +250,7 @@ bool QgsOracleFeatureIterator::fetchFeature( QgsFeature& feature )
249
250
if ( mRewind )
250
251
{
251
252
mRewind = false ;
252
- if ( !QgsOracleProvider::exec ( mQry , mSql ) )
253
+ if ( !QgsOracleProvider::exec ( mQry , mSql , mArgs ) )
253
254
{
254
255
QgsMessageLog::logMessage ( QObject::tr ( " Fetching features failed.\n SQL:%1\n Error: %2" )
255
256
.arg ( mQry .lastQuery () )
@@ -418,14 +419,14 @@ bool QgsOracleFeatureIterator::close()
418
419
419
420
if ( mConnection )
420
421
QgsOracleConnPool::instance ()->releaseConnection ( mConnection );
421
- mConnection = 0 ;
422
+ mConnection = nullptr ;
422
423
423
424
iteratorClosed ();
424
425
425
426
return true ;
426
427
}
427
428
428
- bool QgsOracleFeatureIterator::openQuery ( QString whereClause, bool showLog )
429
+ bool QgsOracleFeatureIterator::openQuery ( QString whereClause, QVariantList args, bool showLog )
429
430
{
430
431
try
431
432
{
@@ -478,7 +479,8 @@ bool QgsOracleFeatureIterator::openQuery( QString whereClause, bool showLog )
478
479
479
480
QgsDebugMsg ( QString ( " Fetch features: %1" ).arg ( query ) );
480
481
mSql = query;
481
- if ( !QgsOracleProvider::exec ( mQry , query ) )
482
+ mArgs = args;
483
+ if ( !QgsOracleProvider::exec ( mQry , query, args ) )
482
484
{
483
485
if ( showLog )
484
486
{
0 commit comments