remove NoThreading flag and use decodeUri to retrieve path from the layer source

This commit is contained in:
Alexander Bruy 2025-07-14 15:40:46 +01:00
parent 9ef46c27f1
commit 7c5c281b47
2 changed files with 18 additions and 15 deletions

View File

@ -59,11 +59,6 @@ QString QgsExportToSpatialiteAlgorithm::shortDescription() const
return QObject::tr( "Exports a vector layer to a SpatiaLite database, creating a new table." ); return QObject::tr( "Exports a vector layer to a SpatiaLite database, creating a new table." );
} }
Qgis::ProcessingAlgorithmFlags QgsExportToSpatialiteAlgorithm::flags() const
{
return QgsProcessingAlgorithm::flags() | Qgis::ProcessingAlgorithmFlag::NoThreading;
}
QgsExportToSpatialiteAlgorithm *QgsExportToSpatialiteAlgorithm::createInstance() const QgsExportToSpatialiteAlgorithm *QgsExportToSpatialiteAlgorithm::createInstance() const
{ {
return new QgsExportToSpatialiteAlgorithm(); return new QgsExportToSpatialiteAlgorithm();
@ -84,23 +79,27 @@ void QgsExportToSpatialiteAlgorithm::initAlgorithm( const QVariantMap & )
addParameter( new QgsProcessingParameterBoolean( QStringLiteral( "FORCE_SINGLEPART" ), QObject::tr( "Create single-part geometries instead of multipart" ), false ) ); addParameter( new QgsProcessingParameterBoolean( QStringLiteral( "FORCE_SINGLEPART" ), QObject::tr( "Create single-part geometries instead of multipart" ), false ) );
} }
bool QgsExportToSpatialiteAlgorithm::prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback * )
{
QgsVectorLayer *layer = parameterAsVectorLayer( parameters, QStringLiteral( "DATABASE" ), context );
mProviderType = layer->providerType();
mDatabaseUri = layer->dataProvider()->dataSourceUri();
return true;
}
QVariantMap QgsExportToSpatialiteAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) QVariantMap QgsExportToSpatialiteAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
{ {
std::unique_ptr<QgsProcessingFeatureSource> source( parameterAsSource( parameters, QStringLiteral( "INPUT" ), context ) ); std::unique_ptr<QgsProcessingFeatureSource> source( parameterAsSource( parameters, QStringLiteral( "INPUT" ), context ) );
if ( !source ) if ( !source )
throw QgsProcessingException( invalidSourceError( parameters, QStringLiteral( "INPUT" ) ) ); throw QgsProcessingException( invalidSourceError( parameters, QStringLiteral( "INPUT" ) ) );
QgsVectorLayer *layer = parameterAsVectorLayer( parameters, QStringLiteral( "DATABASE" ), context ); QgsDataSourceUri uri( mDatabaseUri );
QString databaseUri = layer->dataProvider()->dataSourceUri();
QgsDataSourceUri uri( databaseUri );
if ( uri.database().isEmpty() ) if ( uri.database().isEmpty() )
{ {
if ( databaseUri.contains( QStringLiteral( "|layername" ), Qt::CaseInsensitive ) ) QgsProviderMetadata *md = QgsProviderRegistry::instance()->providerMetadata( mProviderType );
databaseUri = databaseUri.left( databaseUri.indexOf( QLatin1String( "|layername" ) ) ); const QVariantMap parts = md->decodeUri( mDatabaseUri );
else if ( databaseUri.contains( QStringLiteral( "|layerid" ), Qt::CaseInsensitive ) ) mDatabaseUri = parts.value( QStringLiteral( "path" ) ).toString();
databaseUri = databaseUri.left( databaseUri.indexOf( QLatin1String( "|layerid" ) ) ); uri = QgsDataSourceUri( QStringLiteral( "dbname='%1'" ).arg( mDatabaseUri ) );
uri = QgsDataSourceUri( QStringLiteral( "dbname='%1'" ).arg( databaseUri ) );
} }
std::unique_ptr<QgsAbstractDatabaseProviderConnection> conn; std::unique_ptr<QgsAbstractDatabaseProviderConnection> conn;

View File

@ -40,11 +40,15 @@ class QgsExportToSpatialiteAlgorithm : public QgsProcessingAlgorithm
QString groupId() const override; QString groupId() const override;
QString shortHelpString() const override; QString shortHelpString() const override;
QString shortDescription() const override; QString shortDescription() const override;
Qgis::ProcessingAlgorithmFlags flags() const override;
QgsExportToSpatialiteAlgorithm *createInstance() const override SIP_FACTORY; QgsExportToSpatialiteAlgorithm *createInstance() const override SIP_FACTORY;
protected: protected:
bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override; QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
private:
QString mProviderType;
QString mDatabaseUri;
}; };
///@endcond PRIVATE ///@endcond PRIVATE