[QGIS Commit] r9619 - trunk/qgis/src/providers/postgres

svn_qgis at osgeo.org svn_qgis at osgeo.org
Mon Nov 10 14:40:00 EST 2008


Author: jef
Date: 2008-11-10 14:40:00 -0500 (Mon, 10 Nov 2008)
New Revision: 9619

Modified:
   trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp
Log:
postgres provider update:
- handle secondary geometry columns as text in EWKT.
- improve handling of errornous queries.
- kudos to Stefanie Tellex for the initial patch



Modified: trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp
===================================================================
--- trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp	2008-11-10 14:39:12 UTC (rev 9618)
+++ trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp	2008-11-10 19:40:00 UTC (rev 9619)
@@ -45,7 +45,6 @@
 
 #include "qgspostgisbox3d.h"
 #include "qgslogger.h"
-#include "qgslogger.h"
 
 const QString POSTGRES_KEY = "postgres";
 const QString POSTGRES_DESCRIPTION = "PostgreSQL/PostGIS data provider";
@@ -424,6 +423,10 @@
       {
         query += QString( ",boolout(%1)" ).arg( quotedIdentifier( fieldname ) );
       }
+      else if ( type == "geometry")
+      {
+        query += QString(",asewkt(%1)").arg(quotedIdentifier(fieldname));
+      }
       else
       {
         query += "," + quotedIdentifier( fieldname ) + "::text";
@@ -826,6 +829,7 @@
                   fieldTypeName == "bpchar" ||
                   fieldTypeName == "varchar" ||
                   fieldTypeName == "bool" ||
+                  fieldTypeName == "geometry" ||
                   fieldTypeName == "money" ||
                   fieldTypeName.startsWith( "time" ) ||
                   fieldTypeName.startsWith( "date" ) )
@@ -1802,6 +1806,10 @@
             values += "," + defVal;
           }
         }
+        else if( fit->typeName()=="geometry" )
+        {
+          values += QString(",geomfromewkt(%1)").arg( quotedValue( it->toString() ) );
+        }
         else
         {
           values += "," + quotedValue( it->toString() );
@@ -1810,7 +1818,14 @@
       else
       {
         // value is not unique => add parameter
-        values += QString( ",$%1" ).arg( defaultValues.size() + 3 );
+        if( fit->typeName()=="geometry" )
+        {
+          values += QString( ",geomfromewkt($%1)" ).arg( defaultValues.size() + 3 );
+        }
+        else
+        {
+          values += QString( ",$%1" ).arg( defaultValues.size() + 3 );
+        }
         defaultValues.append( defVal );
         fieldId.append( it.key() );
       }
@@ -2032,15 +2047,15 @@
       {
         try
         {
-          QString fieldName = field( siter.key() ).name();
+          QgsField fld = field( siter.key() );
 
           if ( !first )
             sql += ",";
           else
             first = false;
 
-          sql += QString( "%1=%2" )
-                 .arg( quotedIdentifier( fieldName ) )
+          sql += QString( fld.typeName()!="geometry" ? "%1=%2" : "%1=geomfromewkt(%2)" )
+                 .arg( quotedIdentifier( fld.name() ) )
                  .arg( quotedValue( siter->toString() ) );
         }
         catch ( PGFieldNotFound )
@@ -2635,16 +2650,22 @@
   if ( res )
   {
     int errorStatus = PQresultStatus( res );
-#ifdef QGISDEBUG
     if ( errorStatus != PGRES_COMMAND_OK )
     {
+#ifdef QGISDEBUG
       QString err = QString( "Query: %1 returned %2 [%3]" )
                     .arg( query )
                     .arg( errorStatus )
                     .arg( PQresultErrorMessage( res ) );
       QgsDebugMsgLevel( err, 3 );
+#endif
+      if( openCursors )
+      {
+        PQexecNR( "ROLLBACK" );
+        QgsDebugMsg( QString("Re-starting read-only transaction after errornous statement - state of %1 cursors lost" ).arg( openCursors ) );
+        PQexecNR( "BEGIN READ ONLY" );
+      }
     }
-#endif
     return errorStatus == PGRES_COMMAND_OK;
   }
   else



More information about the QGIS-commit mailing list