From d2b5ed92040448f9d4b22963e5869f4efdd2d9e9 Mon Sep 17 00:00:00 2001 From: "Juergen E. Fischer" Date: Wed, 8 Feb 2012 21:00:06 +0100 Subject: [PATCH] postgres provider: - pre-select first integer column as primary key for views - also consider oid type as integer column --- src/providers/postgres/qgspgtablemodel.cpp | 18 +++++++++++------- src/providers/postgres/qgspostgresprovider.cpp | 9 ++++----- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/providers/postgres/qgspgtablemodel.cpp b/src/providers/postgres/qgspgtablemodel.cpp index e095c6238973..a7eb163a655c 100644 --- a/src/providers/postgres/qgspgtablemodel.cpp +++ b/src/providers/postgres/qgspgtablemodel.cpp @@ -91,16 +91,20 @@ void QgsPgTableModel::addTableEntry( QgsPostgresLayerProperty layerProperty ) sridItem->setEditable( false ); QString pkText, pkCol = ""; - switch ( layerProperty.pkCols.size() ) + if ( layerProperty.pkCols.size() == 0 ) { - case 0: pkText = ""; break; - case 1: pkText = layerProperty.pkCols[0]; pkCol = pkText; break; - default: pkText = tr( "Select..." ); break; + pkText = ""; + } + else + { + pkCol = pkText = layerProperty.pkCols[0]; } QStandardItem *pkItem = new QStandardItem( pkText ); - if ( pkText == tr( "Select..." ) ) + if ( layerProperty.pkCols.size() > 1 ) pkItem->setFlags( pkItem->flags() | Qt::ItemIsEditable ); + else + pkItem->setFlags( pkItem->flags() & ~Qt::ItemIsEditable ); pkItem->setData( layerProperty.pkCols, Qt::UserRole + 1 ); pkItem->setData( pkCol, Qt::UserRole + 2 ); @@ -313,11 +317,11 @@ bool QgsPgTableModel::setData( const QModelIndex &idx, const QVariant &value, in bool ok = geomType != QGis::UnknownGeometry; - if ( geomType != QGis::NoGeometry ) + if ( ok && geomType != QGis::NoGeometry ) idx.sibling( idx.row(), dbtmSrid ).data().toInt( &ok ); QStringList pkCols = idx.sibling( idx.row(), dbtmPkCol ).data( Qt::UserRole + 1 ).toStringList(); - if ( pkCols.size() > 0 ) + if ( ok && pkCols.size() > 0 ) ok = pkCols.contains( idx.sibling( idx.row(), dbtmPkCol ).data().toString() ); for ( int i = 0; i < dbtmColumns; i++ ) diff --git a/src/providers/postgres/qgspostgresprovider.cpp b/src/providers/postgres/qgspostgresprovider.cpp index 774df16e35cc..3cae9b7f9b08 100644 --- a/src/providers/postgres/qgspostgresprovider.cpp +++ b/src/providers/postgres/qgspostgresprovider.cpp @@ -1056,16 +1056,15 @@ bool QgsPostgresProvider::loadFields() fieldSize = -1; fieldPrec = 0; } - else if ( fieldTypeName.startsWith( "int" ) || - fieldTypeName == "serial" ) + else if ( fieldTypeName == "int2" || fieldTypeName == "int4" || + fieldTypeName == "oid" || fieldTypeName == "serial" ) { fieldType = QVariant::Int; fieldSize = -1; fieldPrec = 0; } - else if ( fieldTypeName == "real" || - fieldTypeName == "double precision" || - fieldTypeName.startsWith( "float" ) ) + else if ( fieldTypeName == "real" || fieldTypeName == "double precision" || + fieldTypeName == "float4" || fieldTypeName == "float8" ) { fieldType = QVariant::Double; fieldSize = -1;