@@ -82,6 +82,8 @@ class TestQgsVectorFileWriter: public QObject
82
82
void regression1141 ();
83
83
// ! Test prepareWriteAsVectorFormat
84
84
void prepareWriteAsVectorFormat ();
85
+ // ! Test regression #21714 (Exported GeoPackages have wrong field definitions)
86
+ void testTextFieldLength ();
85
87
86
88
private:
87
89
// a little util fn used by all tests
@@ -491,5 +493,41 @@ void TestQgsVectorFileWriter::prepareWriteAsVectorFormat()
491
493
QCOMPARE ( details.providerUriParams .value ( " path" ).toString (), fileName );
492
494
}
493
495
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
+
494
532
QGSTEST_MAIN ( TestQgsVectorFileWriter )
495
533
#include " testqgsvectorfilewriter.moc"
0 commit comments