diff options
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/constraints')
11 files changed, 406 insertions, 88 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp index 5759f76..bb70c81 100644 --- a/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columndefaultpanel.cpp @@ -152,7 +152,7 @@ void ColumnDefaultPanel::storeExpr(SqliteCreateTable::Column::Constraint* constr return; } - Parser parser(db->getDialect()); + Parser parser; SqliteExpr* newExpr = parser.parseExpr(text); newExpr->setParent(constraint.data()); constr->expr = newExpr; @@ -162,7 +162,7 @@ void ColumnDefaultPanel::storeLiteral(SqliteCreateTable::Column::Constraint* con { QString text = ui->exprEdit->toPlainText(); - Parser parser(db->getDialect()); + Parser parser; SqliteCreateTablePtr createTable = parser.parse<SqliteCreateTable>("CREATE TABLE tab (col DEFAULT "+text+");"); if (!createTable || createTable->columns.size() == 0 || createTable->columns.first()->constraints.size() == 0) { @@ -240,7 +240,7 @@ void ColumnDefaultPanel::readConstraint() } else if (!constr->id.isNull()) { - ui->exprEdit->setPlainText(wrapObjIfNeeded(constr->id, db->getDialect(), true)); + ui->exprEdit->setPlainText(wrapObjIfNeeded(constr->id, true)); currentMode = Mode::LITERAL; } else if (!constr->ctime.isNull()) @@ -265,7 +265,7 @@ void ColumnDefaultPanel::updateVirtualSql() { static QString sql = QStringLiteral("CREATE TABLE tab (col DEFAULT %1)"); ui->exprEdit->setDb(db); - ui->exprEdit->setVirtualSqlExpression(sql.arg(db->getDialect() == Dialect::Sqlite3 ? "(%1)" : "%1")); + ui->exprEdit->setVirtualSqlExpression(sql.arg("(%1)")); } QString ColumnDefaultPanel::getTempTable() diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp index af79331..ea5cb7d 100644 --- a/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columnforeignkeypanel.cpp @@ -227,7 +227,7 @@ void ColumnForeignKeyPanel::storeConfiguration() constr->foreignKey->initially = sqliteInitially(ui->initiallyCombo->currentText()); // Name - constr->name = QString::null; + constr->name = QString(); if (ui->namedCheckBox->isChecked()) constr->name = ui->nameEdit->text(); } diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.cpp new file mode 100644 index 0000000..308b868 --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.cpp @@ -0,0 +1,227 @@ +#include "columngeneratedpanel.h" +#include "ui_columngeneratedpanel.h" +#include "parser/parser.h" +#include "parser/keywords.h" +#include "parser/lexer.h" +#include "uiutils.h" +#include "schemaresolver.h" +#include <QDebug> + +ColumnGeneratedPanel::ColumnGeneratedPanel(QWidget *parent) : + ConstraintPanel(parent), + ui(new Ui::ColumnGeneratedPanel) +{ + ui->setupUi(this); + init(); +} + +ColumnGeneratedPanel::~ColumnGeneratedPanel() +{ + delete ui; +} + +void ColumnGeneratedPanel::changeEvent(QEvent *e) +{ + QWidget::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + ui->retranslateUi(this); + break; + default: + break; + } +} + + +bool ColumnGeneratedPanel::validate() +{ + if (!ui->exprEdit->isSyntaxChecked()) + { + setValidState(ui->exprEdit, false, tr("Enter the column value generating expression.")); + return false; + } + + // First check if we already validated this text. + // This method is called twice, by both errors checking and syntax highlighting, + // because signal for textChange() is connected with call to updateValidation(). + QString text = ui->exprEdit->toPlainText(); + if (!lastValidatedText.isNull() && lastValidatedText == text) + return lastValidationResult; + + lastValidatedText = text; + + bool nameOk = true; + if (ui->namedCheck->isChecked() && ui->namedEdit->text().isEmpty()) + nameOk = false; + + bool exprOk = !ui->exprEdit->toPlainText().trimmed().isEmpty() && + !ui->exprEdit->haveErrors(); + + QString exprError; + if (exprOk) + { + // Everything looks fine, so lets do the final check - if the value is correct for use as generated column expression in SQLite. + static QString tempDdlExprTpl = QStringLiteral("CREATE TEMP TABLE %1 (aaa, %2 GENERATED ALWAYS AS (%3));"); + static QString dropTempDdl = QStringLiteral("DROP TABLE %1;"); + + SqliteCreateTable::Column* columnStmt = dynamic_cast<SqliteCreateTable::Column*>(constraint->parentStatement()); + SqliteCreateTable* createTableStmt = dynamic_cast<SqliteCreateTable*>(columnStmt->parentStatement()); + + QStringList preparedColNames; + QString thisColumnName = columnStmt->name; + for (SqliteCreateTable::Column* column : createTableStmt->columns) + { + if (column->name == thisColumnName) + continue; + + preparedColNames << wrapObjIfNeeded(column->name); + } + preparedColNames << wrapObjIfNeeded(thisColumnName); + + QString tableName = getTempTable(); + QString tempDdl = tempDdlExprTpl.arg(tableName, preparedColNames.join(", "), ui->exprEdit->toPlainText()); + SqlQueryPtr res = db->exec(tempDdl); + if (res->isError()) + { + exprOk = false; + exprError = tr("Invalid value generating expression: %1.") + .arg(res->getErrorText()); + } + + db->exec(dropTempDdl.arg(tableName)); + } else + exprError = tr("Invalid value generating expression."); + + setValidState(ui->exprEdit, exprOk, exprError); + setValidState(ui->namedEdit, nameOk, tr("Enter a name of the constraint.")); + + lastValidationResult = (exprOk && nameOk); + return lastValidationResult; +} + +bool ColumnGeneratedPanel::validateOnly() +{ + ui->exprEdit->checkSyntaxNow(); + return validate(); +} + +void ColumnGeneratedPanel::constraintAvailable() +{ + if (constraint.isNull()) + return; + + readConstraint(); + updateVirtualSql(); + validateOnly(); +} + +void ColumnGeneratedPanel::storeConfiguration() +{ + if (constraint.isNull()) + return; + + SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data()); + constr->type = SqliteCreateTable::Column::Constraint::GENERATED; + storeExpr(constr); + + if (ui->typeCheck->isChecked()) + constr->generatedType = SqliteCreateTable::Column::Constraint::generatedTypeFrom(ui->typeCombo->currentText()); + else + constr->generatedType = SqliteCreateTable::Column::Constraint::GeneratedType::null; + + constr->generatedKw = ui->generatedKwCheck->isChecked(); + + if (ui->namedCheck->isChecked()) + constr->name = ui->namedEdit->text(); +} + +void ColumnGeneratedPanel::storeExpr(SqliteCreateTable::Column::Constraint* constr) +{ + QString text = ui->exprEdit->toPlainText(); + clear(constr); + + Parser parser; + SqliteExpr* newExpr = parser.parseExpr(text); + newExpr->setParent(constraint.data()); + constr->expr = newExpr; +} + +void ColumnGeneratedPanel::clear(SqliteCreateTable::Column::Constraint* constr) +{ + if (constr->expr) + { + delete constr->expr; + constr->expr = nullptr; + } + constr->generatedKw = false; + constr->generatedType = SqliteCreateTable::Column::Constraint::GeneratedType::null; +} + +void ColumnGeneratedPanel::init() +{ + setFocusProxy(ui->exprEdit); + ui->exprEdit->setShowLineNumbers(false); + + connect(ui->namedCheck, SIGNAL(toggled(bool)), this, SIGNAL(updateValidation())); + connect(ui->namedEdit, SIGNAL(textChanged(QString)), this, SIGNAL(updateValidation())); + connect(ui->exprEdit, SIGNAL(textChanged()), this, SIGNAL(updateValidation())); + connect(ui->exprEdit, SIGNAL(errorsChecked(bool)), this, SIGNAL(updateValidation())); + + connect(ui->namedCheck, SIGNAL(toggled(bool)), this, SLOT(updateState())); + connect(ui->typeCheck, SIGNAL(toggled(bool)), this, SLOT(updateState())); + + ui->typeCombo->addItems(getGeneratedColumnTypes()); + + updateState(); +} + +void ColumnGeneratedPanel::readConstraint() +{ + SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data()); + + constr->rebuildTokens(); + if (constr->expr) + ui->exprEdit->setPlainText(constr->expr->detokenize()); + + QString typeValue = SqliteCreateTable::Column::Constraint::toString(constr->generatedType); + switch (constr->generatedType) { + case SqliteCreateTable::Column::Constraint::GeneratedType::STORED: + ui->typeCheck->setChecked(true); + break; + case SqliteCreateTable::Column::Constraint::GeneratedType::VIRTUAL: + ui->typeCheck->setChecked(true); + break; + case SqliteCreateTable::Column::Constraint::GeneratedType::null: + ui->typeCheck->setChecked(false); + typeValue = SqliteCreateTable::Column::Constraint::toString(SqliteCreateTable::Column::Constraint::GeneratedType::VIRTUAL); + break; + } + ui->typeCombo->setCurrentText(typeValue); + + ui->generatedKwCheck->setChecked(constr->generatedKw); + + if (!constr->name.isNull()) + { + ui->namedCheck->setChecked(true); + ui->namedEdit->setText(constr->name); + } +} + +void ColumnGeneratedPanel::updateVirtualSql() +{ + static QString sql = QStringLiteral("CREATE TABLE tab (col GENERATED ALWAYS AS (%1))"); + ui->exprEdit->setDb(db); + ui->exprEdit->setVirtualSqlExpression(sql); +} + +QString ColumnGeneratedPanel::getTempTable() +{ + SchemaResolver resolver(db); + return resolver.getUniqueName("sqlitestudio_temp_table"); +} + +void ColumnGeneratedPanel::updateState() +{ + ui->namedEdit->setEnabled(ui->namedCheck->isChecked()); + ui->typeCombo->setEnabled(ui->typeCheck->isChecked()); +} diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.h b/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.h new file mode 100644 index 0000000..171dab8 --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.h @@ -0,0 +1,44 @@ +#ifndef COLUMNGENERATEDPANEL_H +#define COLUMNGENERATEDPANEL_H + +#include "constraintpanel.h" +#include "guiSQLiteStudio_global.h" +#include <QWidget> + +namespace Ui { + class ColumnGeneratedPanel; +} + +class GUI_API_EXPORT ColumnGeneratedPanel : public ConstraintPanel +{ + Q_OBJECT + + public: + explicit ColumnGeneratedPanel(QWidget *parent = 0); + ~ColumnGeneratedPanel(); + + bool validate(); + bool validateOnly(); + + protected: + void changeEvent(QEvent *e); + void constraintAvailable(); + void storeConfiguration(); + + private: + void init(); + void readConstraint(); + void updateVirtualSql(); + QString getTempTable(); + void storeExpr(SqliteCreateTable::Column::Constraint* constr); + void clear(SqliteCreateTable::Column::Constraint* constr); + + Ui::ColumnGeneratedPanel *ui = nullptr; + QString lastValidatedText; + bool lastValidationResult = false; + + private slots: + void updateState(); +}; + +#endif // COLUMNGENERATEDPANEL_H diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.ui new file mode 100644 index 0000000..3d0bcfc --- /dev/null +++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columngeneratedpanel.ui @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ColumnGeneratedPanel</class> + <widget class="QWidget" name="ColumnGeneratedPanel"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>400</width> + <height>263</height> + </rect> + </property> + <property name="windowTitle"> + <string notr="true">Form</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout"> + <item> + <widget class="QGroupBox" name="exprGroup"> + <property name="title"> + <string>Generating code:</string> + </property> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <item> + <widget class="SqlEditor" name="exprEdit"/> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QWidget" name="typeWidget" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout"> + <item> + <widget class="QCheckBox" name="typeCheck"> + <property name="text"> + <string>Explicit type:</string> + </property> + </widget> + </item> + <item> + <widget class="QComboBox" name="typeCombo"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QWidget" name="generatedKwWidget" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QCheckBox" name="generatedKwCheck"> + <property name="text"> + <string>Use "GENERATED ALWAYS" keywords</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <widget class="QWidget" name="namedWidget" native="true"> + <layout class="QHBoxLayout" name="horizontalLayout_2"> + <item> + <widget class="QCheckBox" name="namedCheck"> + <property name="text"> + <string>Named constraint:</string> + </property> + </widget> + </item> + <item> + <widget class="QLineEdit" name="namedEdit"/> + </item> + </layout> + </widget> + </item> + </layout> + </widget> + <customwidgets> + <customwidget> + <class>SqlEditor</class> + <extends>QPlainTextEdit</extends> + <header>sqleditor.h</header> + </customwidget> + </customwidgets> + <resources/> + <connections/> +</ui> diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp index f8975d8..fa7b7c3 100644 --- a/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/constraints/columnprimarykeypanel.cpp @@ -39,6 +39,9 @@ void ColumnPrimaryKeyPanel::init() connect(ui->namedCheck, SIGNAL(toggled(bool)), this, SIGNAL(updateValidation())); connect(ui->namedEdit, SIGNAL(textChanged(QString)), this, SIGNAL(updateValidation())); + connect(ui->sortOrderCheck, SIGNAL(toggled(bool)), this, SIGNAL(updateValidation())); + connect(ui->sortOrderCombo, SIGNAL(currentTextChanged(QString)), this, SIGNAL(updateValidation())); + connect(ui->autoIncrCheck, SIGNAL(toggled(bool)), this, SIGNAL(updateValidation())); connect(ui->sortOrderCheck, SIGNAL(toggled(bool)), this, SLOT(updateState())); connect(ui->namedCheck, SIGNAL(toggled(bool)), this, SLOT(updateState())); connect(ui->conflictCheck, SIGNAL(toggled(bool)), this, SLOT(updateState())); @@ -48,8 +51,7 @@ void ColumnPrimaryKeyPanel::init() void ColumnPrimaryKeyPanel::readConstraint() { SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data()); - if (constraint->dialect == Dialect::Sqlite3) - ui->autoIncrCheck->setChecked(constr->autoincrKw); + ui->autoIncrCheck->setChecked(constr->autoincrKw); if (constr->sortOrder != SqliteSortOrder::null) { @@ -77,7 +79,6 @@ void ColumnPrimaryKeyPanel::updateState() ui->conflictCombo->setEnabled(ui->conflictCheck->isChecked()); } - bool ColumnPrimaryKeyPanel::validate() { bool nameOk = true; @@ -86,7 +87,16 @@ bool ColumnPrimaryKeyPanel::validate() setValidState(ui->namedEdit, nameOk, tr("Enter a name of the constraint.")); - return nameOk; + bool sortOk = true; + if (ui->autoIncrCheck->isChecked() && ui->sortOrderCombo->isEnabled() && + ui->sortOrderCombo->currentText().toUpper() == "DESC") + { + sortOk = false; + } + + setValidState(ui->sortOrderCombo, sortOk, tr("Descending order is not allowed with AUTOINCREMENT.")); + + return nameOk && sortOk; } void ColumnPrimaryKeyPanel::constraintAvailable() @@ -94,8 +104,6 @@ void ColumnPrimaryKeyPanel::constraintAvailable() if (constraint.isNull()) return; - ui->autoIncrCheck->setVisible(constraint->dialect == Dialect::Sqlite3); - readConstraint(); } @@ -107,8 +115,7 @@ void ColumnPrimaryKeyPanel::storeConfiguration() SqliteCreateTable::Column::Constraint* constr = dynamic_cast<SqliteCreateTable::Column::Constraint*>(constraint.data()); constr->type = SqliteCreateTable::Column::Constraint::PRIMARY_KEY; - if (constraint->dialect == Dialect::Sqlite3) - constr->autoincrKw = ui->autoIncrCheck->isChecked(); + constr->autoincrKw = ui->autoIncrCheck->isChecked(); if (ui->sortOrderCheck->isChecked() && ui->sortOrderCombo->currentIndex() > -1) constr->sortOrder = sqliteSortOrder(ui->sortOrderCombo->currentText()); diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.cpp index adb5e2b..8a71777 100644 --- a/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintcheckpanel.cpp @@ -54,11 +54,8 @@ void ConstraintCheckPanel::constraintAvailable() if (constraint.isNull()) return; - if (constraint->dialect == Dialect::Sqlite3) - { - ui->onConflictCheck->setVisible(false); - ui->onConflictCombo->setVisible(false); - } + ui->onConflictCheck->setVisible(false); + ui->onConflictCombo->setVisible(false); readConstraint(); updateVirtualSql(); @@ -76,14 +73,11 @@ void ConstraintCheckPanel::storeConfiguration() newExpr->setParent(constraint.data()); storeExpr(newExpr); - QString name = QString::null; + QString name = QString(); if (ui->namedCheck->isChecked()) name = ui->namedEdit->text(); storeName(name); - - if (constraint->dialect == Dialect::Sqlite2 && ui->onConflictCheck->isChecked()) - storeConflictAlgo(sqliteConflictAlgo(ui->onConflictCombo->currentText())); } void ConstraintCheckPanel::init() @@ -116,13 +110,6 @@ void ConstraintCheckPanel::readConstraint() ui->namedCheck->setChecked(true); ui->namedEdit->setText(name); } - - SqliteConflictAlgo onConflict = readConflictAlgo(); - if (constraint->dialect == Dialect::Sqlite2 && onConflict != SqliteConflictAlgo::null) - { - ui->onConflictCheck->setChecked(true); - ui->onConflictCombo->setCurrentText(sqliteConflictAlgo(onConflict)); - } } void ConstraintCheckPanel::updateVirtualSql() @@ -157,7 +144,7 @@ void ConstraintCheckPanel::updateVirtualSql() SqliteExprPtr ConstraintCheckPanel::parseExpression(const QString& sql) { - Parser parser(db->getDialect()); + Parser parser; SqliteExpr *expr = parser.parseExpr(sql); return SqliteExprPtr(expr); } diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.cpp index 031fbfe..4f3e350 100644 --- a/SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/constraints/constraintpanel.cpp @@ -6,6 +6,7 @@ #include "constraints/tablecheckpanel.h" #include "constraints/columncheckpanel.h" #include "constraints/columncollatepanel.h" +#include "constraints/columngeneratedpanel.h" #include "constraints/columndefaultpanel.h" #include "constraints/columnforeignkeypanel.h" #include "constraints/columnnotnullpanel.h" @@ -81,6 +82,8 @@ ConstraintPanel* ConstraintPanel::produce(SqliteCreateTable::Column::Constraint* return new ColumnDefaultPanel(); case SqliteCreateTable::Column::Constraint::COLLATE: return new ColumnCollatePanel(); + case SqliteCreateTable::Column::Constraint::GENERATED: + return new ColumnGeneratedPanel(); case SqliteCreateTable::Column::Constraint::FOREIGN_KEY: return new ColumnForeignKeyPanel(); case SqliteCreateTable::Column::Constraint::NULL_: diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp index 8bc7926..cecf5f4 100644 --- a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.cpp @@ -72,7 +72,6 @@ bool TableForeignKeyPanel::validate() void TableForeignKeyPanel::setDb(Db* value) { ConstraintPanel::setDb(value); - ui->sqlite2Warn->setVisible(value->getDialect() == Dialect::Sqlite2); } void TableForeignKeyPanel::constraintAvailable() @@ -361,7 +360,7 @@ void TableForeignKeyPanel::storeConfiguration() constr->foreignKey->initially = sqliteInitially(ui->initiallyCombo->currentText()); // Name - constr->name = QString::null; + constr->name = QString(); if (ui->namedCheckBox->isChecked()) constr->name = ui->nameEdit->text(); } diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui index 7ecbe06..a0e38ec 100644 --- a/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui +++ b/SQLiteStudio3/guiSQLiteStudio/constraints/tableforeignkeypanel.ui @@ -37,26 +37,6 @@ </widget> </item> <item> - <widget class="QLabel" name="sqlite2Warn"> - <property name="font"> - <font> - <pointsize>8</pointsize> - <italic>true</italic> - </font> - </property> - <property name="text"> - <string>SQLite 2 does not support foreign keys officially, -but it's okay to use them anyway.</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - <property name="margin"> - <number>5</number> - </property> - </widget> - </item> - <item> <widget class="QGroupBox" name="columnsGroup"> <property name="title"> <string>Columns</string> @@ -110,8 +90,8 @@ but it's okay to use them anyway.</string> <rect> <x>0</x> <y>0</y> - <width>362</width> - <height>25</height> + <width>358</width> + <height>30</height> </rect> </property> </widget> diff --git a/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.cpp b/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.cpp index 7c1c359..65c4a34 100644 --- a/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/constraints/tablepkanduniquepanel.cpp @@ -78,7 +78,7 @@ void TablePrimaryKeyAndUniquePanel::buildColumn(SqliteCreateTable::Column* colum connect(check, SIGNAL(toggled(bool)), this, SIGNAL(updateValidation())); QComboBox* collation = nullptr; - if (!constraint.isNull() && constraint->dialect == Dialect::Sqlite3) + if (!constraint.isNull()) { collation = new QComboBox(); collation->setMaximumWidth(ui->colHdrCollation->width()); @@ -125,7 +125,7 @@ void TablePrimaryKeyAndUniquePanel::updateColumnState(int colIdx) item = columnsLayout->itemAtPosition(colIdx, 1)->widget(); qobject_cast<QComboBox*>(item)->setEnabled(enable); - if (!constraint.isNull() && constraint->dialect == Dialect::Sqlite3) + if (!constraint.isNull()) { item = columnsLayout->itemAtPosition(colIdx, 2)->widget(); qobject_cast<QComboBox*>(item)->setEnabled(enable); @@ -182,7 +182,7 @@ void TablePrimaryKeyAndUniquePanel::storeConfiguration() SqliteCreateTable::Constraint* constr = dynamic_cast<SqliteCreateTable::Constraint*>(constraint.data()); // Name - constr->name = QString::null; + constr->name = QString(); if (ui->namedCheckBox->isChecked()) constr->name = ui->namedLineEdit->text(); @@ -210,21 +210,13 @@ void TablePrimaryKeyAndUniquePanel::storeConfiguration() name = check->property(UI_PROP_COLUMN).toString(); - if (constr->dialect == Dialect::Sqlite3) - { - combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(i, 1)->widget()); - collate = combo->currentText(); - if (collate.isEmpty()) - collate = QString::null; + combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(i, 1)->widget()); + collate = combo->currentText(); + if (collate.isEmpty()) + collate = QString(); - combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(i, 2)->widget()); - sortOrder = sqliteSortOrder(combo->currentText()); - } - else - { - combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(i, 1)->widget()); - sortOrder = sqliteSortOrder(combo->currentText()); - } + combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(i, 2)->widget()); + sortOrder = sqliteSortOrder(combo->currentText()); idxCol = new SqliteIndexedColumn(name, collate, sortOrder); idxCol->setParent(constr); @@ -266,24 +258,11 @@ void TablePrimaryKeyAndUniquePanel::readConstraint() check = dynamic_cast<QCheckBox*>(columnsLayout->itemAtPosition(idx, 0)->widget()); check->setChecked(true); - if (constr->dialect == Dialect::Sqlite3) - { - combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(idx, 1)->widget()); - combo->setCurrentText(idxCol->collate); + combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(idx, 1)->widget()); + combo->setCurrentText(idxCol->collate); - combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(idx, 2)->widget()); - combo->setCurrentText(sqliteSortOrder(idxCol->sortOrder)); - } - else - { - combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(idx, 1)->widget()); - combo->setCurrentText(sqliteSortOrder(idxCol->sortOrder)); - } - } - - if (constr->dialect == Dialect::Sqlite2) - { - ui->colHdrCollation->setVisible(false); + combo = dynamic_cast<QComboBox*>(columnsLayout->itemAtPosition(idx, 2)->widget()); + combo->setCurrentText(sqliteSortOrder(idxCol->sortOrder)); } } |
