|
32 | 32 | )
|
33 | 33 | from qgis.PyQt.QtCore import QDate, QTime, QDateTime, QVariant, QDir
|
34 | 34 | import os
|
| 35 | +import tempfile |
35 | 36 | import osgeo.gdal # NOQA
|
36 | 37 | from osgeo import gdal, ogr
|
37 | 38 | from qgis.testing import start_app, unittest
|
@@ -898,6 +899,46 @@ def testSupportsFeatureStyles(self):
|
898 | 899 | self.assertTrue(QgsVectorFileWriter.supportsFeatureStyles('MapInfo File'))
|
899 | 900 | self.assertTrue(QgsVectorFileWriter.supportsFeatureStyles('MapInfo MIF'))
|
900 | 901 |
|
| 902 | + def testOverwriteGPKG(self): |
| 903 | + """Test that overwriting the same origin GPKG file works only if the layername is different""" |
| 904 | + |
| 905 | + # Prepare test data |
| 906 | + ml = QgsVectorLayer('Point?field=firstfield:int&field=secondfield:int', 'test', 'memory') |
| 907 | + provider = ml.dataProvider() |
| 908 | + ft = QgsFeature() |
| 909 | + ft.setAttributes([4, -10]) |
| 910 | + provider.addFeatures([ft]) |
| 911 | + filehandle, filename = tempfile.mkstemp('.gpkg') |
| 912 | + |
| 913 | + options = QgsVectorFileWriter.SaveVectorOptions() |
| 914 | + options.driverName = 'GPKG' |
| 915 | + options.layerName = 'test' |
| 916 | + write_result, error_message = QgsVectorFileWriter.writeAsVectorFormat( |
| 917 | + ml, |
| 918 | + filename, |
| 919 | + options) |
| 920 | + self.assertEqual(write_result, QgsVectorFileWriter.NoError, error_message) |
| 921 | + |
| 922 | + # Real test |
| 923 | + vl = QgsVectorLayer("%s|layername=test" % filename, 'src_test', 'ogr') |
| 924 | + self.assertTrue(vl.isValid()) |
| 925 | + self.assertEqual(vl.featureCount(), 1) |
| 926 | + |
| 927 | + # This must fail |
| 928 | + write_result, error_message = QgsVectorFileWriter.writeAsVectorFormat( |
| 929 | + vl, |
| 930 | + filename, |
| 931 | + options) |
| 932 | + self.assertEqual(write_result, QgsVectorFileWriter.ErrCreateDataSource) |
| 933 | + self.assertEqual(error_message, 'Cannot overwrite a OGR layer in place') |
| 934 | + |
| 935 | + options.layerName = 'test2' |
| 936 | + write_result, error_message = QgsVectorFileWriter.writeAsVectorFormat( |
| 937 | + vl, |
| 938 | + filename, |
| 939 | + options) |
| 940 | + self.assertEqual(write_result, QgsVectorFileWriter.NoError, error_message) |
| 941 | + |
901 | 942 |
|
902 | 943 | if __name__ == '__main__':
|
903 | 944 | unittest.main()
|
0 commit comments