pg_classes can be loaded now, used in TablesTableModel for overview of tables in database.

This commit is contained in:
eelke 2017-12-10 10:35:46 +01:00
parent 43e6042794
commit 6466062cc8
23 changed files with 524 additions and 173 deletions

121
pglab/TablesTableModel.cpp Normal file
View file

@ -0,0 +1,121 @@
#include "TablesTableModel.h"
#include "PgDatabaseCatalog.h"
#include "PgClass.h"
#include "PgClassContainer.h"
#include "Pgsql_declare.h"
TablesTableModel::TablesTableModel(QObject *parent)
: BaseTableModel(parent)
{
}
void TablesTableModel::setCatalog(std::shared_ptr<const PgDatabaseCatalog> cat)
{
beginResetModel();
m_catalog = cat;
// Later afscheiden naar filter functie
auto classes = cat->classes();
// How many?
int n = 0;
for (const auto &e : *classes)
if (e.kind == RelKind::Table) ++n;
m_tables.clear();
m_tables.reserve(n); // reserve space
for (const auto &e : *classes) {
if (e.kind == RelKind::Table) {
m_tables.push_back(e);
}
}
endResetModel();
}
QVariant TablesTableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
QVariant v;
if (orientation == Qt::Horizontal) {
if (role == Qt::DisplayRole) {
switch (section) {
case NameCol:
v = tr("Name");
break;
case OwnerCol:
v = tr("Owner");
break;
case TablespaceCol:
v = tr("Tablespace");
break;
case OptionsCol:
v = tr("Options");
break;
case AclCol:
v = tr("ACL");
break;
}
}
}
return v;
}
// Basic functionality:
int TablesTableModel::rowCount(const QModelIndex &) const
{
return m_tables.size();
}
int TablesTableModel::columnCount(const QModelIndex &) const
{
return colCount;
}
Oid TablesTableModel::getType(int column) const
{
Oid oid;
switch (column) {
case TablespaceCol:
case OwnerCol:
case NameCol:
case OptionsCol:
case AclCol:
default:
oid = Pgsql::VARCHAROID;
}
return oid;
}
QVariant TablesTableModel::getData(const QModelIndex &index) const
{
QVariant v;
const auto &t = m_tables[index.row()];
switch (index.column()) {
case NameCol:
v = formatTableName(t);
break;
case OwnerCol:
v = getRoleDisplayString(*m_catalog, t.owner);
break;
case TablespaceCol:
v = getTablespaceDisplayString(*m_catalog, t.tablespace);
break;
case OptionsCol:
v = t.options;
break;
case AclCol:
v = t.acl;
break;
}
return v;
}
QString TablesTableModel::formatTableName(const PgClass &cls) const
{
const char * format = "%2 (%1)";
QString ns_name = getNamespaceDisplayString(*m_catalog, cls.relnamespace);
return QString(format).arg(ns_name).arg(cls.name);
}