Index: src/providers/ogr/qgsogrprovider.cpp =================================================================== --- src/providers/ogr/qgsogrprovider.cpp (revision 9748) +++ src/providers/ogr/qgsogrprovider.cpp (working copy) @@ -189,7 +189,7 @@ case OFTReal: varType = QVariant::Double; break; // unsupported in OGR 1.3 //case OFTDateTime: varType = QVariant::DateTime; break; -#if GDAL_VERSION_NUM >= 1400 +#if defined(GDAL_VERSION_NUM) && GDAL_VERSION_NUM >= 1400 case OFTString: varType = QVariant::String; break; #endif default: varType = QVariant::String; // other unsupported, leave it as a string @@ -578,31 +578,31 @@ for ( QgsNewAttributesMap::const_iterator iter = attributes.begin(); iter != attributes.end(); ++iter ) { - OGRFieldDefnH fielddefn = - OGR_Fld_Create( mEncoding->fromUnicode( iter.key() ).data(), OFTInteger ); + OGRFieldDefnH fielddefn = OGR_Fld_Create( mEncoding->fromUnicode( iter.key() ).data(), OFTInteger ); - if ( *iter == "OFTInteger" ) + if ( *iter == "Integer" ) { OGR_Fld_SetType( fielddefn, OFTInteger ); + OGR_Fld_SetWidth( fielddefn, 10 ); } - else if ( *iter == "OFTReal" ) + else if ( *iter == "Real" ) { OGR_Fld_SetType( fielddefn, OFTReal ); } - else if ( *iter == "OFTString" ) + else if ( *iter == "String" ) { OGR_Fld_SetType( fielddefn, OFTString ); } else { - QgsLogger::warning( "QgsOgrProvider::addAttributes, type not found" ); + QgsLogger::warning( QString("QgsOgrProvider::addAttributes, type %1 not found").arg(*iter) ); returnvalue = false; continue; } if ( OGR_L_CreateField( ogrLayer, fielddefn, TRUE ) != OGRERR_NONE ) { - QgsLogger::warning( "QgsOgrProvider.cpp: writing of OFTInteger field failed" ); + QgsLogger::warning( "QgsOgrProvider.cpp: writing of field failed" ); returnvalue = false; } OGR_Fld_Destroy( fielddefn ); @@ -857,9 +857,17 @@ { // Ideally this should test for Shapefile type and GDAL >= 1.2.6 // In reality, createSpatialIndex() looks after itself. - ability |= QgsVectorDataProvider::CreateSpatialIndex; + ability |= CreateSpatialIndex; } +#if defined(GDAL_VERSION_NUM) && GDAL_VERSION_NUM >= 1600 + // adding attributes was added in GDAL 1.6 + if ( ogrDriverName.startsWith( "ESRI" ) ) + { + ability |= AddAttributes; + } +#endif + // OGR doesn't handle shapefiles without attributes, ie. missing DBFs well, fixes #803 if ( ogrDriverName.startsWith( "ESRI" ) && mAttributeFields.size() == 0 ) { @@ -1221,7 +1229,7 @@ OGR_DS_Destroy( dataSource ); QgsDebugMsg( QString( "GDAL Version number %1" ).arg( GDAL_VERSION_NUM ) ); -#if GDAL_VERSION_NUM >= 1310 +#if defined(GDAL_VERSION_NUM) && GDAL_VERSION_NUM >= 1310 if ( reference ) { OSRRelease( reference );