diff --git a/python/plugins/processing/algs/qgis/ImportIntoSpatialite.py b/python/plugins/processing/algs/qgis/ImportIntoSpatialite.py index deb937a8a40..b2ec059c30a 100644 --- a/python/plugins/processing/algs/qgis/ImportIntoSpatialite.py +++ b/python/plugins/processing/algs/qgis/ImportIntoSpatialite.py @@ -32,10 +32,12 @@ from qgis.core import (QgsDataSourceUri, QgsProcessingParameterField, QgsProcessingParameterString, QgsProcessingParameterBoolean, - QgsWkbTypes) + QgsWkbTypes, + QgsProviderRegistry, + QgsProviderConnectionException, + QgsAbstractDatabaseProviderConnection) from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm -from processing.tools import spatialite class ImportIntoSpatialite(QgisAlgorithm): @@ -98,6 +100,7 @@ class ImportIntoSpatialite(QgisAlgorithm): def processAlgorithm(self, parameters, context, feedback): database = self.parameterAsVectorLayer(parameters, self.DATABASE, context) + databaseuri = database.dataProvider().dataSourceUri() uri = QgsDataSourceUri(databaseuri) if uri.database() is '': @@ -106,7 +109,12 @@ class ImportIntoSpatialite(QgisAlgorithm): elif '|layerid' in databaseuri: databaseuri = databaseuri[:databaseuri.find('|layerid')] uri = QgsDataSourceUri('dbname=\'%s\'' % (databaseuri)) - db = spatialite.GeoDB(uri) + + try: + md = QgsProviderRegistry.instance().providerMetadata('spatialite') + conn = md.createConnection(uri.uri(), {}) + except QgsProviderConnectionException: + raise QgsProcessingException(self.tr('Could not connect to {}').format(uri.uri())) overwrite = self.parameterAsBoolean(parameters, self.OVERWRITE, context) createIndex = self.parameterAsBoolean(parameters, self.CREATEINDEX, context) @@ -148,7 +156,6 @@ class ImportIntoSpatialite(QgisAlgorithm): if source.wkbType() == QgsWkbTypes.NoGeometry: geomColumn = None - uri = db.uri uri.setDataSource('', table, geomColumn, '', primaryKeyField) if encoding: @@ -178,6 +185,11 @@ class ImportIntoSpatialite(QgisAlgorithm): self.tr('Error importing to Spatialite\n{0}').format(exporter.errorMessage())) if geomColumn and createIndex: - db.create_spatial_index(table, geomColumn) + try: + options = QgsAbstractDatabaseProviderConnection.SpatialIndexOptions() + options.geometryColumnName = geomColumn + conn.createSpatialIndex('', table, options) + except QgsProviderConnectionException as e: + raise QgsProcessingException(self.tr('Error creating spatial index:\n{0}').format(e)) return {} diff --git a/python/plugins/processing/algs/qgis/SpatialiteExecuteSQL.py b/python/plugins/processing/algs/qgis/SpatialiteExecuteSQL.py index e775b46cc5f..f5e63c7a0bd 100644 --- a/python/plugins/processing/algs/qgis/SpatialiteExecuteSQL.py +++ b/python/plugins/processing/algs/qgis/SpatialiteExecuteSQL.py @@ -26,7 +26,9 @@ from qgis.core import (QgsDataSourceUri, QgsProcessingAlgorithm, QgsProcessingException, QgsProcessingParameterVectorLayer, - QgsProcessingParameterString) + QgsProcessingParameterString, + QgsProviderRegistry, + QgsProviderConnectionException) from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm from processing.tools import spatialite @@ -72,12 +74,17 @@ class SpatialiteExecuteSQL(QgisAlgorithm): elif '|layerid' in databaseuri: databaseuri = databaseuri[:databaseuri.find('|layerid')] uri = QgsDataSourceUri('dbname=\'%s\'' % (databaseuri)) - db = spatialite.GeoDB(uri) + + try: + md = QgsProviderRegistry.instance().providerMetadata('spatialite') + conn = md.createConnection(uri.uri(), {}) + except QgsProviderConnectionException: + raise QgsProcessingException(self.tr('Could not connect to {}').format(uri.uri())) + sql = self.parameterAsString(parameters, self.SQL, context).replace('\n', ' ') try: - db._exec_sql_and_commit(str(sql)) - except spatialite.DbError as e: - raise QgsProcessingException( - self.tr('Error executing SQL:\n{0}').format(str(e))) + conn.executeSql(sql) + except QgsProviderConnectionException as e: + raise QgsProcessingException(self.tr('Error executing SQL:\n{0}').format(e)) return {}