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:
parent
22db22c6b1
commit
a99f059b70
27 changed files with 663 additions and 22 deletions
|
|
@ -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()
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue