aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2018-07-27 23:54:15 -0400
committerLibravatarUnit 193 <unit193@ubuntu.com>2018-07-27 23:54:15 -0400
commit6d3d39356473078c6b47e03b8a7616e4b34de928 (patch)
treefe5be2e6a08e4cfc73207746aba4c9fccfecfa10 /SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp
parentf98e49169a40876bcf1df832de6e908d1b350193 (diff)
parentfeda8a7db8d1d7c5439aa8f8feef7cc0dd2b59a0 (diff)
Update upstream source from tag 'upstream/3.2.1+dfsg1'
Update to upstream version '3.2.1+dfsg1' with Debian dir 5ea0333565de4dc898c062cc0ff4ba1153e2c1e4
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp')
-rw-r--r--SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp43
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();