QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsalgorithmexecutepostgisquery.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsalgorithmexecutepostgisquery.cpp
3 ---------------------
4 begin : May 2020
5 copyright : (C) 2020 by Alexander Bruy
6 email : alexander dot bruy at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
19#include "qgsproviderregistry.h"
20#include "qgsprovidermetadata.h"
22
24
25QString QgsExecutePostgisQueryAlgorithm::name() const
26{
27 return QStringLiteral( "postgisexecutesql" );
28}
29
30QString QgsExecutePostgisQueryAlgorithm::displayName() const
31{
32 return QObject::tr( "PostgreSQL execute SQL" );
33}
34
35QStringList QgsExecutePostgisQueryAlgorithm::tags() const
36{
37 return QObject::tr( "database,sql,postgresql,postgis,execute" ).split( ',' );
38}
39
40QString QgsExecutePostgisQueryAlgorithm::group() const
41{
42 return QObject::tr( "Database" );
43}
44
45QString QgsExecutePostgisQueryAlgorithm::groupId() const
46{
47 return QStringLiteral( "database" );
48}
49
50QString QgsExecutePostgisQueryAlgorithm::shortHelpString() const
51{
52 return QObject::tr( "Executes a SQL command on a PostgreSQL database." );
53}
54
55QgsExecutePostgisQueryAlgorithm *QgsExecutePostgisQueryAlgorithm::createInstance() const
56{
57 return new QgsExecutePostgisQueryAlgorithm();
58}
59
60void QgsExecutePostgisQueryAlgorithm::initAlgorithm( const QVariantMap & )
61{
62 addParameter( new QgsProcessingParameterProviderConnection( QStringLiteral( "DATABASE" ), QObject::tr( "Database (connection name)" ), QStringLiteral( "postgres" ) ) );
63 addParameter( new QgsProcessingParameterString( QStringLiteral( "SQL" ), QObject::tr( "SQL query" ), QVariant(), true ) );
64}
65
66QVariantMap QgsExecutePostgisQueryAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
67{
68 Q_UNUSED( feedback );
69
70 const QString connName = parameterAsConnectionName( parameters, QStringLiteral( "DATABASE" ), context );
71
72 std::unique_ptr<QgsAbstractDatabaseProviderConnection> conn;
73 try
74 {
75 QgsProviderMetadata *md = QgsProviderRegistry::instance()->providerMetadata( QStringLiteral( "postgres" ) );
76 conn.reset( static_cast<QgsAbstractDatabaseProviderConnection *>( md->createConnection( connName ) ) );
77 }
79 {
80 throw QgsProcessingException( QObject::tr( "Could not retrieve connection details for %1" ).arg( connName ) );
81 }
82
83 const QString sql = parameterAsString( parameters, QStringLiteral( "SQL" ), context ).replace( '\n', ' ' );
84 try
85 {
86 conn->executeSql( sql );
87 }
89 {
90 throw QgsProcessingException( QObject::tr( "Error executing SQL:\n%1" ).arg( ex.what() ) );
91 }
92
93 return QVariantMap();
94}
95
The QgsAbstractDatabaseProviderConnection class provides common functionality for DB based connection...
QString what() const
Definition: qgsexception.h:49
Contains information about the context in which a processing algorithm is executed.
Custom exception class for processing related exceptions.
Definition: qgsexception.h:83
Base class for providing feedback from a processing algorithm.
A data provider connection parameter for processing algorithms, allowing users to select from availab...
A string parameter for processing algorithms.
Custom exception class for provider connection related exceptions.
Definition: qgsexception.h:101
Holds data provider key, description, and associated shared library file or function pointer informat...
virtual QgsAbstractProviderConnection * createConnection(const QString &uri, const QVariantMap &configuration)
Creates a new connection from uri and configuration, the newly created connection is not automaticall...
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
QgsProviderMetadata * providerMetadata(const QString &providerKey) const
Returns metadata of the provider or nullptr if not found.