QGIS API Documentation  3.22.4-Białowieża (ce8e65e95e)
qgssqlcomposerdialog.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgssqlcomposerdialog.cpp
3  Dialog to compose SQL queries
4 
5 begin : Apr 2016
6 copyright : (C) 2016 Even Rouault
7 email : 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 #include "qgis_sip.h"
24 #include "qgsguiutils.h"
25 
26 #include <QPair>
27 #include <QStringList>
28 #include <QSet>
29 #include "qgis_gui.h"
31 
33 
34 class QgsVectorLayer;
35 
41 class GUI_EXPORT QgsSQLComposerDialog : public QgsSubsetStringEditorInterface, private Ui::QgsSQLComposerDialogBase
42 {
43  Q_OBJECT
44 
45  public:
46 
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() ) : name( nameIn ), type( typeIn ) {}
89  };
90 
92  struct Function
93  {
95  QString name;
97  QString returnType;
99  int minArgs = -1;
101  int maxArgs = -1;
103  QList<Argument> argumentList;
104 
106  Function( const QString &nameIn, int args ) : name( nameIn ), minArgs( args ), maxArgs( args ) {}
108  Function( const QString &nameIn, int minArgs, int maxArgsIn ) : name( nameIn ), minArgs( minArgs ), maxArgs( maxArgsIn ) {}
110  Function() = default;
111  };
112 
114  explicit QgsSQLComposerDialog( QWidget *parent = nullptr, Qt::WindowFlags fl = QgsGuiUtils::ModalDialogFlags );
115 
122  QgsSQLComposerDialog( QgsVectorLayer *layer, QWidget *parent = nullptr, Qt::WindowFlags fl = QgsGuiUtils::ModalDialogFlags );
123 
124  ~QgsSQLComposerDialog() override;
125 
127  void setSql( const QString &sql );
128 
130  QString sql() const;
131 
132  QString subsetString() const override { return sql(); }
133  void setSubsetString( const QString &subsetString ) override { setSql( subsetString ); }
134 
136  void addTableNames( const QStringList &list );
138  void addTableNames( const QList<PairNameTitle> &listNameTitle );
140  void addColumnNames( const QStringList &list, const QString &tableName );
142  void addColumnNames( const QList<PairNameType> &list, const QString &tableName );
144  void addOperators( const QStringList &list );
146  void addSpatialPredicates( const QStringList &list );
148  void addSpatialPredicates( const QList<Function> &list );
150  void addFunctions( const QStringList &list );
152  void addFunctions( const QList<Function> &list );
154  void addApis( const QStringList &list );
155 
157  void setSupportMultipleTables( bool bMultipleTables, const QString &mainTypename = QString() );
158 
164  void setTableSelectedCallback( TableSelectedCallback *tableSelectedCallback );
165 
170  void setSQLValidatorCallback( SQLValidatorCallback *sqlValidatorCallback );
171 
172  protected:
173  bool eventFilter( QObject *obj, QEvent *event ) override;
174 
175  private slots:
176  void accept() override;
177 
178  void mTablesCombo_currentIndexChanged( int );
179  void mColumnsCombo_currentIndexChanged( int );
180  void mSpatialPredicatesCombo_currentIndexChanged( int );
181  void mFunctionsCombo_currentIndexChanged( int );
182  void mOperatorsCombo_currentIndexChanged( int );
183  void mAddJoinButton_clicked();
184  void mRemoveJoinButton_clicked();
185  void mTableJoins_itemSelectionChanged();
186  void showHelp();
187  void reset();
188  void buildSQLFromFields();
189  void splitSQLIntoFields();
190 
191  private:
192  QgsVectorLayer *mLayer = nullptr;
193  QStringList mApiList;
194  QSet<QString> mAlreadySelectedTables;
195  TableSelectedCallback *mTableSelectedCallback = nullptr;
196  SQLValidatorCallback *mSQLValidatorCallback = nullptr;
197  QObject *mFocusedObject = nullptr;
198  bool mAlreadyModifyingFields = false;
199  bool mDistinct = false;
200  QString mResetSql;
201  QMap<QString, QString> mapTableEntryTextToName;
202  QMap<QString, QString> mapColumnEntryTextToName;
203  QMap<QString, QString> mapSpatialPredicateEntryTextToName;
204  QMap<QString, QString> mapFunctionEntryTextToName;
205  QString lastSearchedText;
206 
207 
208  void loadTableColumns( const QString &table );
209  void functionCurrentIndexChanged( QComboBox *combo,
210  const QMap<QString, QString> &mapEntryTextToName );
211  void getFunctionList( const QList<Function> &list,
212  QStringList &listApi,
213  QStringList &listCombo,
214  QMap<QString, QString> &mapEntryTextToName );
215 };
216 
217 #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
SQL composer dialog.
QString subsetString() const override
Returns the subset string entered in the dialog.
QPair< QString, QString > PairNameType
pair (name, type)
QPair< QString, QString > PairNameTitle
pair (name, title)
void setSubsetString(const QString &subsetString) override
Sets a subset string into the dialog.
Interface for a dialog that can edit subset strings.
Represents a vector layer which manages a vector based data sets.
#define SIP_NO_FILE
Argument(const QString &nameIn=QString(), const QString &typeIn=QString())
constructor
QString type
type, or empty if unknown
description of server functions
QString returnType
Returns type, or empty if unknown.
Function()=default
default constructor
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