PgAttribute loading + ColummnTableModel
Required enchancement to PgContainer to make multifield key work.
This commit is contained in:
parent
f9caadb59e
commit
e9d72d391d
32 changed files with 698 additions and 99 deletions
149
pglab/ColumnTableModel.cpp
Normal file
149
pglab/ColumnTableModel.cpp
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
#include "ColumnTableModel.h"
|
||||
#include "PgDatabaseCatalog.h"
|
||||
#include "PgAttribute.h"
|
||||
#include "PgAttributeContainer.h"
|
||||
#include "PgType.h"
|
||||
#include "PgTypeContainer.h"
|
||||
#include "ScopeGuard.h"
|
||||
#include <QBrush>
|
||||
|
||||
void ColumnTableModel::setData(std::shared_ptr<const PgDatabaseCatalog> cat, Oid table_oid)
|
||||
{
|
||||
beginResetModel();
|
||||
SCOPE_EXIT { endResetModel(); };
|
||||
|
||||
m_catalog = cat;
|
||||
m_columns = cat->attributes()->getColumnsForRelation(table_oid);
|
||||
|
||||
// hide system columns
|
||||
m_columns.erase(std::remove_if(m_columns.begin(), m_columns.end(),
|
||||
[](auto &e) { return e.num <= 0; } ),
|
||||
m_columns.end());
|
||||
|
||||
// sort remaining columns by order in table
|
||||
std::sort(m_columns.begin(), m_columns.end(),
|
||||
[] (auto &l, auto &r) -> bool { return l.num < r.num; });
|
||||
}
|
||||
|
||||
QVariant ColumnTableModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||
{
|
||||
QVariant v;
|
||||
if (orientation == Qt::Horizontal) {
|
||||
if (role == Qt::DisplayRole) {
|
||||
QString c;
|
||||
switch (section) {
|
||||
case NameCol:
|
||||
c = tr("Name");
|
||||
break;
|
||||
case TypeCol:
|
||||
c = tr("Type");
|
||||
break;
|
||||
case NullCol:
|
||||
c = tr("Nullable");
|
||||
break;
|
||||
case DefaultCol:
|
||||
c = tr("Default");
|
||||
break;
|
||||
case CollationCol:
|
||||
c = tr("Collation");
|
||||
break;
|
||||
}
|
||||
v = c;
|
||||
}
|
||||
}
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
int ColumnTableModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
return m_columns.size();
|
||||
}
|
||||
|
||||
int ColumnTableModel::columnCount(const QModelIndex &parent) const
|
||||
{
|
||||
return colCount;
|
||||
}
|
||||
|
||||
Oid ColumnTableModel::getType(int column) const
|
||||
{
|
||||
Oid oid = Pgsql::VARCHAROID;
|
||||
// switch (column) {
|
||||
// case TypeCol:
|
||||
// case NameCol:
|
||||
// case NullCol:
|
||||
// case DefaultCol:
|
||||
// case CollationCol:
|
||||
// oid = VARCHAROID;
|
||||
// break;
|
||||
|
||||
// c = tr("Collation");
|
||||
// break;
|
||||
// }
|
||||
return oid;
|
||||
}
|
||||
|
||||
QVariant ColumnTableModel::getData(const QModelIndex &index) const
|
||||
{
|
||||
QVariant v;
|
||||
const auto &t = m_columns[index.row()];
|
||||
QString s;
|
||||
switch (index.column()) {
|
||||
case NameCol:
|
||||
s = t.name;
|
||||
break;
|
||||
case TypeCol:
|
||||
s = getTypeDisplayString(*m_catalog, t.typid);
|
||||
break;
|
||||
case NullCol:
|
||||
s = t.notnull ? "NOT NULL" : "";
|
||||
break;
|
||||
case DefaultCol:
|
||||
s = "";
|
||||
break;
|
||||
case CollationCol:
|
||||
s = ""; //t.collation;
|
||||
break;
|
||||
}
|
||||
v = s;
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
QVariant ColumnTableModel::data(const QModelIndex &index, int role) const
|
||||
{
|
||||
if (role == Qt::ForegroundRole && index.column() == TypeCol) {
|
||||
QVariant v;
|
||||
const auto &t = m_columns[index.row()];
|
||||
auto c = m_catalog->types()->getByKey(t.typid);
|
||||
switch (c.category) {
|
||||
case TypCategory::Boolean:
|
||||
v = QBrush(Qt::darkGreen);
|
||||
break;
|
||||
case TypCategory::Numeric:
|
||||
v = QBrush(Qt::darkBlue);
|
||||
break;
|
||||
case TypCategory::DateTime:
|
||||
case TypCategory::Timespan:
|
||||
v = QBrush(Qt::darkMagenta);
|
||||
break;
|
||||
case TypCategory::String:
|
||||
v = QBrush(Qt::darkYellow);
|
||||
break;
|
||||
case TypCategory::Array:
|
||||
case TypCategory::Composite:
|
||||
case TypCategory::Enum:
|
||||
case TypCategory::Geometric:
|
||||
case TypCategory::NetworkAddress:
|
||||
case TypCategory::Pseudo:
|
||||
case TypCategory::Range:
|
||||
case TypCategory::UserDefined:
|
||||
case TypCategory::BitString:
|
||||
case TypCategory::Unknown:
|
||||
default:
|
||||
v = QBrush(Qt::black);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
return BaseTableModel::data(index, role);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue