[QGIS Commit] r13336 - trunk/qgis/src/core

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue Apr 20 10:54:51 EDT 2010


Author: jef
Date: 2010-04-20 10:54:50 -0400 (Tue, 20 Apr 2010)
New Revision: 13336

Modified:
   trunk/qgis/src/core/qgsdatasourceuri.cpp
   trunk/qgis/src/core/qgsdatasourceuri.h
Log:
improve database uri quoting (eg. for table names with quotes)

Modified: trunk/qgis/src/core/qgsdatasourceuri.cpp
===================================================================
--- trunk/qgis/src/core/qgsdatasourceuri.cpp	2010-04-20 14:02:10 UTC (rev 13335)
+++ trunk/qgis/src/core/qgsdatasourceuri.cpp	2010-04-20 14:54:50 UTC (rev 13336)
@@ -306,12 +306,12 @@
   mSchema = "";
 }
 
-QString QgsDataSourceURI::escape( const QString &theVal ) const
+QString QgsDataSourceURI::escape( const QString &theVal, QChar delim = '\'' ) const
 {
   QString val = theVal;
 
   val.replace( "\\", "\\\\" );
-  val.replace( "\'", "\\'" );
+  val.replace( delim, QString( "\\%1" ).arg( delim ) );
 
   return val;
 }
@@ -349,7 +349,7 @@
         i++;
         if ( i == uri.length() )
           continue;
-        if ( uri[i] != '\'' && uri[i] != '\\' )
+        if ( uri[i] != delim && uri[i] != '\\' )
           i--;
       }
       else if ( uri[i] == delim )
@@ -449,10 +449,13 @@
 
 QString QgsDataSourceURI::quotedTablename() const
 {
-  if ( mSchema != "" )
-    return QString( "\"%1\".\"%2\"" ).arg( mSchema ).arg( mTable );
+  if ( !mSchema.isEmpty() )
+    return QString( "\"%1\".\"%2\"" )
+           .arg( escape( mSchema, '"' ) )
+           .arg( escape( mTable, '"' ) );
   else
-    return QString( "\"%1\"" ).arg( mTable );
+    return QString( "\"%1\"" )
+           .arg( escape( mTable, '"' ) );
 }
 
 void QgsDataSourceURI::setConnection( const QString &host,

Modified: trunk/qgis/src/core/qgsdatasourceuri.h
===================================================================
--- trunk/qgis/src/core/qgsdatasourceuri.h	2010-04-20 14:02:10 UTC (rev 13335)
+++ trunk/qgis/src/core/qgsdatasourceuri.h	2010-04-20 14:54:50 UTC (rev 13336)
@@ -107,7 +107,7 @@
   private:
     void skipBlanks( const QString &uri, int &i );
     QString getValue( const QString &uri, int &i );
-    QString escape( const QString &uri ) const;
+    QString escape( const QString &uri, QChar delim ) const;
 
     /* data */
 
@@ -123,7 +123,7 @@
     QString mTable;
     //! geometry column
     QString mGeometryColumn;
-    //! SQL where clause used to limit features returned from the layer
+    //! SQL query or where clause used to limit features returned from the layer
     QString mSql;
     //! username
     QString mUsername;



More information about the QGIS-commit mailing list