16#ifndef QGSQUERYRESULTWIDGET_H
17#define QGSQUERYRESULTWIDGET_H
19#include "ui_qgsqueryresultpanelwidgetbase.h"
20#include "ui_qgsqueryresultwidgetbase.h"
31#include <QStyledItemDelegate>
34#include <QtConcurrent>
38class QgsQueryResultPanelWidget;
48class GUI_EXPORT QgsQueryResultItemDelegate :
public QStyledItemDelegate
54 explicit QgsQueryResultItemDelegate( QObject *parent =
nullptr );
56 QString displayText(
const QVariant &value,
const QLocale &locale )
const override;
63class GUI_EXPORT QgsConnectionsApiFetcher :
public QObject
69 QgsConnectionsApiFetcher(
const QString &uri,
const QString &providerKey )
71 , mProviderKey( providerKey )
83 void tokensReady(
const QStringList &newTokens );
86 void fetchingFinished();
91 QAtomicInt mStopFetching = 0;
92 std::unique_ptr<QgsFeedback> mFeedback;
114class GUI_EXPORT QgsQueryResultWidget :
public QWidget,
private Ui::QgsQueryResultWidgetBase
122 static const QgsSettingsEntryString *settingLastSourceFolder;
131 SqlQueryMode = 1 << 0,
132 QueryLayerUpdateMode = 1 << 1,
134 Q_ENUM( QueryWidgetMode )
139 QgsQueryResultWidget( QWidget *parent =
nullptr, QgsAbstractDatabaseProviderConnection *connection
SIP_TRANSFER =
nullptr );
141 ~QgsQueryResultWidget()
override;
146 void setSqlVectorLayerOptions(
const QgsAbstractDatabaseProviderConnection::SqlVectorLayerOptions &options );
151 void setWidgetMode( QueryWidgetMode widgetMode );
156 void setConnection( QgsAbstractDatabaseProviderConnection *connection
SIP_TRANSFER );
161 void setQuery(
const QString &sql );
163 SIP_SKIP bool promptUnsavedChanges();
181 void showError(
const QString &title,
const QString &message,
bool isSqlError =
false );
188 Q_DECL_DEPRECATED
void tokensReady(
const QStringList &tokens )
SIP_DEPRECATED;
202 void copyResults(
int fromRow,
int toRow,
int fromColumn,
int toColumn );
212 void createSqlVectorLayer(
const QString &providerKey,
const QString &connectionUri,
const QgsAbstractDatabaseProviderConnection::SqlVectorLayerOptions &options );
218 void firstResultBatchFetched();
220 SIP_SKIP void requestDialogTitleUpdate(
const QString &filename );
227 void updateButtons();
230 void saveQuery(
bool saveAs );
231 void setHasChanged(
bool hasChanged );
232 void populatePresetQueryMenu();
233 void showHistoryPanel(
bool show );
236 QgsQueryResultPanelWidget *mQueryWidget =
nullptr;
237 QPointer< QgsDatabaseQueryHistoryWidget > mHistoryWidget;
239 QMenu *mPresetQueryMenu =
nullptr;
241 bool mHasChangedFileContents =
false;
243 void updateDialogTitle();
246 friend class TestQgsQueryResultWidget;
262class GUI_EXPORT QgsQueryResultPanelWidget :
public QgsPanelWidget,
private Ui::QgsQueryResultPanelWidgetBase
270 QgsQueryResultPanelWidget( QWidget *parent =
nullptr, QgsAbstractDatabaseProviderConnection *connection
SIP_TRANSFER =
nullptr );
272 ~QgsQueryResultPanelWidget()
override;
277 QgsCodeEditorSQL *sqlEditor();
282 QgsCodeEditorWidget *codeEditorWidget();
287 void setSqlVectorLayerOptions(
const QgsAbstractDatabaseProviderConnection::SqlVectorLayerOptions &options );
292 void setWidgetMode( QgsQueryResultWidget::QueryWidgetMode widgetMode );
297 void setConnection( QgsAbstractDatabaseProviderConnection *connection
SIP_TRANSFER );
302 void setQuery(
const QString &sql );
320 void showError(
const QString &title,
const QString &message,
bool isSqlError =
false );
325 void tokensReady(
const QStringList &tokens );
339 void copyResults(
int fromRow,
int toRow,
int fromColumn,
int toColumn );
349 void createSqlVectorLayer(
const QString &providerKey,
const QString &connectionUri,
const QgsAbstractDatabaseProviderConnection::SqlVectorLayerOptions &options );
355 void firstResultBatchFetched();
362 void updateButtons();
364 void showCellContextMenu( QPoint point );
365 void copySelection();
368 QgsCodeEditorWidget *mCodeEditorWidget =
nullptr;
369 QgsCodeEditorSQL *mSqlEditor =
nullptr;
371 std::unique_ptr<QgsAbstractDatabaseProviderConnection> mConnection;
372 std::unique_ptr<QgsQueryResultModel> mModel;
373 std::unique_ptr<QgsFeedback> mFeedback;
375 QPointer<QgsConnectionsApiFetcher> mApiFetcher;
377 bool mWasCanceled =
false;
378 mutable QgsAbstractDatabaseProviderConnection::SqlVectorLayerOptions mSqlVectorLayerOptions;
379 bool mFirstRowFetched =
false;
380 QFutureWatcher<QgsAbstractDatabaseProviderConnection::QueryResult> mQueryResultWatcher;
381 QString mSqlErrorMessage;
382 long long mActualRowCount = -1;
383 long long mFetchedRowsBatchCount = 0;
384 QgsQueryResultWidget::QueryWidgetMode mQueryWidgetMode = QgsQueryResultWidget::QueryWidgetMode::SqlQueryMode;
385 long long mCurrentHistoryEntryId = -1;
390 void updateSqlLayerColumns();
395 void cancelRunningQuery();
400 void cancelApiFetcher();
405 void startFetching();
410 QgsAbstractDatabaseProviderConnection::SqlVectorLayerOptions sqlVectorLayerOptions()
const;
414 friend class TestQgsQueryResultWidget;
415 friend class QgsQueryResultWidget;
430class GUI_EXPORT QgsQueryResultDialog :
public QDialog
440 QgsQueryResultDialog( QgsAbstractDatabaseProviderConnection *connection
SIP_TRANSFER =
nullptr, QWidget *parent =
nullptr );
445 QgsQueryResultWidget *resultWidget() {
return mWidget; }
447 void closeEvent( QCloseEvent *event )
override;
450 QgsQueryResultWidget *mWidget =
nullptr;
464class GUI_EXPORT QgsQueryResultMainWindow :
public QMainWindow
474 QgsQueryResultMainWindow( QgsAbstractDatabaseProviderConnection *connection
SIP_TRANSFER =
nullptr,
const QString &identifierName = QString() );
479 QgsQueryResultWidget *resultWidget() {
return mWidget; }
481 void closeEvent( QCloseEvent *event )
override;
484 QgsQueryResultWidget *mWidget =
nullptr;
485 QString mIdentifierName;
487 void updateWindowTitle(
const QString &fileName );
MessageLevel
Level for messages This will be used both for message log and message bar in application.
@ Info
Information message.
QueryStorageBackend
Stored query storage backends.
A SQL editor based on QScintilla2.
Custom QgsHistoryWidget for use with the database query provider.
QgsSettingsTreeNode * createChildNode(const QString &key)
Creates a normal tree node It will return the existing child node if it exists at the given key.
static QgsSettingsTreeNode * sTreeGui
#define SIP_ENUM_BASETYPE(type)