aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2025-01-16 01:58:22 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2025-01-16 01:58:22 -0500
commita5ae79be08125b31bb6b8d9703090a98c6fd2e30 (patch)
tree569ee612c9de85b2bb423efa485688ef1d43852e /SQLiteStudio3/guiSQLiteStudio/dialogs/columndialog.cpp
parent21966b4f924b0a1933d9662e75ff253bd154fdb7 (diff)
parent81a21e6ce040e7740de86340c8ea4dba30e69bc3 (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.cpp43
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)