QGIS API Documentation 3.99.0-Master (26c88405ac0)
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 ), type( typeIn ) {}
90 };
91
93 struct Function
94 {
96 QString name;
98 QString returnType;
100 int minArgs = -1;
102 int maxArgs = -1;
104 QList<Argument> argumentList;
105
107 Function( const QString &nameIn, int args )
108 : name( nameIn ), minArgs( args ), maxArgs( args ) {}
109
110 Function( const QString &nameIn, int minArgs, int maxArgsIn )
111 : name( nameIn ), minArgs( minArgs ), maxArgs( maxArgsIn ) {}
112
113 Function() = default;
114 };
115
117 explicit QgsSQLComposerDialog( QWidget *parent = nullptr, Qt::WindowFlags fl = QgsGuiUtils::ModalDialogFlags );
118
125 QgsSQLComposerDialog( QgsVectorLayer *layer, QWidget *parent = nullptr, Qt::WindowFlags fl = QgsGuiUtils::ModalDialogFlags );
126
127 ~QgsSQLComposerDialog() override;
128
130 void setSql( const QString &sql );
131
133 QString sql() const;
134
135 QString subsetString() const override { return sql(); }
136 void setSubsetString( const QString &subsetString ) override { setSql( subsetString ); }
137
139 void addTableNames( const QStringList &list );
141 void addTableNames( const QList<PairNameTitle> &listNameTitle );
143 void addColumnNames( const QStringList &list, const QString &tableName );
145 void addColumnNames( const QList<PairNameType> &list, const QString &tableName );
147 void addOperators( const QStringList &list );
149 void addSpatialPredicates( const QStringList &list );
151 void addSpatialPredicates( const QList<Function> &list );
153 void addFunctions( const QStringList &list );
155 void addFunctions( const QList<Function> &list );
157 void addApis( const QStringList &list );
158
160 void setSupportMultipleTables( bool bMultipleTables, const QString &mainTypename = QString() );
161
167 void setTableSelectedCallback( TableSelectedCallback *tableSelectedCallback );
168
173 void setSQLValidatorCallback( SQLValidatorCallback *sqlValidatorCallback );
174
175 protected:
176 bool eventFilter( QObject *obj, QEvent *event ) override;
177
178 private slots:
179 void accept() override;
180
181 void mTablesCombo_currentIndexChanged( int );
182 void mColumnsCombo_currentIndexChanged( int );
183 void mSpatialPredicatesCombo_currentIndexChanged( int );
184 void mFunctionsCombo_currentIndexChanged( int );
185 void mOperatorsCombo_currentIndexChanged( int );
186 void mAddJoinButton_clicked();
187 void mRemoveJoinButton_clicked();
188 void mTableJoins_itemSelectionChanged();
189 void showHelp();
190 void reset();
191 void buildSQLFromFields();
192 void splitSQLIntoFields();
193
194 private:
195 QgsVectorLayer *mLayer = nullptr;
196 QStringList mApiList;
197 QSet<QString> mAlreadySelectedTables;
198 TableSelectedCallback *mTableSelectedCallback = nullptr;
199 SQLValidatorCallback *mSQLValidatorCallback = nullptr;
200 QObject *mFocusedObject = nullptr;
201 bool mAlreadyModifyingFields = false;
202 bool mDistinct = false;
203 QString mResetSql;
204 QMap<QString, QString> mapTableEntryTextToName;
205 QMap<QString, QString> mapColumnEntryTextToName;
206 QMap<QString, QString> mapSpatialPredicateEntryTextToName;
207 QMap<QString, QString> mapFunctionEntryTextToName;
208 QString lastSearchedText;
209
210
211 void loadTableColumns( const QString &table );
212 void functionCurrentIndexChanged( QComboBox *combo, const QMap<QString, QString> &mapEntryTextToName );
213 void getFunctionList( const QList<Function> &list, QStringList &listApi, QStringList &listCombo, QMap<QString, QString> &mapEntryTextToName );
214};
215
216#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