Added list of constraints to the tables page.

Last column shows the full textual definition until I have decided on
a better way to visualize the details.
This commit is contained in:
eelke 2017-12-30 12:57:55 +01:00
parent 22db22c6b1
commit a99f059b70
27 changed files with 663 additions and 22 deletions

View file

@ -25,6 +25,64 @@ void operator<<(ConstraintType &s, const Pgsql::Value &v)
}
}
QString ShortNameForConstraintType(ConstraintType ct)
{
QString s;
switch (ct) {
case ConstraintType::Check:
s = "C";
break;
case ConstraintType::ForeignKey:
s = "FK";
break;
case ConstraintType::PrimaryKey:
s = "PK";
break;
case ConstraintType::Unique:
s = "U";
break;
case ConstraintType::ConstraintTrigger:
s = "CT";
break;
case ConstraintType::ExclusionConstraint:
s = "XC";
break;
default:
s = "?";
break;
}
return s;
}
QString LongNameForConstraintType(ConstraintType ct)
{
QString s;
switch (ct) {
case ConstraintType::Check:
s = "check";
break;
case ConstraintType::ForeignKey:
s = "foreign key";
break;
case ConstraintType::PrimaryKey:
s = "primary key";
break;
case ConstraintType::Unique:
s = "unique";
break;
case ConstraintType::ConstraintTrigger:
s = "constraint trigger";
break;
case ConstraintType::ExclusionConstraint:
s = "exclusion constraint";
break;
default:
s = "?";
break;
}
return s;
}
void operator<<(ForeignKeyAction &s, const Pgsql::Value &v)
{
const char *c = v.c_str();
@ -64,6 +122,7 @@ void operator<<(ForeignKeyMatch &s, const Pgsql::Value &v)
}
PgConstraint::PgConstraint()
{

View file

@ -9,16 +9,19 @@
#include <vector>
enum class ConstraintType {
Check, // c
ForeignKey, // f
PrimaryKey, // p
ForeignKey, // f
Unique, // u
Check, // c
ConstraintTrigger, // t
ExclusionConstraint, // x
};
void operator<<(ConstraintType &s, const Pgsql::Value &v);
QString ShortNameForConstraintType(ConstraintType ct);
QString LongNameForConstraintType(ConstraintType ct);
enum class ForeignKeyAction {
NoAction, // a

View file

@ -63,3 +63,12 @@ const PgConstraint* PgConstraintContainer::getFKeyForTableColumn(Oid relid, int1
// });
return result;
}
std::vector<PgConstraint> PgConstraintContainer::getConstraintsForRelation(Oid relid) const
{
std::vector<PgConstraint> result;
for (const auto &e : m_container)
if (e.relid == relid)
result.push_back(e);
return result;
}

View file

@ -13,6 +13,8 @@ public:
virtual std::string getLoadQuery() const override;
//std::vector<PgConstraint> getIndexesForTable(Oid table_oid) const;
const PgConstraint* getFKeyForTableColumn(Oid relid, int16_t attnum) const;
std::vector<PgConstraint> getConstraintsForRelation(Oid relid) const;
protected:
virtual PgConstraint loadElem(const Pgsql::Row &row) override;
};

View file

@ -38,19 +38,31 @@ QString getRoleDisplayString(const PgDatabaseCatalog &cat, Oid oid)
QString getNamespaceDisplayString(const PgDatabaseCatalog &cat, Oid oid)
{
//QString name;
QString result;
auto nss = cat.namespaces();
auto ns = nss->getByKey(oid);
// if (auth_ids) {
// const PgAuthId& auth_id = auth_ids->getByOid(oid);
// if (auth_id.valid()) {
// name = auth_id.name;
// }
// }
//return name;
// TODO load list and lookup name
return ns.name; //QString("ns %1").arg(oid);
result = ns.name; //QString("ns %1").arg(oid);
return result;
}
QString getClassDisplayString(const PgDatabaseCatalog &cat, Oid oid)
{
QString result;
auto l = cat.classes();
auto e = l->getByKey(oid);
result = e.name;
return result;
}
QString getIndexDisplayString(const PgDatabaseCatalog &cat, Oid oid)
{
QString result;
// auto l = cat.indexes();
// auto e = l->getByKey(oid);
// if (e)
result = getClassDisplayString(cat, oid);
return result;
}
QString getTablespaceDisplayString(const PgDatabaseCatalog &cat, Oid oid)

View file

@ -74,6 +74,8 @@ QString getRoleDisplayString(const PgDatabaseCatalog &cat, Oid oid);
QString getNamespaceDisplayString(const PgDatabaseCatalog &cat, Oid oid);
QString getTablespaceDisplayString(const PgDatabaseCatalog &cat, Oid oid);
QString getTypeDisplayString(const PgDatabaseCatalog &cat, Oid oid, int32_t typmod = -1);
QString getIndexDisplayString(const PgDatabaseCatalog &cat, Oid oid);
QString getClassDisplayString(const PgDatabaseCatalog &cat, Oid oid);
#endif // PGSQLDATABASECATALOGUE_H