summaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.h
diff options
context:
space:
mode:
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.h')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.h67
1 files changed, 62 insertions, 5 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.h b/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.h
index 1f9d1f8..f29b651 100644
--- a/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.h
+++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/indexdialog.h
@@ -4,6 +4,7 @@
#include "db/db.h"
#include "guiSQLiteStudio_global.h"
#include "parser/ast/sqlitecreateindex.h"
+#include "common/strhash.h"
#include <QDialog>
#include <QStringListModel>
@@ -15,6 +16,7 @@ class QGridLayout;
class QSignalMapper;
class QCheckBox;
class QComboBox;
+class QTableWidget;
class GUI_API_EXPORT IndexDialog : public QDialog
{
@@ -31,15 +33,65 @@ class GUI_API_EXPORT IndexDialog : public QDialog
void changeEvent(QEvent *e);
private:
+ class Column
+ {
+ public:
+ Column(const QString& name, QTableWidget* table);
+ Column(SqliteExpr* expr, QTableWidget* table);
+ ~Column();
+
+ void assignToNewRow(int row);
+ void prepareForNewRow();
+ QCheckBox* getCheck() const;
+ void setCheck(QCheckBox* cb);
+ QWidget* getCheckParent() const;
+ void setCheckParent(QWidget* w);
+ QComboBox* getSort() const;
+ void setSort(QComboBox* cb);
+ QComboBox* getCollation() const;
+ void setCollation(QComboBox* cb);
+ bool hasCollation() const;
+
+ QString getName() const;
+ SqliteExpr* getExpr() const;
+ void setExpr(SqliteExpr* expr);
+ bool isExpr() const;
+ QString getKey() const;
+
+ private:
+ QWidget* defineContainer(QWidget* w);
+
+ QWidget* column1Contrainer = nullptr;
+ QWidget* column2Contrainer = nullptr;
+ QWidget* column3Contrainer = nullptr;
+ QWidget* checkParent = nullptr;
+ QCheckBox* check = nullptr;
+ QComboBox* sort = nullptr;
+ QComboBox* collation = nullptr;
+ QTableWidget* table = nullptr;
+ QString name;
+ SqliteExpr* expr = nullptr;
+ };
+
void init();
void readIndex();
void readCollations();
void buildColumn(const QString& name, int row);
+ Column* buildColumn(SqliteOrderBy* orderBy, int row);
+ Column* buildColumn(SqliteExpr* expr, int row);
+ void buildColumn(Column* column, int row);
void applyColumnValues();
void applyIndex();
- SqliteIndexedColumn* addIndexedColumn(const QString& name);
+ SqliteOrderBy* addIndexedColumn(const QString& name);
+ SqliteOrderBy* addIndexedColumn(SqliteExpr* expr);
+ void addCollation(SqliteOrderBy* col, const QString& name);
void rebuildCreateIndex();
void queryDuplicates();
+ void clearColumns();
+ void rebuildColumnsByNewOrder();
+ QString getKey(SqliteOrderBy* col) const;
+ QStringList getExistingColumnExprs(const QString& exceptThis = QString()) const;
+ QStringList getTableColumns() const;
bool existingIndex = false;
Db* db = nullptr;
@@ -50,9 +102,8 @@ class GUI_API_EXPORT IndexDialog : public QDialog
QStringList tableColumns;
QSignalMapper* columnStateSignalMapping = nullptr;
QStringListModel collations;
- QList<QCheckBox*> columnCheckBoxes;
- QList<QComboBox*> sortComboBoxes;
- QList<QComboBox*> collateComboBoxes;
+ StrHash<Column*> columns;
+ QList<Column*> columnsByRow;
int totalColumns = 0;
Ui::IndexDialog *ui = nullptr;
@@ -60,10 +111,16 @@ class GUI_API_EXPORT IndexDialog : public QDialog
void updateValidation();
void buildColumns();
void updateTable(const QString& value);
- void updateColumnState(int row);
+ void updateColumnState(const QString& columnKey);
void updatePartialConditionState();
void updateDdl();
void tabChanged(int tab);
+ void moveColumnUp();
+ void moveColumnDown();
+ void updateToolBarButtons(const QModelIndex& idx = QModelIndex());
+ void addExprColumn();
+ void editExprColumn(int row = -1);
+ void delExprColumn();
public slots:
void accept();