mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-16 00:03:12 -04:00
[ogr] Fix cannot create layers for geopackage datasets when
the database does not yet exist
This commit is contained in:
parent
8775aff71b
commit
abcdd48580
@ -282,14 +282,14 @@ QgsVectorLayerExporter::ExportError QgsOgrProvider::createEmptyLayer( const QStr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
action = QgsVectorFileWriter::CreateOrOverwriteLayer;
|
if ( QFileInfo::exists( uri ) )
|
||||||
|
action = QgsVectorFileWriter::CreateOrOverwriteLayer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !overwrite && !update )
|
if ( !overwrite && !update )
|
||||||
{
|
{
|
||||||
QFileInfo fi( uri );
|
if ( QFileInfo::exists( uri ) )
|
||||||
if ( fi.exists() )
|
|
||||||
{
|
{
|
||||||
if ( errorMessage )
|
if ( errorMessage )
|
||||||
*errorMessage += QObject::tr( "Unable to create the datasource. %1 exists and overwrite flag is false." )
|
*errorMessage += QObject::tr( "Unable to create the datasource. %1 exists and overwrite flag is false." )
|
||||||
|
@ -20,10 +20,19 @@ import time
|
|||||||
|
|
||||||
import qgis # NOQA
|
import qgis # NOQA
|
||||||
from osgeo import gdal, ogr
|
from osgeo import gdal, ogr
|
||||||
from qgis.core import (QgsFeature, QgsFieldConstraints, QgsGeometry,
|
from qgis.core import (QgsFeature,
|
||||||
QgsRectangle, QgsSettings, QgsVectorLayer,
|
QgsCoordinateReferenceSystem,
|
||||||
QgsVectorLayerExporter, QgsPointXY)
|
QgsFields,
|
||||||
from qgis.PyQt.QtCore import QCoreApplication
|
QgsField,
|
||||||
|
QgsFieldConstraints,
|
||||||
|
QgsGeometry,
|
||||||
|
QgsRectangle,
|
||||||
|
QgsSettings,
|
||||||
|
QgsVectorLayer,
|
||||||
|
QgsVectorLayerExporter,
|
||||||
|
QgsPointXY,
|
||||||
|
QgsWkbTypes)
|
||||||
|
from qgis.PyQt.QtCore import QCoreApplication, QVariant
|
||||||
from qgis.testing import start_app, unittest
|
from qgis.testing import start_app, unittest
|
||||||
|
|
||||||
|
|
||||||
@ -469,6 +478,32 @@ class TestPyQgsOGRProviderGpkg(unittest.TestCase):
|
|||||||
self.assertEqual(f['f1'], 3)
|
self.assertEqual(f['f1'], 3)
|
||||||
features = None
|
features = None
|
||||||
|
|
||||||
|
def testExportLayerToExistingDatabase(self):
|
||||||
|
fields = QgsFields()
|
||||||
|
fields.append(QgsField('f1', QVariant.Int))
|
||||||
|
tmpfile = os.path.join(self.basetestpath, 'testCreateNewGeopackage.gpkg')
|
||||||
|
options = {}
|
||||||
|
options['update'] = True
|
||||||
|
options['driverName'] = 'GPKG'
|
||||||
|
options['layerName'] = 'table1'
|
||||||
|
exporter = QgsVectorLayerExporter(tmpfile, "ogr", fields, QgsWkbTypes.Polygon, QgsCoordinateReferenceSystem(3111), False, options)
|
||||||
|
self.assertFalse(exporter.errorCode(),
|
||||||
|
'unexpected export error {}: {}'.format(exporter.errorCode(), exporter.errorMessage()))
|
||||||
|
options['layerName'] = 'table2'
|
||||||
|
exporter = QgsVectorLayerExporter(tmpfile, "ogr", fields, QgsWkbTypes.Point, QgsCoordinateReferenceSystem(3113), False, options)
|
||||||
|
self.assertFalse(exporter.errorCode(),
|
||||||
|
'unexpected export error {} : {}'.format(exporter.errorCode(), exporter.errorMessage()))
|
||||||
|
del exporter
|
||||||
|
# make sure layers exist
|
||||||
|
lyr = QgsVectorLayer('{}|layername=table1'.format(tmpfile), "lyr1", "ogr")
|
||||||
|
self.assertTrue(lyr.isValid())
|
||||||
|
self.assertEqual(lyr.crs().authid(), 'EPSG:3111')
|
||||||
|
self.assertEqual(lyr.wkbType(), QgsWkbTypes.Polygon)
|
||||||
|
lyr2 = QgsVectorLayer('{}|layername=table2'.format(tmpfile), "lyr2", "ogr")
|
||||||
|
self.assertTrue(lyr2.isValid())
|
||||||
|
self.assertEqual(lyr2.crs().authid(), 'EPSG:3113')
|
||||||
|
self.assertEqual(lyr2.wkbType(), QgsWkbTypes.Point)
|
||||||
|
|
||||||
def testGeopackageTwoLayerEdition(self):
|
def testGeopackageTwoLayerEdition(self):
|
||||||
''' test https://issues.qgis.org/issues/17034 '''
|
''' test https://issues.qgis.org/issues/17034 '''
|
||||||
tmpfile = os.path.join(self.basetestpath, 'testGeopackageTwoLayerEdition.gpkg')
|
tmpfile = os.path.join(self.basetestpath, 'testGeopackageTwoLayerEdition.gpkg')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user