#include "DatabasesTableModel.h" #include "CustomDataRole.h" #include "ScopeGuard.h" #include "catalog/PgDatabaseCatalog.h" #include "catalog/PgDatabaseContainer.h" #include "catalog/PgAuthIdContainer.h" #include "ResultTableModelUtil.h" using namespace Pgsql; DatabasesTableModel::DatabasesTableModel(QObject *parent) : BaseTableModel(parent) { } void DatabasesTableModel::setDatabaseList(std::shared_ptr cat) { beginResetModel(); SCOPE_EXIT { endResetModel(); }; m_catalog = cat; m_databases = cat->databases(); } QVariant DatabasesTableModel::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 DbaCol: v = tr("Owner"); break; case EncodingCol: v = tr("Encoding"); break; case CollateCol: v = tr("Collation"); break; case CTypeCol: v = tr("CType"); break; case IsTemplateCol: v = tr("Is template"); break; case AllowConnCol: v = tr("Can connect"); break; case ConnLimitCol: v = tr("Conn. limit"); break; case TablespaceCol: v = tr("Tablespace"); break; case CommentCol: v = tr("Comment"); break; case SizeCol: v = tr("Size"); break; case AclCol: v = tr("ACL"); break; } } } return v; } int DatabasesTableModel::rowCount(const QModelIndex &) const { int result = 0; if (m_databases) { result = m_databases->count(); } return result; } int DatabasesTableModel::columnCount(const QModelIndex &) const { int result = COL_COUNT; return result; } Oid DatabasesTableModel::getType(int column) const { Oid oid; switch (column) { case AllowConnCol: case IsTemplateCol: oid = Pgsql::bool_oid; break; case ConnLimitCol: oid = Pgsql::int4_oid; break; case SizeCol: oid = Pgsql::int8_oid; break; case AclCol: case CollateCol: case CTypeCol: case EncodingCol: case DbaCol: case NameCol: case TablespaceCol: case CommentCol: oid = Pgsql::varchar_oid; break; default: oid = InvalidOid; } return oid; } QVariant DatabasesTableModel::getData(const QModelIndex &index) const { QVariant v; //if (!index.isValid()) if (m_databases) { const PgDatabase &db = m_databases->getByIdx(index.row()); switch (index.column()) { case NameCol: v = db.objectName(); break; case DbaCol: v = getRoleDisplayString(*m_catalog, db.dba); break; case EncodingCol: // todo lookup encoding name v = db.encodingString; break; case CollateCol: v = db.collate; break; case CTypeCol: v = db.ctype; break; case IsTemplateCol: v = db.isTemplate; break; case AllowConnCol: v = db.allowConn; break; case ConnLimitCol: v = db.connLimit; break; case TablespaceCol: // todo lookup tablespace name v = getTablespaceDisplayString(*m_catalog, db.tablespace); break; case CommentCol: v = db.description; break; case SizeCol: if (db.sizeBytes >= 0) v = db.sizeBytes; break; case AclCol: v = db.aclString(); break; } } return v; } QVariant DatabasesTableModel::getDataMeaning(const QModelIndex &index) const { if (index.column() == SizeCol) return static_cast(DataMeaningBytes); return BaseTableModel::getDataMeaning(index); }