[QGIS Commit] r11464 - in trunk/qgis/src: core providers/ogr providers/postgres

svn_qgis at osgeo.org svn_qgis at osgeo.org
Fri Aug 21 09:32:42 EDT 2009


Author: jef
Date: 2009-08-21 09:32:42 -0400 (Fri, 21 Aug 2009)
New Revision: 11464

Modified:
   trunk/qgis/src/core/qgsvectorfilewriter.cpp
   trunk/qgis/src/providers/ogr/qgsogrprovider.cpp
   trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp
Log:
postgres & ogr provider update:
- postgres provider: report field width -1 for everything except strings (fixes #1131)
- in vector file writer, ogr provider choose field width:
  - 255 for strings, when given width is negative or larger.
    (was 80 in ogr provider and OGR determined-default for vector file writer).
  - 10 for integers, when given width is negative or larger.
  - 32 for reals, when given width is negative or larger.



Modified: trunk/qgis/src/core/qgsvectorfilewriter.cpp
===================================================================
--- trunk/qgis/src/core/qgsvectorfilewriter.cpp	2009-08-21 12:52:10 UTC (rev 11463)
+++ trunk/qgis/src/core/qgsvectorfilewriter.cpp	2009-08-21 13:32:42 UTC (rev 11464)
@@ -129,17 +129,19 @@
     {
       case QVariant::LongLong:
         ogrType = OFTString;
-        ogrWidth = ogrWidth <= 21 ? ogrWidth : 21;
+        ogrWidth = ogrWidth > 0 && ogrWidth <= 21 ? ogrWidth : 21;
         ogrPrecision = -1;
         break;
 
       case QVariant::String:
         ogrType = OFTString;
+        if ( ogrWidth < 0 || ogrWidth > 255 )
+          ogrWidth = 255;
         break;
 
       case QVariant::Int:
         ogrType = OFTInteger;
-        ogrWidth = ogrWidth <= 10 ? ogrWidth : 10;
+        ogrWidth = ogrWidth > 0 && ogrWidth <= 10 ? ogrWidth : 10;
         ogrPrecision = 0;
         break;
 
@@ -388,11 +390,11 @@
   // The 'CT-params' (e.g. +towgs84) does not get stripped in this way
   QRegExp regExp( ".shp$" );
   QString prjName = shapefileName;
-  prjName.replace( regExp, QString( "" ));
+  prjName.replace( regExp, QString( "" ) );
   prjName.append( QString( ".prj" ) );
   QFile prjFile( prjName );
 
-  if( !prjFile.open( QIODevice::WriteOnly ) )
+  if ( !prjFile.open( QIODevice::WriteOnly ) )
   {
     QgsDebugMsg( "Couldn't open file " + prjName );
     return NoError; // For now

Modified: trunk/qgis/src/providers/ogr/qgsogrprovider.cpp
===================================================================
--- trunk/qgis/src/providers/ogr/qgsogrprovider.cpp	2009-08-21 12:52:10 UTC (rev 11463)
+++ trunk/qgis/src/providers/ogr/qgsogrprovider.cpp	2009-08-21 13:32:42 UTC (rev 11464)
@@ -1458,9 +1458,9 @@
     OGRFieldDefnH field;
     if ( fields[0] == "Real" )
     {
-      if ( width == -1 )
+      if ( width < 0 )
         width = 32;
-      if ( precision == -1 )
+      if ( precision < 0 )
         precision = 3;
 
       field = OGR_Fld_Create( codec->fromUnicode( it->first ).data(), OFTReal );
@@ -1469,7 +1469,7 @@
     }
     else if ( fields[0] == "Integer" )
     {
-      if ( width == -1 || width > 10 )
+      if ( width < 0 || width > 10 )
         width = 10;
 
       field = OGR_Fld_Create( codec->fromUnicode( it->first ).data(), OFTInteger );
@@ -1478,8 +1478,8 @@
     }
     else if ( fields[0] == "String" )
     {
-      if ( width == -1 )
-        width = 80;
+      if ( width < 0 || width > 255 )
+        width = 255;
 
       field = OGR_Fld_Create( codec->fromUnicode( it->first ).data(), OFTString );
       OGR_Fld_SetWidth( field, width );

Modified: trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp
===================================================================
--- trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp	2009-08-21 12:52:10 UTC (rev 11463)
+++ trunk/qgis/src/providers/postgres/qgspostgresprovider.cpp	2009-08-21 13:32:42 UTC (rev 11464)
@@ -861,7 +861,7 @@
     QString fieldTypeName = QString::fromUtf8( PQgetvalue( oidResult, 0, 0 ) );
     QString fieldTType = QString::fromUtf8( PQgetvalue( oidResult, 0, 1 ) );
     QString fieldElem = QString::fromUtf8( PQgetvalue( oidResult, 0, 2 ) );
-    QString fieldSize = QString::fromUtf8( PQgetvalue( oidResult, 0, 3 ) );
+    int fieldSize = QString::fromUtf8( PQgetvalue( oidResult, 0, 3 ) ).toInt();
 
     sql = QString( "SELECT attnum FROM pg_attribute WHERE attrelid=%1 AND attname=%2" )
           .arg( tableoid ).arg( quotedValue( fieldName ) );
@@ -888,15 +888,24 @@
           fieldTypeName = fieldTypeName.mid( 1 );
 
         if ( fieldTypeName == "int8" )
+        {
           fieldType = QVariant::LongLong;
+          fieldSize = -1;
+        }
         else if ( fieldTypeName.startsWith( "int" ) ||
                   fieldTypeName == "serial" )
+        {
           fieldType = QVariant::Int;
+          fieldSize = -1;
+        }
         else if ( fieldTypeName == "real" ||
                   fieldTypeName == "double precision" ||
                   fieldTypeName.startsWith( "float" ) ||
                   fieldTypeName == "numeric" )
+        {
           fieldType = QVariant::Double;
+          fieldSize = -1;
+        }
         else if ( fieldTypeName == "text" ||
                   fieldTypeName == "char" ||
                   fieldTypeName == "bpchar" ||
@@ -906,7 +915,9 @@
                   fieldTypeName == "money" ||
                   fieldTypeName.startsWith( "time" ) ||
                   fieldTypeName.startsWith( "date" ) )
+        {
           fieldType = QVariant::String;
+        }
         else
         {
           QgsDebugMsg( "Field " + fieldName + " ignored, because of unsupported type " + fieldTypeName );
@@ -917,12 +928,14 @@
         {
           fieldTypeName = "_" + fieldTypeName;
           fieldType = QVariant::String;
+          fieldSize = -1;
         }
       }
       else if ( fieldTType == "e" )
       {
         // enum
         fieldType = QVariant::String;
+        fieldSize = -1;
       }
       else
       {
@@ -930,7 +943,7 @@
         continue;
       }
 
-      attributeFields.insert( i, QgsField( fieldName, fieldType, fieldTypeName, fieldSize.toInt(), fieldModifier, fieldComment ) );
+      attributeFields.insert( i, QgsField( fieldName, fieldType, fieldTypeName, fieldSize, fieldModifier, fieldComment ) );
     }
   }
 }



More information about the QGIS-commit mailing list