[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