@@ -398,11 +398,11 @@ bool QgsOgrProvider::setSubsetString( QString theSQL, bool updateFeatureCount )
398398
399399 if ( !mSubsetString .isEmpty () )
400400 {
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 );
406406
407407 if ( !ogrLayer )
408408 {
@@ -1232,14 +1232,14 @@ bool QgsOgrProvider::createSpatialIndex()
12321232
12331233 QgsCPLErrorHandler handler;
12341234
1235- QString layerName = FROM8 ( OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrOrigLayer ) ) );
1235+ QByteArray layerName = OGR_FD_GetName ( OGR_L_GetLayerDefn ( ogrOrigLayer ) );
12361236
12371237 // run REPACK on shape files
12381238 if ( mDeletedFeatures )
12391239 {
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 );
12431243
12441244 if ( mFilePath .endsWith ( " .shp" , Qt::CaseInsensitive ) || mFilePath .endsWith ( " .dbf" , Qt::CaseInsensitive ) )
12451245 {
@@ -1284,9 +1284,9 @@ bool QgsOgrProvider::createSpatialIndex()
12841284
12851285 if ( ogrDataSource )
12861286 {
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 ), " " );
12901290 }
12911291
12921292 QFileInfo fi ( mFilePath ); // to get the base name
@@ -1297,11 +1297,11 @@ bool QgsOgrProvider::createSpatialIndex()
12971297
12981298bool QgsOgrProvider::createAttributeIndex ( int field )
12991299{
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" );
13051305
13061306 QFileInfo fi ( mFilePath ); // to get the base name
13071307 // find out, if the .idm file is there
@@ -2197,23 +2197,23 @@ void QgsOgrProvider::uniqueValues( int index, QList<QVariant> &uniqueValues, int
21972197 // avoid GDAL #4509
21982198 return QgsVectorDataProvider::uniqueValues ( index, uniqueValues, limit );
21992199#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 ) ) );
22052202
22062203 if ( !mSubsetString .isEmpty () )
22072204 {
2208- sql += QString ( " WHERE %1 " ). arg ( mSubsetString );
2205+ sql += " WHERE " + mEncoding -> fromUnicode ( mSubsetString );
22092206 }
22102207
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
22122209
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" );
22152212 if ( l == 0 )
2213+ {
2214+ QgsDebugMsg ( " Failed to execute SQL" );
22162215 return QgsVectorDataProvider::uniqueValues ( index, uniqueValues, limit );
2216+ }
22172217
22182218 OGRFeatureH f;
22192219 while ( 0 != ( f = OGR_L_GetNextFeature ( l ) ) )
@@ -2237,21 +2237,20 @@ QVariant QgsOgrProvider::minimumValue( int index )
22372237 }
22382238 const QgsField& fld = mAttributeFields [index];
22392239
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 ) ) );
22452242
22462243 if ( !mSubsetString .isEmpty () )
22472244 {
2248- sql += QString ( " WHERE %1 " ). arg ( mSubsetString );
2245+ sql += " WHERE " + mEncoding -> fromUnicode ( mSubsetString );
22492246 }
22502247
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" );
22532249 if ( l == 0 )
2250+ {
2251+ QgsDebugMsg ( QString ( " Failed to execute SQL: %1" ).arg ( mEncoding ->toUnicode ( sql ) ) );
22542252 return QgsVectorDataProvider::minimumValue ( index );
2253+ }
22552254
22562255 OGRFeatureH f = OGR_L_GetNextFeature ( l );
22572256 if ( f == 0 )
@@ -2276,20 +2275,20 @@ QVariant QgsOgrProvider::maximumValue( int index )
22762275 }
22772276 const QgsField& fld = mAttributeFields [index];
22782277
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 ) ) );
22842280
22852281 if ( !mSubsetString .isEmpty () )
22862282 {
2287- sql += QString ( " WHERE %1 " ). arg ( mSubsetString );
2283+ sql += " WHERE " + mEncoding -> fromUnicode ( mSubsetString );
22882284 }
22892285
2290- OGRLayerH l = OGR_DS_ExecuteSQL ( ogrDataSource, mEncoding -> fromUnicode ( sql ) .constData (), NULL , " SQL" );
2286+ OGRLayerH l = OGR_DS_ExecuteSQL ( ogrDataSource, sql.constData (), NULL , " SQL" );
22912287 if ( l == 0 )
2288+ {
2289+ QgsDebugMsg ( QString ( " Failed to execute SQL: %1" ).arg ( mEncoding ->toUnicode ( sql ) ) );
22922290 return QgsVectorDataProvider::maximumValue ( index );
2291+ }
22932292
22942293 OGRFeatureH f = OGR_L_GetNextFeature ( l );
22952294 if ( f == 0 )
@@ -2306,7 +2305,7 @@ QVariant QgsOgrProvider::maximumValue( int index )
23062305 return value;
23072306}
23082307
2309- QString QgsOgrProvider::quotedIdentifier ( QString field )
2308+ QByteArray QgsOgrProvider::quotedIdentifier ( QByteArray field )
23102309{
23112310 if ( ogrDriverName == " MySQL" )
23122311 {
0 commit comments