The tablespage now has a namespace filter allowing it to be used for

a pg_catalog and information_schema tab.
This commit is contained in:
eelke 2018-12-29 10:56:24 +01:00
parent d129876d06
commit a0579538df
5 changed files with 60 additions and 9 deletions

View file

@ -12,25 +12,49 @@ TablesTableModel::TablesTableModel(QObject *parent)
: QAbstractTableModel(parent)
{}
void TablesTableModel::setNamespaceFilter(NamespaceFilter nsf)
{
m_namespaceFilter = nsf;
reloadData();
}
void TablesTableModel::setCatalog(std::shared_ptr<const PgDatabaseCatalog> cat)
{
beginResetModel();
m_catalog = cat;
reloadData();
}
void TablesTableModel::reloadData()
{
if (!m_catalog)
return;
beginResetModel();
// Later afscheiden naar filter functie
auto classes = cat->classes();
auto classes = m_catalog->classes();
// How many?
int n = 0;
for (const auto &e : *classes)
if (e.kind == RelKind::Table && !e.ns().isSystemCatalog()) ++n;
m_tables.clear();
m_tables.reserve(n); // reserve space
for (const auto &e : *classes) {
if (e.kind == RelKind::Table && !e.ns().isSystemCatalog()) {
m_tables.push_back(e);
bool add = false;
if (e.kind == RelKind::Table) {
switch (m_namespaceFilter) {
case TablesTableModel::User:
add = !e.ns().isSystemCatalog();
break;
case TablesTableModel::PgCatalog:
add = e.ns().objectName() == "pg_catalog";
break;
case TablesTableModel::InformationSchema:
add = e.ns().objectName() == "information_schema";
break;
}
}
if (add)
m_tables.push_back(e);
}
doSort(1);