[QGIS Commit] r9415 - trunk/qgis/src/providers/ogr
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Fri Sep 26 15:06:10 EDT 2008
Author: jef
Date: 2008-09-26 15:06:10 -0400 (Fri, 26 Sep 2008)
New Revision: 9415
Modified:
trunk/qgis/src/providers/ogr/qgsogrprovider.cpp
trunk/qgis/src/providers/ogr/qgsogrprovider.h
Log:
ogr provider update: better support column names containing international characters
Modified: trunk/qgis/src/providers/ogr/qgsogrprovider.cpp
===================================================================
--- trunk/qgis/src/providers/ogr/qgsogrprovider.cpp 2008-09-26 17:19:56 UTC (rev 9414)
+++ trunk/qgis/src/providers/ogr/qgsogrprovider.cpp 2008-09-26 19:06:10 UTC (rev 9415)
@@ -1263,11 +1263,14 @@
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 @@
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 @@
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 @@
return value;
}
+
+QString QgsOgrProvider::quotedIdentifier( QString field )
+{
+ field.replace( '\\', "\\\\" );
+ field.replace( '"', "\\\"" );
+ field.replace( "'", "\\'" );
+ return field.prepend( "\"" ).append( "\"" );
+}
Modified: trunk/qgis/src/providers/ogr/qgsogrprovider.h
===================================================================
--- trunk/qgis/src/providers/ogr/qgsogrprovider.h 2008-09-26 17:19:56 UTC (rev 9414)
+++ trunk/qgis/src/providers/ogr/qgsogrprovider.h 2008-09-26 19:06:10 UTC (rev 9415)
@@ -251,4 +251,6 @@
bool addFeature( QgsFeature& f );
/**Deletes one feature*/
bool deleteFeature( int id );
+
+ QString quotedIdentifier( QString field );
};
More information about the QGIS-commit
mailing list