diff options
| author | 2018-07-27 23:51:12 -0400 | |
|---|---|---|
| committer | 2018-07-27 23:51:12 -0400 | |
| commit | feda8a7db8d1d7c5439aa8f8feef7cc0dd2b59a0 (patch) | |
| tree | 1e50f5f666f419143f510d5ded00fe2006b7bd85 /SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp | |
| parent | d9aa870e5d509cc7309ab82dd102a937ab58613a (diff) | |
New upstream version 3.2.1+dfsg1upstream/3.2.1+dfsg1
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp index 14cb06b..8bf1698 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp @@ -37,7 +37,7 @@ void ColumnDialog::init() ui->precision->setStrict(true, true); ui->typeCombo->addItem(""); - foreach (DataType::Enum type, DataType::getAllTypes()) + for (DataType::Enum type : DataType::getAllTypes()) ui->typeCombo->addItem(DataType::toString(type)); connect(ui->typeCombo, SIGNAL(currentTextChanged(QString)), this, SLOT(updateDataType())); @@ -149,6 +149,7 @@ void ColumnDialog::addConstraint(ConstraintDialog::Constraint mode) constraintsModel->appendConstraint(constr); ui->constraintsView->resizeColumnToContents(0); ui->constraintsView->resizeColumnToContents(1); + updateTypeForAutoIncr(); } void ColumnDialog::setupConstraintCheckBoxes() @@ -218,6 +219,7 @@ void ColumnDialog::editConstraint(SqliteCreateTable::Column::Constraint* constra ui->constraintsView->resizeColumnToContents(0); ui->constraintsView->resizeColumnToContents(1); updateValidations(); + updateTypeForAutoIncr(); } void ColumnDialog::delConstraint(const QModelIndex& idx) @@ -384,6 +386,8 @@ void ColumnDialog::updateTypeValidations() { QString scaleErrorMsg = tr("Scale is not allowed for INTEGER PRIMARY KEY columns."); QString precisionErrorMsg = tr("Precision cannot be defined without the scale."); + QString typeErrorMsg = tr("Cannot use type other than INTEGER if AUTOINCREMENT is enabled in PRIMARY KEY."); + QString integerEnforcedMsg = tr("INTEGER type was enforced due to enabled AUTOINCREMENT in PRIMARY KEY."); QVariant scale = ui->scale->getValue(); QVariant precision = ui->precision->getValue(); @@ -393,6 +397,7 @@ void ColumnDialog::updateTypeValidations() bool precisionOk = !(precisionDefined && !scaleDefined); bool scaleOk = true; + bool typeOk = true; bool hasPk = column->getConstraint(SqliteCreateTable::Column::Constraint::PRIMARY_KEY) != nullptr; bool isInteger = ui->typeCombo->currentText().toUpper() == "INTEGER"; @@ -408,16 +413,48 @@ void ColumnDialog::updateTypeValidations() } } + if (!isInteger && hasAutoIncr()) + typeOk = false; + setValidState(ui->scale, scaleOk, scaleErrorMsg); setValidState(ui->precision, precisionOk, precisionErrorMsg); + setValidState(ui->typeCombo, typeOk, typeErrorMsg); + + if (typeOk && integerTypeEnforced) + setValidStateTooltip(ui->typeCombo, integerEnforcedMsg); - if (!scaleOk || !precisionOk) + if (!scaleOk || !precisionOk || !typeOk) { QPushButton* btn = ui->buttonBox->button(QDialogButtonBox::Ok); btn->setEnabled(false); } } +void ColumnDialog::updateTypeForAutoIncr() +{ + bool hasAuto = hasAutoIncr(); + if (hasAuto && ui->typeCombo->currentText().toUpper() != "INTEGER") + { + ui->typeCombo->setCurrentText("INTEGER"); + integerTypeEnforced = true; + } + else if (!hasAuto) + integerTypeEnforced = false; + + updateTypeValidations(); +} + +bool ColumnDialog::hasAutoIncr() const +{ + for (SqliteCreateTable::Column::Constraint* constr : column->getConstraints(SqliteCreateTable::Column::Constraint::PRIMARY_KEY)) + { + if (constr->autoincrKw) + return true; + } + + return false; +} + void ColumnDialog::moveConstraintUp() { QModelIndex idx = ui->constraintsView->currentIndex(); @@ -509,6 +546,7 @@ void ColumnDialog::configureDefault() void ColumnDialog::pkToggled(bool enabled) { constraintToggled(SqliteCreateTable::Column::Constraint::PRIMARY_KEY, enabled); + updateTypeForAutoIncr(); } void ColumnDialog::fkToggled(bool enabled) @@ -630,6 +668,7 @@ void ColumnDialog::updateDataType() if (!column) return; + integerTypeEnforced = false; QString typeTxt = ui->typeCombo->currentText(); QString scaleTxt = ui->scale->getValue().toString(); QString precisionTxt = ui->precision->getValue().toString(); |
