diff options
| author | 2025-01-16 01:58:22 -0500 | |
|---|---|---|
| committer | 2025-01-16 01:58:22 -0500 | |
| commit | a5ae79be08125b31bb6b8d9703090a98c6fd2e30 (patch) | |
| tree | 569ee612c9de85b2bb423efa485688ef1d43852e /SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp | |
| parent | 21966b4f924b0a1933d9662e75ff253bd154fdb7 (diff) | |
| parent | 81a21e6ce040e7740de86340c8ea4dba30e69bc3 (diff) | |
Update upstream source from tag 'upstream/3.4.13+dfsg'
Update to upstream version '3.4.13+dfsg'
with Debian dir bf81ee0219cb8e4562a4751df17d75814772d2d6
Diffstat (limited to 'SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp')
| -rw-r--r-- | SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp b/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp index a217da6..cf5848a 100644 --- a/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp +++ b/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp @@ -9,11 +9,13 @@ #include "constraints/constraintpanel.h" #include "datatype.h" #include "uiutils.h" +#include "common/dialogsizehandler.h" #include <QDebug> #include <QCheckBox> #include <QMessageBox> #include <QDebug> #include <QPushButton> +#include <schemaresolver.h> ColumnDialog::ColumnDialog(Db* db, QWidget *parent) : QDialog(parent), @@ -33,6 +35,7 @@ void ColumnDialog::init() ui->setupUi(this); limitDialogWidth(this); setWindowIcon(ICONS.COLUMN); + DialogSizeHandler::applyFor(this); ui->scale->setStrict(true, true); ui->precision->setStrict(true, true); @@ -403,7 +406,7 @@ void ColumnDialog::updateTypeValidations() setValidState(ui->typeCombo, typeOk, typeErrorMsg); if (typeOk && integerTypeEnforced) - setValidStateTooltip(ui->typeCombo, integerEnforcedMsg); + setValidStateTooltip(ui->typeCombo, integerEnforcedMsg); if (!scaleOk || !precisionOk || !typeOk) { @@ -437,6 +440,43 @@ bool ColumnDialog::hasAutoIncr() const return false; } +void ColumnDialog::validateFkTypeMatch() +{ + QString fkTypeWarningMsg = tr("Referenced column type (%1) is different than type declared in this column. It may cause issues while inserting or updating data."); + + for (SqliteCreateTable::Column::Constraint*& constr : column->getConstraints(SqliteCreateTable::Column::Constraint::FOREIGN_KEY)) + { + if (!constr->foreignKey || constr->foreignKey->indexedColumns.isEmpty() || constr->foreignKey->foreignTable.isNull()) + continue; + + QString fkTable = constr->foreignKey->foreignTable; + QString fkColumn = constr->foreignKey->indexedColumns.first()->name; + if (!fkTableTypesCache.contains(fkTable, Qt::CaseInsensitive)) + { + SchemaResolver resolver(db); + fkTableTypesCache[fkTable] = resolver.getTableColumnDataTypesByName(fkTable);; + } + + StrHash<DataType> fkTypes = fkTableTypesCache.value(fkTable, Qt::CaseInsensitive); + if (fkTypes.isEmpty()) + continue; + + DataType fkType = fkTypes.value(fkColumn, Qt::CaseInsensitive); + if (fkType.toString().toLower().trimmed() != ui->typeCombo->currentText().toLower().trimmed()) + { + auto fkButton = getToolButtonForConstraint(constr); + if (!fkButton) + continue; + + if (isValidStateIndicatorVisible(fkButton)) + continue; + + setValidStateWarning(fkButton, fkTypeWarningMsg.arg(fkType.toString())); + break; + } + } +} + void ColumnDialog::moveConstraintUp() { QModelIndex idx = ui->constraintsView->currentIndex(); @@ -618,6 +658,7 @@ void ColumnDialog::updateValidations() updateConstraint(constr); updateTypeValidations(); + validateFkTypeMatch(); } void ColumnDialog::updateConstraint(SqliteCreateTable::Column::Constraint* constraint) |
