2018-10-07 19:40:06 +02:00
|
|
|
|
#include "TriggerTableModel.h"
|
2018-12-16 10:17:59 +01:00
|
|
|
|
#include "catalog/PgDatabaseCatalog.h"
|
|
|
|
|
|
#include "catalog/PgTriggerContainer.h"
|
2018-10-07 19:40:06 +02:00
|
|
|
|
#include "CustomDataRole.h"
|
2019-10-06 14:31:44 +02:00
|
|
|
|
#include "ScopeGuard.h"
|
2018-10-07 19:40:06 +02:00
|
|
|
|
|
|
|
|
|
|
TriggerTableModel::TriggerTableModel(QObject *parent)
|
|
|
|
|
|
: QAbstractTableModel(parent)
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QVariant TriggerTableModel::headerData(int section, Qt::Orientation orientation, int role) const
|
|
|
|
|
|
{
|
|
|
|
|
|
if (orientation == Qt::Horizontal) {
|
|
|
|
|
|
if (role == Qt::DisplayRole) {
|
|
|
|
|
|
switch (section) {
|
|
|
|
|
|
case NameCol: return tr("Name");
|
|
|
|
|
|
case EventsCol: return tr("Events");
|
|
|
|
|
|
case WhenCol: return tr("When");
|
|
|
|
|
|
case DeferrableCol: return tr("Df");
|
|
|
|
|
|
case InitiallyCol: return tr("ID");
|
|
|
|
|
|
case ForCol: return tr("For");
|
|
|
|
|
|
case CondCol: return tr("Cond.");
|
2018-11-18 19:30:45 +01:00
|
|
|
|
// case ReferencingCol: return tr("Referencing");
|
2018-10-07 19:40:06 +02:00
|
|
|
|
case ProcedureCol: return tr("Function");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return QVariant();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void TriggerTableModel::setCatalog(std::shared_ptr<const PgDatabaseCatalog> cat)
|
|
|
|
|
|
{
|
2019-10-06 14:31:44 +02:00
|
|
|
|
if (cat != m_catalog) {
|
|
|
|
|
|
m_catalog = cat;
|
|
|
|
|
|
refreshConnection = connect(m_catalog.get(), &PgDatabaseCatalog::refreshed, this,
|
|
|
|
|
|
&TriggerTableModel::refresh);
|
|
|
|
|
|
}
|
|
|
|
|
|
refresh();
|
2018-10-07 19:40:06 +02:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int TriggerTableModel::rowCount(const QModelIndex &) const
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_triggers ? static_cast<int>(m_triggers->count()) : 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int TriggerTableModel::columnCount(const QModelIndex &) const
|
|
|
|
|
|
{
|
|
|
|
|
|
return colCount;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QVariant TriggerTableModel::data(const QModelIndex &index, int role) const
|
|
|
|
|
|
{
|
|
|
|
|
|
if (role == Qt::DisplayRole)
|
|
|
|
|
|
return getData(index);
|
|
|
|
|
|
else if (role == CustomDataTypeRole)
|
|
|
|
|
|
return getType(index.column());
|
|
|
|
|
|
else if (role == FirstHiddenValue) {
|
|
|
|
|
|
auto&& t = m_triggers->getByIdx(index.row());
|
|
|
|
|
|
return t.relid; //
|
|
|
|
|
|
}
|
|
|
|
|
|
return QVariant();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PgTrigger TriggerTableModel::trigger(int row) const
|
|
|
|
|
|
{
|
|
|
|
|
|
return m_triggers->getByIdx(row);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Oid TriggerTableModel::getType(int column) const
|
|
|
|
|
|
{
|
|
|
|
|
|
switch (column) {
|
|
|
|
|
|
case DeferrableCol:
|
|
|
|
|
|
case InitiallyCol:
|
|
|
|
|
|
return Pgsql::bool_oid;
|
|
|
|
|
|
}
|
|
|
|
|
|
return Pgsql::varchar_oid;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QVariant TriggerTableModel::getData(const QModelIndex &index) const
|
|
|
|
|
|
{
|
|
|
|
|
|
auto&& t = m_triggers->getByIdx(index.row());
|
|
|
|
|
|
switch (index.column()) {
|
2018-11-25 19:45:06 +01:00
|
|
|
|
case NameCol: return t.objectName();
|
2018-10-07 19:40:06 +02:00
|
|
|
|
case EventsCol: return t.eventAbbr();
|
|
|
|
|
|
case WhenCol: return t.typeFireWhen();
|
|
|
|
|
|
case DeferrableCol: return t.deferrable;
|
|
|
|
|
|
case InitiallyCol: return t.initdeferred;
|
|
|
|
|
|
case ForCol: return t.forEach();
|
2018-11-18 19:30:45 +01:00
|
|
|
|
case CondCol: return t.whenclause;
|
2018-10-07 19:40:06 +02:00
|
|
|
|
// case ReferencingCol: return tr("Referencing");
|
2018-11-18 19:30:45 +01:00
|
|
|
|
case ProcedureCol: return t.procedure();
|
2018-10-07 19:40:06 +02:00
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
return QVariant();
|
|
|
|
|
|
}
|
2019-10-06 14:31:44 +02:00
|
|
|
|
|
|
|
|
|
|
void TriggerTableModel::refresh()
|
|
|
|
|
|
{
|
|
|
|
|
|
beginResetModel();
|
|
|
|
|
|
SCOPE_EXIT { endResetModel(); };
|
|
|
|
|
|
|
|
|
|
|
|
m_triggers = m_catalog->triggers();
|
|
|
|
|
|
}
|