@@ -398,11 +398,11 @@ bool QgsOgrProvider::setSubsetString( QString theSQL, bool updateFeatureCount )
398
398
399
399
if ( !mSubsetString .isEmpty () )
400
400
{
401
- QString sql = QString ( " SELECT * FROM %1 WHERE %2 " )
402
- . arg ( quotedIdentifier ( FROM8 ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrOrigLayer ) ) ) ) )
403
- . arg ( mSubsetString );
404
- QgsDebugMsg ( QString ( " SQL: %1" ).arg ( sql ) );
405
- ogrLayer = OGR_DS_ExecuteSQL ( ogrDataSource, mEncoding -> fromUnicode ( sql ) .constData (), NULL , NULL );
401
+ QByteArray sql = " SELECT * FROM " + quotedIdentifier ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrOrigLayer ) ) );
402
+ sql += " WHERE " + mEncoding -> fromUnicode ( mSubsetString );
403
+
404
+ QgsDebugMsg ( QString ( " SQL: %1" ).arg ( mEncoding -> toUnicode ( sql ) ) );
405
+ ogrLayer = OGR_DS_ExecuteSQL ( ogrDataSource, sql.constData (), NULL , NULL );
406
406
407
407
if ( !ogrLayer )
408
408
{
@@ -1232,14 +1232,14 @@ bool QgsOgrProvider::createSpatialIndex()
1232
1232
1233
1233
QgsCPLErrorHandler handler;
1234
1234
1235
- QString layerName = FROM8 ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrOrigLayer ) ) );
1235
+ QByteArray layerName = OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrOrigLayer ) );
1236
1236
1237
1237
// run REPACK on shape files
1238
1238
if ( mDeletedFeatures )
1239
1239
{
1240
- QString sql = QString ( " REPACK %1 " ). arg ( layerName ) ; // don't quote the layer name as it works with spaces in the name and won't work if the name is quoted
1241
- QgsDebugMsg ( QString ( " SQL: %1" ).arg ( sql ) );
1242
- OGR_DS_ExecuteSQL ( ogrDataSource, mEncoding -> fromUnicode ( sql ) .constData (), NULL , NULL );
1240
+ QByteArray sql = QByteArray ( " REPACK " ) + layerName ; // don't quote the layer name as it works with spaces in the name and won't work if the name is quoted
1241
+ QgsDebugMsg ( QString ( " SQL: %1" ).arg ( FROM8 ( sql ) ) );
1242
+ OGR_DS_ExecuteSQL ( ogrDataSource, sql.constData (), NULL , NULL );
1243
1243
1244
1244
if ( mFilePath .endsWith ( " .shp" , Qt::CaseInsensitive ) || mFilePath .endsWith ( " .dbf" , Qt::CaseInsensitive ) )
1245
1245
{
@@ -1284,9 +1284,9 @@ bool QgsOgrProvider::createSpatialIndex()
1284
1284
1285
1285
if ( ogrDataSource )
1286
1286
{
1287
- QString sql = QString ( " CREATE SPATIAL INDEX ON %1 " ). arg ( quotedIdentifier ( layerName ) ); // quote the layer name so spaces are handled
1288
- QgsDebugMsg ( QString ( " SQL: %1" ).arg ( sql ) );
1289
- OGR_DS_ExecuteSQL ( ogrDataSource, mEncoding -> fromUnicode ( sql ) .constData (), OGR_L_GetSpatialFilter ( ogrOrigLayer ), " " );
1287
+ QByteArray sql = " CREATE SPATIAL INDEX ON " + quotedIdentifier ( layerName ); // quote the layer name so spaces are handled
1288
+ QgsDebugMsg ( QString ( " SQL: %1" ).arg ( FROM8 ( sql ) ) );
1289
+ OGR_DS_ExecuteSQL ( ogrDataSource, sql.constData (), OGR_L_GetSpatialFilter ( ogrOrigLayer ), " " );
1290
1290
}
1291
1291
1292
1292
QFileInfo fi ( mFilePath ); // to get the base name
@@ -1297,11 +1297,11 @@ bool QgsOgrProvider::createSpatialIndex()
1297
1297
1298
1298
bool QgsOgrProvider::createAttributeIndex ( int field )
1299
1299
{
1300
- QString layerName = FROM8 ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrOrigLayer ) ) );
1301
- QString dropSql = QString ( " DROP INDEX ON %1 " ). arg ( quotedIdentifier ( layerName ) ) ;
1302
- OGR_DS_ExecuteSQL ( ogrDataSource, mEncoding -> fromUnicode ( dropSql ) .constData (), OGR_L_GetSpatialFilter ( ogrOrigLayer ), " SQL" );
1303
- QString createSql = QString ( " CREATE INDEX ON %1 USING %2 " ). arg ( quotedIdentifier ( layerName ) ). arg ( fields ()[field].name () );
1304
- OGR_DS_ExecuteSQL ( ogrDataSource, mEncoding -> fromUnicode ( createSql ) .constData (), OGR_L_GetSpatialFilter ( ogrOrigLayer ), " SQL" );
1300
+ QByteArray quotedLayerName = quotedIdentifier ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrOrigLayer ) ) );
1301
+ QByteArray dropSql = " DROP INDEX ON " + quotedLayerName ;
1302
+ OGR_DS_ExecuteSQL ( ogrDataSource, dropSql.constData (), OGR_L_GetSpatialFilter ( ogrOrigLayer ), " SQL" );
1303
+ QByteArray createSql = " CREATE INDEX ON " + quotedLayerName + " USING " + mEncoding -> fromUnicode ( fields ()[field].name () );
1304
+ OGR_DS_ExecuteSQL ( ogrDataSource, createSql.constData (), OGR_L_GetSpatialFilter ( ogrOrigLayer ), " SQL" );
1305
1305
1306
1306
QFileInfo fi ( mFilePath ); // to get the base name
1307
1307
// find out, if the .idm file is there
@@ -2197,23 +2197,23 @@ void QgsOgrProvider::uniqueValues( int index, QList<QVariant> &uniqueValues, int
2197
2197
// avoid GDAL #4509
2198
2198
return QgsVectorDataProvider::uniqueValues ( index, uniqueValues, limit );
2199
2199
#else
2200
- QString theLayerName = FROM8 ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrLayer ) ) );
2201
-
2202
- QString sql = QString ( " SELECT DISTINCT %1 FROM %2" )
2203
- .arg ( quotedIdentifier ( fld.name () ) )
2204
- .arg ( quotedIdentifier ( theLayerName ) );
2200
+ QByteArray sql = " SELECT DISTINCT " + quotedIdentifier ( mEncoding ->fromUnicode ( fld.name () ) );
2201
+ sql += " FROM " + quotedIdentifier ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrLayer ) ) );
2205
2202
2206
2203
if ( !mSubsetString .isEmpty () )
2207
2204
{
2208
- sql += QString ( " WHERE %1 " ). arg ( mSubsetString );
2205
+ sql += " WHERE " + mEncoding -> fromUnicode ( mSubsetString );
2209
2206
}
2210
2207
2211
- sql += QString ( " ORDER BY %1 ASC " ). arg ( fld.name () ); // quoting of fieldname produces a syntax error
2208
+ sql += " ORDER BY " + mEncoding -> fromUnicode ( fld.name () ) + " ASC " ; // quoting of fieldname produces a syntax error
2212
2209
2213
- QgsDebugMsg ( QString ( " SQL: %1" ).arg ( sql ) );
2214
- OGRLayerH l = OGR_DS_ExecuteSQL ( ogrDataSource, mEncoding -> fromUnicode ( sql ) .constData (), NULL , " SQL" );
2210
+ QgsDebugMsg ( QString ( " SQL: %1" ).arg ( mEncoding -> toUnicode ( sql ) ) );
2211
+ OGRLayerH l = OGR_DS_ExecuteSQL ( ogrDataSource, sql.constData (), NULL , " SQL" );
2215
2212
if ( l == 0 )
2213
+ {
2214
+ QgsDebugMsg ( " Failed to execute SQL" );
2216
2215
return QgsVectorDataProvider::uniqueValues ( index, uniqueValues, limit );
2216
+ }
2217
2217
2218
2218
OGRFeatureH f;
2219
2219
while ( 0 != ( f = OGR_L_GetNextFeature ( l ) ) )
@@ -2237,21 +2237,20 @@ QVariant QgsOgrProvider::minimumValue( int index )
2237
2237
}
2238
2238
const QgsField& fld = mAttributeFields [index];
2239
2239
2240
- QString theLayerName = FROM8 ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrLayer ) ) );
2241
-
2242
- QString sql = QString ( " SELECT MIN(%1) FROM %2" )
2243
- .arg ( quotedIdentifier ( fld.name () ) )
2244
- .arg ( quotedIdentifier ( theLayerName ) );
2240
+ QByteArray sql = " SELECT MIN(" + quotedIdentifier ( mEncoding ->fromUnicode ( fld.name () ) );
2241
+ sql += " ) FROM " + quotedIdentifier ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrLayer ) ) );
2245
2242
2246
2243
if ( !mSubsetString .isEmpty () )
2247
2244
{
2248
- sql += QString ( " WHERE %1 " ). arg ( mSubsetString );
2245
+ sql += " WHERE " + mEncoding -> fromUnicode ( mSubsetString );
2249
2246
}
2250
2247
2251
- OGRLayerH l = OGR_DS_ExecuteSQL ( ogrDataSource, mEncoding ->fromUnicode ( sql ).constData (), NULL , " SQL" );
2252
-
2248
+ OGRLayerH l = OGR_DS_ExecuteSQL ( ogrDataSource, sql.constData (), NULL , " SQL" );
2253
2249
if ( l == 0 )
2250
+ {
2251
+ QgsDebugMsg ( QString ( " Failed to execute SQL: %1" ).arg ( mEncoding ->toUnicode ( sql ) ) );
2254
2252
return QgsVectorDataProvider::minimumValue ( index );
2253
+ }
2255
2254
2256
2255
OGRFeatureH f = OGR_L_GetNextFeature ( l );
2257
2256
if ( f == 0 )
@@ -2276,20 +2275,20 @@ QVariant QgsOgrProvider::maximumValue( int index )
2276
2275
}
2277
2276
const QgsField& fld = mAttributeFields [index];
2278
2277
2279
- QString theLayerName = FROM8 ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrLayer ) ) );
2280
-
2281
- QString sql = QString ( " SELECT MAX(%1) FROM %2" )
2282
- .arg ( quotedIdentifier ( fld.name () ) )
2283
- .arg ( quotedIdentifier ( theLayerName ) );
2278
+ QByteArray sql = " SELECT MAX(" + quotedIdentifier ( mEncoding ->fromUnicode ( fld.name () ) );
2279
+ sql += " ) FROM " + quotedIdentifier ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrLayer ) ) );
2284
2280
2285
2281
if ( !mSubsetString .isEmpty () )
2286
2282
{
2287
- sql += QString ( " WHERE %1 " ). arg ( mSubsetString );
2283
+ sql += " WHERE " + mEncoding -> fromUnicode ( mSubsetString );
2288
2284
}
2289
2285
2290
- OGRLayerH l = OGR_DS_ExecuteSQL ( ogrDataSource, mEncoding -> fromUnicode ( sql ) .constData (), NULL , " SQL" );
2286
+ OGRLayerH l = OGR_DS_ExecuteSQL ( ogrDataSource, sql.constData (), NULL , " SQL" );
2291
2287
if ( l == 0 )
2288
+ {
2289
+ QgsDebugMsg ( QString ( " Failed to execute SQL: %1" ).arg ( mEncoding ->toUnicode ( sql ) ) );
2292
2290
return QgsVectorDataProvider::maximumValue ( index );
2291
+ }
2293
2292
2294
2293
OGRFeatureH f = OGR_L_GetNextFeature ( l );
2295
2294
if ( f == 0 )
@@ -2306,7 +2305,7 @@ QVariant QgsOgrProvider::maximumValue( int index )
2306
2305
return value;
2307
2306
}
2308
2307
2309
- QString QgsOgrProvider::quotedIdentifier ( QString field )
2308
+ QByteArray QgsOgrProvider::quotedIdentifier ( QByteArray field )
2310
2309
{
2311
2310
if ( ogrDriverName == " MySQL" )
2312
2311
{
0 commit comments