ogr provider update: better support column names containing international characters

git-svn-id: http://svn.osgeo.org/qgis/trunk@9415 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
jef 2008-09-26 19:06:10 +00:00
parent d9f3afa4e9
commit c23a4d9892
2 changed files with 23 additions and 6 deletions

View File

@ -1263,11 +1263,14 @@ void QgsOgrProvider::uniqueValues( int index, QList<QVariant> &uniqueValues )
if ( !fi.exists() )
return;
QString sql = QString( "SELECT DISTINCT %1 FROM %2 ORDER BY %1" ).arg( fld.name() ).arg( fi.baseName() );
QString sql = QString( "SELECT DISTINCT %1 FROM %2 ORDER BY %1" )
.arg( quotedIdentifier( fld.name() ) )
.arg( quotedIdentifier( fi.baseName() ) );
uniqueValues.clear();
OGRLayerH lyr = OGR_DS_ExecuteSQL( ogrDataSource, sql.toAscii(), NULL, "SQL" );
QgsDebugMsg( QString( "SQL: %1" ).arg( sql ) );
OGRLayerH lyr = OGR_DS_ExecuteSQL( ogrDataSource, mEncoding->fromUnicode( sql ).data(), NULL, "SQL" );
if ( 0 == lyr )
return;
@ -1290,9 +1293,11 @@ QVariant QgsOgrProvider::minimumValue( int index )
if ( !fi.exists() )
return QVariant();
QString sql = QString( "SELECT MIN(%1) FROM %2" ).arg( fld.name() ).arg( fi.baseName() );
QString sql = QString( "SELECT MIN(%1) FROM %2" )
.arg( quotedIdentifier( fld.name() ) )
.arg( quotedIdentifier( fi.baseName() ) );
OGRLayerH l = OGR_DS_ExecuteSQL( ogrDataSource, sql.toAscii(), NULL, "SQL" );
OGRLayerH l = OGR_DS_ExecuteSQL( ogrDataSource, mEncoding->fromUnicode( sql ).data(), NULL, "SQL" );
if ( l == 0 )
return QVariant();
@ -1319,9 +1324,11 @@ QVariant QgsOgrProvider::maximumValue( int index )
if ( !fi.exists() )
return QVariant();
QString sql = QString( "SELECT MAX(%1) FROM %2" ).arg( fld.name() ).arg( fi.baseName() );
QString sql = QString( "SELECT MAX(%1) FROM %2" )
.arg( quotedIdentifier( fld.name() ) )
.arg( quotedIdentifier( fi.baseName() ) );
OGRLayerH l = OGR_DS_ExecuteSQL( ogrDataSource, sql.toAscii(), NULL, "SQL" );
OGRLayerH l = OGR_DS_ExecuteSQL( ogrDataSource, mEncoding->fromUnicode( sql ).data(), NULL, "SQL" );
if ( l == 0 )
return QVariant();
@ -1339,3 +1346,11 @@ QVariant QgsOgrProvider::maximumValue( int index )
return value;
}
QString QgsOgrProvider::quotedIdentifier( QString field )
{
field.replace( '\\', "\\\\" );
field.replace( '"', "\\\"" );
field.replace( "'", "\\'" );
return field.prepend( "\"" ).append( "\"" );
}

View File

@ -251,4 +251,6 @@ class QgsOgrProvider : public QgsVectorDataProvider
bool addFeature( QgsFeature& f );
/**Deletes one feature*/
bool deleteFeature( int id );
QString quotedIdentifier( QString field );
};