pg_classes can be loaded now, used in TablesTableModel for overview of tables in database.
This commit is contained in:
parent
43e6042794
commit
6466062cc8
23 changed files with 524 additions and 173 deletions
121
pglab/TablesTableModel.cpp
Normal file
121
pglab/TablesTableModel.cpp
Normal 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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue