QGIS API Documentation 4.1.0-Master (5bf3c20f3c9)
Loading...
Searching...
No Matches
qgssqlcomposerdialog.h
Go to the documentation of this file.
1/***************************************************************************
2 qgssqlcomposerdialog.cpp
3 Dialog to compose SQL queries
4
5begin : Apr 2016
6copyright : (C) 2016 Even Rouault
7email : even.rouault at spatialys.com
8 ***************************************************************************/
9
10/***************************************************************************
11 * *
12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. *
16 * *
17 ***************************************************************************/
18
19#ifndef QGSSQLCOMPOSERDIALOG_H
20#define QGSSQLCOMPOSERDIALOG_H
21
22#include "ui_qgssqlcomposerdialogbase.h"
23
24#include "qgis_gui.h"
25#include "qgis_sip.h"
26#include "qgsguiutils.h"
28
29#include <QPair>
30#include <QSet>
31#include <QStringList>
32
34
35class QgsVectorLayer;
36
42class GUI_EXPORT QgsSQLComposerDialog : public QgsSubsetStringEditorInterface, private Ui::QgsSQLComposerDialogBase
43{
44 Q_OBJECT
45
46 public:
48 typedef QPair<QString, QString> PairNameTitle;
49
51 typedef QPair<QString, QString> PairNameType;
52
58 class GUI_EXPORT TableSelectedCallback
59 {
60 public:
61 virtual ~TableSelectedCallback() = default;
63 virtual void tableSelected( const QString &name ) = 0;
64 };
65
71 class GUI_EXPORT SQLValidatorCallback
72 {
73 public:
74 virtual ~SQLValidatorCallback() = default;
76 virtual bool isValid( const QString &sql, QString &errorReason, QString &warningMsg ) = 0;
77 };
78
80 struct Argument
81 {
83 QString name;
85 QString type;
86
88 Argument( const QString &nameIn = QString(), const QString &typeIn = QString() )
89 : name( nameIn )
90 , type( typeIn )
91 {}
92 };
93
95 struct Function
96 {
98 QString name;
100 QString returnType;
102 int minArgs = -1;
104 int maxArgs = -1;
106 QList<Argument> argumentList;
107
109 Function( const QString &nameIn, int args )
110 : name( nameIn )
111 , minArgs( args )
112 , maxArgs( args )
113 {}
114
115 Function( const QString &nameIn, int minArgs, int maxArgsIn )
116 : name( nameIn )
117 , minArgs( minArgs )
118 , maxArgs( maxArgsIn )
119 {}
120
121 Function() = default;
122 };
123
125 explicit QgsSQLComposerDialog( QWidget *parent = nullptr, Qt::WindowFlags fl = QgsGuiUtils::ModalDialogFlags );
126
133 QgsSQLComposerDialog( QgsVectorLayer *layer, QWidget *parent = nullptr, Qt::WindowFlags fl = QgsGuiUtils::ModalDialogFlags );
134
135 ~QgsSQLComposerDialog() override;
136
138 void setSql( const QString &sql );
139
141 QString sql() const;
142
143 QString subsetString() const override { return sql(); }
144 void setSubsetString( const QString &subsetString ) override { setSql( subsetString ); }
145
147 void addTableNames( const QStringList &list );
149 void addTableNames( const QList<PairNameTitle> &listNameTitle );
151 void addColumnNames( const QStringList &list, const QString &tableName );
153 void addColumnNames( const QList<PairNameType> &list, const QString &tableName );
155 void addOperators( const QStringList &list );
157 void addSpatialPredicates( const QStringList &list );
159 void addSpatialPredicates( const QList<Function> &list );
161 void addFunctions( const QStringList &list );
163 void addFunctions( const QList<Function> &list );
165 void addApis( const QStringList &list );
166
168 void setSupportMultipleTables( bool bMultipleTables, const QString &mainTypename = QString() );
169
175 void setTableSelectedCallback( TableSelectedCallback *tableSelectedCallback );
176
181 void setSQLValidatorCallback( SQLValidatorCallback *sqlValidatorCallback );
182
183 protected:
184 bool eventFilter( QObject *obj, QEvent *event ) override;
185
186 private slots:
187 void accept() override;
188
189 void mTablesCombo_currentIndexChanged( int );
190 void mColumnsCombo_currentIndexChanged( int );
191 void mSpatialPredicatesCombo_currentIndexChanged( int );
192 void mFunctionsCombo_currentIndexChanged( int );
193 void mOperatorsCombo_currentIndexChanged( int );
194 void mAddJoinButton_clicked();
195 void mRemoveJoinButton_clicked();
196 void mTableJoins_itemSelectionChanged();
197 void showHelp();
198 void reset();
199 void buildSQLFromFields();
200 void splitSQLIntoFields();
201
202 private:
203 QgsVectorLayer *mLayer = nullptr;
204 QStringList mApiList;
205 QSet<QString> mAlreadySelectedTables;
206 TableSelectedCallback *mTableSelectedCallback = nullptr;
207 SQLValidatorCallback *mSQLValidatorCallback = nullptr;
208 QObject *mFocusedObject = nullptr;
209 bool mAlreadyModifyingFields = false;
210 bool mDistinct = false;
211 QString mResetSql;
212 QMap<QString, QString> mapTableEntryTextToName;
213 QMap<QString, QString> mapColumnEntryTextToName;
214 QMap<QString, QString> mapSpatialPredicateEntryTextToName;
215 QMap<QString, QString> mapFunctionEntryTextToName;
216 QString lastSearchedText;
217
218
219 void loadTableColumns( const QString &table );
220 void functionCurrentIndexChanged( QComboBox *combo, const QMap<QString, QString> &mapEntryTextToName );
221 void getFunctionList( const QList<Function> &list, QStringList &listApi, QStringList &listCombo, QMap<QString, QString> &mapEntryTextToName );
222};
223
224#endif
Callback to do validation check on dialog validation.
virtual bool isValid(const QString &sql, QString &errorReason, QString &warningMsg)=0
method should return true if the SQL is valid. Otherwise return false and set the errorReason
Callback to do actions on table selection.
virtual void tableSelected(const QString &name)=0
method called when a table is selected
QgsSQLComposerDialog(QWidget *parent=nullptr, Qt::WindowFlags fl=QgsGuiUtils::ModalDialogFlags)
constructor
QString subsetString() const override
Returns the subset string entered in the dialog.
QPair< QString, QString > PairNameType
pair (name, type)
void setSql(const QString &sql)
initialize the SQL statement
QPair< QString, QString > PairNameTitle
pair (name, title)
QString sql() const
Gets the SQL statement.
void setSubsetString(const QString &subsetString) override
Sets a subset string into the dialog.
QgsSubsetStringEditorInterface(QWidget *parent=nullptr, Qt::WindowFlags fl=QgsGuiUtils::ModalDialogFlags)
Constructor.
Represents a vector layer which manages a vector based dataset.
#define SIP_NO_FILE
Argument(const QString &nameIn=QString(), const QString &typeIn=QString())
constructor
QString type
type, or empty if unknown
QString returnType
Returns type, or empty if unknown.
int maxArgs
maximum number of argument (or -1 if unknown)
int minArgs
minimum number of argument (or -1 if unknown)
Function(const QString &nameIn, int args)
constructor with name and fixed number of arguments
QList< Argument > argumentList
list of arguments. May be empty despite minArgs > 0
Function(const QString &nameIn, int minArgs, int maxArgsIn)
constructor with name and min,max number of arguments