Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Merge pull request #46472 from qgis/backport-46469-to-release-3_22
[Backport release-3_22] [browser] Fix creation of new spatialite databases through browser
  • Loading branch information
lbartoletti committed Dec 14, 2021
2 parents f965c07 + 03a2c53 commit 1b0273d
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions src/providers/spatialite/qgsspatialitedataitemguiprovider.cpp
Expand Up @@ -27,6 +27,7 @@
#include "qgssettings.h"
#include "qgsvectorlayer.h"
#include "qgsvectorlayerexporter.h"
#include "qgsfileutils.h"

#include <QFileDialog>
#include <QMessageBox>
Expand Down Expand Up @@ -110,18 +111,25 @@ void QgsSpatiaLiteDataItemGuiProvider::createDatabase( QgsDataItem *item )
const QgsSettings settings;
const QString lastUsedDir = settings.value( QStringLiteral( "UI/lastSpatiaLiteDir" ), QDir::homePath() ).toString();

const QString filename = QFileDialog::getSaveFileName( nullptr, tr( "New SpatiaLite Database File" ),
lastUsedDir,
tr( "SpatiaLite" ) + " (*.sqlite *.db *.sqlite3 *.db3 *.s3db)" );
QString filename = QFileDialog::getSaveFileName( nullptr, tr( "New SpatiaLite Database File" ),
lastUsedDir,
tr( "SpatiaLite" ) + " (*.sqlite *.db *.sqlite3 *.db3 *.s3db)" );
if ( filename.isEmpty() )
return;

filename = QgsFileUtils::ensureFileNameHasExtension( filename, QStringList() << QStringLiteral( "sqlite" ) << QStringLiteral( "db" ) << QStringLiteral( "sqlite3" )
<< QStringLiteral( "db3" ) << QStringLiteral( "s3db" ) );

QString errCause;
if ( SpatiaLiteUtils::createDb( filename, errCause ) )
{
QgsProviderMetadata *providerMetadata = QgsProviderRegistry::instance()->providerMetadata( QStringLiteral( "spatialite" ) );
QgsSpatiaLiteProviderConnection *providerConnection = static_cast<QgsSpatiaLiteProviderConnection *>( providerMetadata->createConnection( filename ) );
providerMetadata->saveConnection( providerConnection, filename );
std::unique_ptr< QgsSpatiaLiteProviderConnection > providerConnection( qgis::down_cast<QgsSpatiaLiteProviderConnection *>( providerMetadata->createConnection( QStringLiteral( "dbname='%1'" ).arg( filename ), QVariantMap() ) ) );
if ( providerConnection )
{
const QFileInfo fi( filename );
providerMetadata->saveConnection( providerConnection.get(), fi.fileName() );
}

item->refresh();
}
Expand Down

0 comments on commit 1b0273d

Please sign in to comment.