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:
parent
d129876d06
commit
a0579538df
5 changed files with 60 additions and 9 deletions
|
|
@ -109,6 +109,16 @@ void DatabaseWindow::catalogLoaded()
|
||||||
tt->setCatalog(m_database->catalog());
|
tt->setCatalog(m_database->catalog());
|
||||||
ui->tabWidget->addTab(tt, "Tables");
|
ui->tabWidget->addTab(tt, "Tables");
|
||||||
|
|
||||||
|
auto pg_cat_tables = new TablesPage(this);
|
||||||
|
pg_cat_tables->setNamespaceFilter(TablesTableModel::PgCatalog);
|
||||||
|
pg_cat_tables->setCatalog(m_database->catalog());
|
||||||
|
ui->tabWidget->addTab(pg_cat_tables, "pg_catalog");
|
||||||
|
|
||||||
|
auto info_schema_tables = new TablesPage(this);
|
||||||
|
info_schema_tables->setNamespaceFilter(TablesTableModel::InformationSchema);
|
||||||
|
info_schema_tables->setCatalog(m_database->catalog());
|
||||||
|
ui->tabWidget->addTab(info_schema_tables, "information_schema");
|
||||||
|
|
||||||
auto functions_page = new FunctionsPage(this);
|
auto functions_page = new FunctionsPage(this);
|
||||||
functions_page->setCatalog(m_database->catalog());
|
functions_page->setCatalog(m_database->catalog());
|
||||||
ui->tabWidget->addTab(functions_page, "Functions");
|
ui->tabWidget->addTab(functions_page, "Functions");
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,6 @@
|
||||||
#include "ResultTableModelUtil.h"
|
#include "ResultTableModelUtil.h"
|
||||||
#include "SqlFormattingUtils.h"
|
#include "SqlFormattingUtils.h"
|
||||||
#include "SqlSyntaxHighlighter.h"
|
#include "SqlSyntaxHighlighter.h"
|
||||||
#include "TablesTableModel.h"
|
|
||||||
#include "TriggerPage.h"
|
#include "TriggerPage.h"
|
||||||
#include "UserConfiguration.h"
|
#include "UserConfiguration.h"
|
||||||
#include "SqlCodePreview.h"
|
#include "SqlCodePreview.h"
|
||||||
|
|
@ -57,6 +56,8 @@ TablesPage::TablesPage(DatabaseWindow *parent)
|
||||||
ui->indexSqlEdit->setFont(code_font);
|
ui->indexSqlEdit->setFont(code_font);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Connect signals
|
// Connect signals
|
||||||
// ---------------
|
// ---------------
|
||||||
// Table selection
|
// Table selection
|
||||||
|
|
@ -142,6 +143,11 @@ void TablesPage::setCatalog(std::shared_ptr<PgDatabaseCatalog> cat)
|
||||||
highlighter->setTypes(*cat->types());
|
highlighter->setTypes(*cat->types());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TablesPage::setNamespaceFilter(TablesTableModel::NamespaceFilter filter)
|
||||||
|
{
|
||||||
|
m_tablesModel->setNamespaceFilter(filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TablesPage::tableListTable_currentRowChanged(const QModelIndex ¤t, const QModelIndex &previous)
|
void TablesPage::tableListTable_currentRowChanged(const QModelIndex ¤t, const QModelIndex &previous)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <QItemSelection>
|
#include <QItemSelection>
|
||||||
|
#include "TablesTableModel.h"
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class TablesPage;
|
class TablesPage;
|
||||||
|
|
@ -32,6 +33,7 @@ public:
|
||||||
~TablesPage();
|
~TablesPage();
|
||||||
|
|
||||||
void setCatalog(std::shared_ptr<PgDatabaseCatalog> cat);
|
void setCatalog(std::shared_ptr<PgDatabaseCatalog> cat);
|
||||||
|
void setNamespaceFilter(TablesTableModel::NamespaceFilter filter);
|
||||||
private:
|
private:
|
||||||
Ui::TablesPage *ui;
|
Ui::TablesPage *ui;
|
||||||
DatabaseWindow *m_window;
|
DatabaseWindow *m_window;
|
||||||
|
|
|
||||||
|
|
@ -12,25 +12,49 @@ TablesTableModel::TablesTableModel(QObject *parent)
|
||||||
: QAbstractTableModel(parent)
|
: QAbstractTableModel(parent)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
void TablesTableModel::setNamespaceFilter(NamespaceFilter nsf)
|
||||||
|
{
|
||||||
|
m_namespaceFilter = nsf;
|
||||||
|
reloadData();
|
||||||
|
}
|
||||||
|
|
||||||
void TablesTableModel::setCatalog(std::shared_ptr<const PgDatabaseCatalog> cat)
|
void TablesTableModel::setCatalog(std::shared_ptr<const PgDatabaseCatalog> cat)
|
||||||
{
|
{
|
||||||
beginResetModel();
|
|
||||||
m_catalog = cat;
|
m_catalog = cat;
|
||||||
|
reloadData();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void TablesTableModel::reloadData()
|
||||||
|
{
|
||||||
|
if (!m_catalog)
|
||||||
|
return;
|
||||||
|
|
||||||
|
beginResetModel();
|
||||||
|
|
||||||
// Later afscheiden naar filter functie
|
// Later afscheiden naar filter functie
|
||||||
auto classes = cat->classes();
|
auto classes = m_catalog->classes();
|
||||||
|
|
||||||
// How many?
|
// How many?
|
||||||
int n = 0;
|
|
||||||
for (const auto &e : *classes)
|
|
||||||
if (e.kind == RelKind::Table && !e.ns().isSystemCatalog()) ++n;
|
|
||||||
|
|
||||||
m_tables.clear();
|
m_tables.clear();
|
||||||
m_tables.reserve(n); // reserve space
|
|
||||||
for (const auto &e : *classes) {
|
for (const auto &e : *classes) {
|
||||||
if (e.kind == RelKind::Table && !e.ns().isSystemCatalog()) {
|
bool add = false;
|
||||||
m_tables.push_back(e);
|
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);
|
doSort(1);
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,8 @@
|
||||||
class PgClass;
|
class PgClass;
|
||||||
class PgDatabaseCatalog;
|
class PgDatabaseCatalog;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class TablesTableModel: public QAbstractTableModel {
|
class TablesTableModel: public QAbstractTableModel {
|
||||||
public:
|
public:
|
||||||
enum e_Columns : int {
|
enum e_Columns : int {
|
||||||
|
|
@ -22,6 +24,10 @@ public:
|
||||||
|
|
||||||
TablesTableModel(QObject *parent);
|
TablesTableModel(QObject *parent);
|
||||||
|
|
||||||
|
enum NamespaceFilter {
|
||||||
|
User, PgCatalog, InformationSchema
|
||||||
|
};
|
||||||
|
void setNamespaceFilter(NamespaceFilter nsf);
|
||||||
void setCatalog(std::shared_ptr<const PgDatabaseCatalog> cat);
|
void setCatalog(std::shared_ptr<const PgDatabaseCatalog> cat);
|
||||||
|
|
||||||
virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
|
virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override;
|
||||||
|
|
@ -42,8 +48,11 @@ private:
|
||||||
using t_Tables = std::vector<PgClass>;
|
using t_Tables = std::vector<PgClass>;
|
||||||
|
|
||||||
std::shared_ptr<const PgDatabaseCatalog> m_catalog;
|
std::shared_ptr<const PgDatabaseCatalog> m_catalog;
|
||||||
|
NamespaceFilter m_namespaceFilter = User;
|
||||||
t_Tables m_tables;
|
t_Tables m_tables;
|
||||||
|
|
||||||
|
void reloadData();
|
||||||
|
|
||||||
Oid getType(int column) const;
|
Oid getType(int column) const;
|
||||||
QVariant getData(const QModelIndex &index) const;
|
QVariant getData(const QModelIndex &index) const;
|
||||||
// QString formatTableName(const PgClass &cls) const;
|
// QString formatTableName(const PgClass &cls) const;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue