Skip to content

Commit c0e8178

Browse files
committedMay 11, 2020
[processing] port SpatiaLite Execute SQL algorithm to C++
1 parent e91b6c6 commit c0e8178

File tree

6 files changed

+153
-90
lines changed

6 files changed

+153
-90
lines changed
 

‎python/plugins/processing/algs/qgis/QgisAlgorithmProvider.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@
8282
from .SetRasterStyle import SetRasterStyle
8383
from .SetVectorStyle import SetVectorStyle
8484
from .SnapGeometries import SnapGeometriesToLayer
85-
from .SpatialiteExecuteSQL import SpatialiteExecuteSQL
8685
from .SpatialJoinSummary import SpatialJoinSummary
8786
from .StatisticsByCategories import StatisticsByCategories
8887
from .TextToFloat import TextToFloat
@@ -161,7 +160,6 @@ def getAlgs(self):
161160
SetRasterStyle(),
162161
SetVectorStyle(),
163162
SnapGeometriesToLayer(),
164-
SpatialiteExecuteSQL(),
165163
SpatialJoinSummary(),
166164
StatisticsByCategories(),
167165
TextToFloat(),

‎python/plugins/processing/algs/qgis/SpatialiteExecuteSQL.py

Lines changed: 0 additions & 88 deletions
This file was deleted.

‎src/analysis/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ SET(QGIS_ANALYSIS_SRCS
5151
processing/qgsalgorithmdropgeometry.cpp
5252
processing/qgsalgorithmdropmzvalues.cpp
5353
processing/qgsalgorithmexecutepostgisquery.cpp
54+
processing/qgsalgorithmexecutespatialitequery.cpp
5455
processing/qgsalgorithmexplode.cpp
5556
processing/qgsalgorithmexplodehstore.cpp
5657
processing/qgsalgorithmextendlines.cpp
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
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+
18+
#include "qgsalgorithmexecutespatialitequery.h"
19+
#include "qgsproviderregistry.h"
20+
#include "qgsprovidermetadata.h"
21+
#include "qgsabstractdatabaseproviderconnection.h"
22+
23+
///@cond PRIVATE
24+
25+
QString QgsExecuteSpatialiteQueryAlgorithm::name() const
26+
{
27+
return QStringLiteral( "spatialiteexecutesql" );
28+
}
29+
30+
QString QgsExecuteSpatialiteQueryAlgorithm::displayName() const
31+
{
32+
return QObject::tr( "SpatiaLite execute SQL" );
33+
}
34+
35+
QStringList QgsExecuteSpatialiteQueryAlgorithm::tags() const
36+
{
37+
return QObject::tr( "database,sql,spatialite,execute" ).split( ',' );
38+
}
39+
40+
QString QgsExecuteSpatialiteQueryAlgorithm::group() const
41+
{
42+
return QObject::tr( "Database" );
43+
}
44+
45+
QString QgsExecuteSpatialiteQueryAlgorithm::groupId() const
46+
{
47+
return QStringLiteral( "database" );
48+
}
49+
50+
QString QgsExecuteSpatialiteQueryAlgorithm::shortHelpString() const
51+
{
52+
return QObject::tr( "Executes a SQL command on a SpatiaLite database." );
53+
}
54+
55+
QgsExecuteSpatialiteQueryAlgorithm *QgsExecuteSpatialiteQueryAlgorithm::createInstance() const
56+
{
57+
return new QgsExecuteSpatialiteQueryAlgorithm();
58+
}
59+
60+
void QgsExecuteSpatialiteQueryAlgorithm::initAlgorithm( const QVariantMap & )
61+
{
62+
addParameter( new QgsProcessingParameterProviderConnection( QStringLiteral( "DATABASE" ), QObject::tr( "Database (connection name)" ), QStringLiteral( "spatialite" ) ) );
63+
addParameter( new QgsProcessingParameterString( QStringLiteral( "SQL" ), QObject::tr( "SQL query" ), QVariant(), true ) );
64+
}
65+
66+
QVariantMap QgsExecuteSpatialiteQueryAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
67+
{
68+
Q_UNUSED( feedback );
69+
70+
QString connName = parameterAsConnectionName( parameters, QStringLiteral( "DATABASE" ), context );
71+
72+
std::unique_ptr<QgsAbstractDatabaseProviderConnection> conn;
73+
try
74+
{
75+
std::unique_ptr<QgsProviderMetadata> md( QgsProviderRegistry::instance()->providerMetadata( QStringLiteral( "spatialite" ) ) );
76+
conn.reset( static_cast<QgsAbstractDatabaseProviderConnection *>( md->createConnection( connName ) ) );
77+
}
78+
catch ( QgsProviderConnectionException & )
79+
{
80+
throw QgsProcessingException( QObject::tr( "Could not retrieve connection details for %1" ).arg( connName ) );
81+
}
82+
83+
QString sql = parameterAsString( parameters, QStringLiteral( "SQL" ), context ).replace( '\n', ' ' );
84+
try
85+
{
86+
conn->executeSql( sql );
87+
}
88+
catch ( QgsProviderConnectionException &ex )
89+
{
90+
throw QgsProcessingException( QObject::tr( "Error executing SQL:\n%1" ).arg( ex.what() ) );
91+
}
92+
93+
return QVariantMap();
94+
}
95+
96+
///@endcond
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/***************************************************************************
2+
qgsalgorithmexecutespatialitequery.h
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+
18+
#ifndef QGSALGORITHMEXECUTESPATIALITEQUERY_H
19+
#define QGSALGORITHMEXECUTESPATIALITEQUERY_H
20+
21+
#define SIP_NO_FILE
22+
23+
#include "qgis_sip.h"
24+
#include "qgsprocessingalgorithm.h"
25+
26+
///@cond PRIVATE
27+
28+
/**
29+
* Native execute PostGIS query algorithm.
30+
*/
31+
class QgsExecuteSpatialiteQueryAlgorithm : public QgsProcessingAlgorithm
32+
{
33+
34+
public:
35+
36+
QgsExecuteSpatialiteQueryAlgorithm() = default;
37+
void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
38+
QString name() const override;
39+
QString displayName() const override;
40+
QStringList tags() const override;
41+
QString group() const override;
42+
QString groupId() const override;
43+
QString shortHelpString() const override;
44+
QgsExecuteSpatialiteQueryAlgorithm *createInstance() const override SIP_FACTORY;
45+
46+
protected:
47+
48+
QVariantMap processAlgorithm( const QVariantMap &parameters,
49+
QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
50+
};
51+
52+
///@endcond PRIVATE
53+
54+
#endif // QGSALGORITHMEXECUTESPATIALITEQUERY_H

‎src/analysis/processing/qgsnativealgorithms.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
#include "qgsalgorithmdropgeometry.h"
4747
#include "qgsalgorithmdropmzvalues.h"
4848
#include "qgsalgorithmexecutepostgisquery.h"
49+
#include "qgsalgorithmexecutespatialitequery.h"
4950
#include "qgsalgorithmexplode.h"
5051
#include "qgsalgorithmexplodehstore.h"
5152
#include "qgsalgorithmextendlines.h"
@@ -245,6 +246,7 @@ void QgsNativeAlgorithms::loadAlgorithms()
245246
addAlgorithm( new QgsDropGeometryAlgorithm() );
246247
addAlgorithm( new QgsDropMZValuesAlgorithm() );
247248
addAlgorithm( new QgsExecutePostgisQueryAlgorithm() );
249+
addAlgorithm( new QgsExecuteSpatialiteQueryAlgorithm() );
248250
addAlgorithm( new QgsExplodeAlgorithm() );
249251
addAlgorithm( new QgsExplodeHstoreAlgorithm() );
250252
addAlgorithm( new QgsExtendLinesAlgorithm() );

0 commit comments

Comments
 (0)
Please sign in to comment.