diff --git a/pglab/catalog/models/ConstraintModel.cpp b/pglab/catalog/models/ConstraintModel.cpp index 02b36ea..9933db5 100644 --- a/pglab/catalog/models/ConstraintModel.cpp +++ b/pglab/catalog/models/ConstraintModel.cpp @@ -55,6 +55,9 @@ QVariant ConstraintModel::headerData(int section, Qt::Orientation orientation, i case SupportingIndexCol: c = tr("Supporting index"); break; + case InheritedCol: + c = tr("Inherited"); + break; // case DefinitionCol: // c = tr("Definition"); // break; @@ -85,11 +88,17 @@ int ConstraintModel::columnCount(const QModelIndex &) const // return v; //} -Oid ConstraintModel::getType(int ) const +Oid ConstraintModel::getType(int col) const { - Oid oid = Pgsql::varchar_oid; - - return oid; + Oid oid; + switch (col) { + case InheritedCol: + oid = Pgsql::bool_oid; + break; + default: + oid = Pgsql::varchar_oid; + } + return oid; } QString IconForConstraintType(ConstraintType ct) @@ -128,25 +137,27 @@ QVariant ConstraintModel::getData(const QModelIndex &index) const const auto &t = m_constraints[row]; const int col = index.column(); - QString s; - switch (col) { + + switch (col) { case TypeCol: - s = IconForConstraintType(t.type); + v = IconForConstraintType(t.type); break; case NameCol: - s = t.objectName(); + v = t.objectName(); break; case NsCol: - s = t.nsName(); + v = t.nsName(); break; case SupportingIndexCol: - s = getIndexDisplayString(*m_catalog, t.indid); + v = getIndexDisplayString(*m_catalog, t.indid); break; + case InheritedCol: + v = t.isInherited(); + break; // case DefinitionCol: // s = t.definition; // break; } - v = s; return v; } diff --git a/pglab/catalog/models/ConstraintModel.h b/pglab/catalog/models/ConstraintModel.h index 29b4bcf..42dea1b 100644 --- a/pglab/catalog/models/ConstraintModel.h +++ b/pglab/catalog/models/ConstraintModel.h @@ -19,6 +19,7 @@ public: NameCol, /// NsCol, /// SupportingIndexCol, + InheritedCol, // DefinitionCol, colCount }; diff --git a/pglab/catalog/widgets/CatalogConstraintPage.cpp b/pglab/catalog/widgets/CatalogConstraintPage.cpp index a910c57..6140e64 100644 --- a/pglab/catalog/widgets/CatalogConstraintPage.cpp +++ b/pglab/catalog/widgets/CatalogConstraintPage.cpp @@ -34,13 +34,21 @@ void CatalogConstraintPage::setFilter(const std::optional &cls) void CatalogConstraintPage::tableView_selectionChanged(const QItemSelection &/*selected*/, const QItemSelection &/*deselected*/) { - auto rijen = selectedRows(); - QString drops; - QString creates; - for (auto rij : rijen) { - const PgConstraint constraint = m_constraintModel->constraint(rij); - drops += constraint.dropSql() % "\n"; - creates += constraint.createSql() % "\n"; - } - m_definitionView->setPlainText(drops % "\n" % creates); + m_definitionView->setPlainText( + generateSql( + selectedRows() + ) + ); +} + +QString CatalogConstraintPage::generateSql(const std::unordered_set &rijen) +{ + QString drops; + QString creates; + for (auto rij : rijen) { + const PgConstraint constraint = m_constraintModel->constraint(rij); + drops += constraint.dropSql() % "\n"; + creates += constraint.createSql() % "\n"; + } + return drops % "\n" % creates; } diff --git a/pglab/catalog/widgets/CatalogConstraintPage.h b/pglab/catalog/widgets/CatalogConstraintPage.h index ea8c212..43e53b9 100644 --- a/pglab/catalog/widgets/CatalogConstraintPage.h +++ b/pglab/catalog/widgets/CatalogConstraintPage.h @@ -22,6 +22,7 @@ private: ConstraintModel *m_constraintModel = nullptr; + QString generateSql(const std::unordered_set &rows); private slots: void tableView_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected); }; diff --git a/pglablib/catalog/PgConstraint.cpp b/pglablib/catalog/PgConstraint.cpp index 9c06487..83ad036 100644 --- a/pglablib/catalog/PgConstraint.cpp +++ b/pglablib/catalog/PgConstraint.cpp @@ -1,5 +1,6 @@ #include "PgConstraint.h" #include "SqlFormattingUtils.h" +#include void operator<<(ConstraintType &s, const Pgsql::Value &v) { @@ -176,10 +177,16 @@ QString PgConstraint::typeName() const QString PgConstraint::dropSql() const { - return getDropConstraintDefinition(catalog(), *this); + if (isInherited()) + return "-- " % objectName() % " is inherited"; + + return getDropConstraintDefinition(catalog(), *this); } QString PgConstraint::createSql() const { - return getAlterTableConstraintDefinition(catalog(), *this); + if (isInherited()) + return "-- " % objectName() % " is inherited"; + + return getAlterTableConstraintDefinition(catalog(), *this); }