Skip to content

Commit edb557b

Browse files
authored
Merge pull request #9668 from elpaso/bugfix-21714-filewriter-field-length-3_6_backport
Merge pull request #9661 from elpaso/bugfix-21714-filewriter-field-le…
2 parents adf15e7 + f04ee09 commit edb557b

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

src/core/qgsvectorfilewriter.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,7 @@ void QgsVectorFileWriter::init( QString vectorFileName,
542542
}
543543
case QVariant::String:
544544
ogrType = OFTString;
545-
if ( ogrWidth <= 0 || ogrWidth > 255 )
545+
if ( ( ogrWidth <= 0 || ogrWidth > 255 ) && mOgrDriverName == QLatin1String( "ESRI Shapefile" ) )
546546
ogrWidth = 255;
547547
break;
548548

tests/src/core/testqgsvectorfilewriter.cpp

+38
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ class TestQgsVectorFileWriter: public QObject
8282
void regression1141();
8383
//! Test prepareWriteAsVectorFormat
8484
void prepareWriteAsVectorFormat();
85+
//! Test regression #21714 (Exported GeoPackages have wrong field definitions)
86+
void testTextFieldLength();
8587

8688
private:
8789
// a little util fn used by all tests
@@ -491,5 +493,41 @@ void TestQgsVectorFileWriter::prepareWriteAsVectorFormat()
491493
QCOMPARE( details.providerUriParams.value( "path" ).toString(), fileName );
492494
}
493495

496+
void TestQgsVectorFileWriter::testTextFieldLength()
497+
{
498+
QTemporaryFile tmpFile( QDir::tempPath() + "/test_qgsvectorfilewriter2_XXXXXX.gpkg" );
499+
tmpFile.open();
500+
QString fileName( tmpFile.fileName( ) );
501+
QgsVectorLayer vl( "Point?field=firstfield:string(1024)", "test", "memory" );
502+
QCOMPARE( vl.fields().at( 0 ).length(), 1024 );
503+
QgsVectorFileWriter w( fileName,
504+
QStringLiteral( "UTF-8" ),
505+
vl.fields(),
506+
QgsWkbTypes::Point,
507+
vl.crs() );
508+
QgsFeature f { vl.fields() };
509+
f.setAttribute( 0, QString( 1024, 'x' ) );
510+
f.setGeometry( QgsGeometry::fromWkt( QStringLiteral( "point(9 45)" ) ) );
511+
QVERIFY( vl.startEditing() );
512+
QVERIFY( vl.addFeature( f ) );
513+
QgsVectorFileWriter::SaveVectorOptions options;
514+
options.driverName = "GPKG";
515+
options.layerName = "test";
516+
QString errorMessage;
517+
QgsVectorFileWriter::WriterError error( QgsVectorFileWriter::writeAsVectorFormat(
518+
&vl,
519+
fileName,
520+
options,
521+
&errorMessage ) );
522+
QCOMPARE( error, QgsVectorFileWriter::WriterError::NoError );
523+
QCOMPARE( errorMessage, fileName );
524+
QgsVectorLayer vl2( QStringLiteral( "%1|layername=test" ).arg( fileName ), "src_test", "ogr" );
525+
QVERIFY( vl2.isValid() );
526+
QCOMPARE( vl2.featureCount(), 1L );
527+
QCOMPARE( vl2.fields().at( 1 ).length(), 1024 );
528+
QCOMPARE( vl2.getFeature( 1 ).attribute( 1 ).toString(), QString( 1024, 'x' ) );
529+
530+
}
531+
494532
QGSTEST_MAIN( TestQgsVectorFileWriter )
495533
#include "testqgsvectorfilewriter.moc"

0 commit comments

Comments
 (0)