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