[QGIS Commit] r9382 - trunk/qgis/src/providers/postgres
svn_qgis at osgeo.org
svn_qgis at osgeo.org
Tue Sep 23 02:28:36 EDT 2008
Author: jef
Date: 2008-09-23 02:28:35 -0400 (Tue, 23 Sep 2008)
New Revision: 9382
Modified:
trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp
trunk/qgis/src/providers/postgres/qgspostgresprovider.h
Log:
postgres provider: use default values for primary key
Modified: trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp
===================================================================
--- trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp 2008-09-23 05:42:44 UTC (rev 9381)
+++ trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp 2008-09-23 06:28:35 UTC (rev 9382)
@@ -1612,34 +1612,38 @@
return valid;
}
-QVariant QgsPostgresProvider::getDefaultValue( int fieldId )
+QVariant QgsPostgresProvider::getDefaultValue( QString fieldName )
{
- try
- {
- // Get the default column value from the Postgres information
- // schema. If there is no default we return an empty string.
+ // Get the default column value from the Postgres information
+ // schema. If there is no default we return an empty string.
- // Maintaining a cache of the results of this query would be quite
- // simple and if this query is called lots, could save some time.
- QString fieldName = field( fieldId ).name();
+ // Maintaining a cache of the results of this query would be quite
+ // simple and if this query is called lots, could save some time.
- QString sql( "SELECT column_default FROM"
- " information_schema.columns WHERE"
- " column_default IS NOT NULL"
- " AND table_schema = " + quotedValue( mSchemaName ) +
- " AND table_name = " + quotedValue( mTableName ) +
- " AND column_name = " + quotedValue( fieldName ) );
+ QString sql( "SELECT column_default FROM"
+ " information_schema.columns WHERE"
+ " column_default IS NOT NULL"
+ " AND table_schema = " + quotedValue( mSchemaName ) +
+ " AND table_name = " + quotedValue( mTableName ) +
+ " AND column_name = " + quotedValue( fieldName ) );
- QVariant defaultValue( QString::null );
+ QVariant defaultValue( QString::null );
- Result result = connectionRO->PQexec( sql );
+ Result result = connectionRO->PQexec( sql );
- if ( PQntuples( result ) == 1 && !PQgetisnull( result, 0, 0 ) )
- defaultValue = QString::fromUtf8( PQgetvalue( result, 0, 0 ) );
+ if ( PQntuples( result ) == 1 && !PQgetisnull( result, 0, 0 ) )
+ defaultValue = QString::fromUtf8( PQgetvalue( result, 0, 0 ) );
- // QgsDebugMsg( QString("defaultValue for %1 is NULL: %2").arg(fieldId).arg( defaultValue.isNull() ) );
+ // QgsDebugMsg( QString("defaultValue for %1 is NULL: %2").arg(fieldId).arg( defaultValue.isNull() ) );
- return defaultValue;
+ return defaultValue;
+}
+
+QVariant QgsPostgresProvider::getDefaultValue( int fieldId )
+{
+ try
+ {
+ return getDefaultValue( field( fieldId ).name() );
}
catch ( PGFieldNotFound )
{
@@ -1820,7 +1824,10 @@
throw PGException( stmt );
PQclear( stmt );
- int primaryKeyHighWater = maxPrimaryKeyValue();
+ QString keyDefault = getDefaultValue( primaryKey ).toString();
+ int primaryKeyHighWater = -1;
+ if ( keyDefault.isNull() )
+ primaryKeyHighWater = maxPrimaryKeyValue();
QList<int> newIds;
for ( QgsFeatureList::iterator features = flist.begin(); features != flist.end(); features++ )
@@ -1832,9 +1839,19 @@
QStringList params;
params << geomParam;
- params << QString( "%1" ).arg( ++primaryKeyHighWater );
- newIds << primaryKeyHighWater;
+ if ( keyDefault.isNull() )
+ {
+ ++primaryKeyHighWater;
+ params << QString::number( primaryKeyHighWater );
+ newIds << primaryKeyHighWater;
+ }
+ else
+ {
+ QByteArray key = paramValue( keyDefault, keyDefault );
+ params << key;
+ newIds << key.toInt();
+ }
for ( int i = 0; i < fieldId.size(); i++ )
params << paramValue( attributevec[ fieldId[i] ].toString(), defaultValue[i] );
Modified: trunk/qgis/src/providers/postgres/qgspostgresprovider.h
===================================================================
--- trunk/qgis/src/providers/postgres/qgspostgresprovider.h 2008-09-23 05:42:44 UTC (rev 9381)
+++ trunk/qgis/src/providers/postgres/qgspostgresprovider.h 2008-09-23 06:28:35 UTC (rev 9382)
@@ -197,6 +197,9 @@
QgsAttributeList allAttributesList();
+ /**Returns the default value for field specified by @c fieldName */
+ QVariant getDefaultValue( QString fieldName );
+
/**Returns the default value for field specified by @c fieldId */
QVariant getDefaultValue( int fieldId );
More information about the QGIS-commit
mailing list