[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