[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