Show SQL for database
Also improvements to the SQL for tables and views.
This commit is contained in:
parent
b5a706a2a2
commit
3158a4364b
12 changed files with 172 additions and 58 deletions
|
|
@ -142,10 +142,9 @@ QVariant DatabasesTableModel::getData(const QModelIndex &index) const
|
|||
v = db.objectName();
|
||||
break;
|
||||
case DbaCol:
|
||||
v = getRoleDisplayString(*m_catalog, db.dba);
|
||||
v = db.ownerName();
|
||||
break;
|
||||
case EncodingCol:
|
||||
// todo lookup encoding name
|
||||
v = db.encodingString;
|
||||
break;
|
||||
case CollateCol:
|
||||
|
|
@ -164,7 +163,6 @@ QVariant DatabasesTableModel::getData(const QModelIndex &index) const
|
|||
v = db.connLimit;
|
||||
break;
|
||||
case TablespaceCol:
|
||||
// todo lookup tablespace name
|
||||
v = getTablespaceDisplayString(*m_catalog, db.tablespace);
|
||||
break;
|
||||
case CommentCol:
|
||||
|
|
|
|||
|
|
@ -38,6 +38,10 @@ public:
|
|||
virtual Oid getType(int column) const override;
|
||||
virtual QVariant getData(const QModelIndex &index) const override;
|
||||
|
||||
RowItem rowItem(int row) const
|
||||
{
|
||||
return databases.at(row).database;
|
||||
}
|
||||
protected:
|
||||
virtual QVariant getDataMeaning(const QModelIndex &index) const override;
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -1,8 +1,11 @@
|
|||
#include "DatabasesPage.h"
|
||||
|
||||
#include "DatabasesTableModel.h"
|
||||
#include "SqlCodePreview.h"
|
||||
#include "SqlFormattingUtils.h"
|
||||
#include "catalog/PgDatabaseCatalog.h"
|
||||
#include "PgLabTableView.h"
|
||||
#include <QStringBuilder>
|
||||
|
||||
|
||||
DatabasesPage::DatabasesPage(std::shared_ptr<OpenDatabase> opendatabase, QWidget * parent)
|
||||
|
|
@ -12,10 +15,18 @@ DatabasesPage::DatabasesPage(std::shared_ptr<OpenDatabase> opendatabase, QWidget
|
|||
auto tv = m_databasesTableView.tableView();
|
||||
tv->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||
|
||||
m_detailsTabs = new QTabWidget(this);
|
||||
// m_detailsTabs = new QTabWidget(this);
|
||||
|
||||
addWidget(tv);
|
||||
addWidget(m_detailsTabs);
|
||||
// addWidget(m_detailsTabs);
|
||||
|
||||
m_tableSql = new SqlCodePreview(this);
|
||||
// m_detailsTabs->addTab(m_tableSql, "");
|
||||
addWidget(m_tableSql);
|
||||
|
||||
|
||||
connect(m_databasesTableView.tableView()->selectionModel(), &QItemSelectionModel::currentRowChanged,
|
||||
this, &DatabasesPage::databaseSelectionChanged);
|
||||
}
|
||||
|
||||
void DatabasesPage::setCatalog(std::shared_ptr<PgDatabaseCatalog> cat)
|
||||
|
|
@ -25,6 +36,34 @@ void DatabasesPage::setCatalog(std::shared_ptr<PgDatabaseCatalog> cat)
|
|||
m_databasesTableView.tableView()->resizeColumnsToContents();
|
||||
}
|
||||
|
||||
void DatabasesPage::updateDatabaseDetails(const PgDatabase &db)
|
||||
{
|
||||
updateSqlTab(db);
|
||||
}
|
||||
|
||||
void DatabasesPage::updateSqlTab(const PgDatabase &db)
|
||||
{
|
||||
QString drop_sql = db.dropSql();
|
||||
QString create_sql = db.createSql();
|
||||
|
||||
create_sql += "\n\n-- set Privileges\n";
|
||||
create_sql += db.grantSql() % "\n";
|
||||
|
||||
create_sql += "-- set comment\n";
|
||||
create_sql += db.commentSql() % "\n";
|
||||
|
||||
m_tableSql->setPlainText(drop_sql % "\n\n" % create_sql);
|
||||
}
|
||||
|
||||
void DatabasesPage::databaseSelectionChanged(const QModelIndex ¤t, const QModelIndex &previous)
|
||||
{
|
||||
if (current.row() == previous.row())
|
||||
return;
|
||||
|
||||
auto db = m_databasesTableView.rowItemForProxyIndex(current);
|
||||
updateDatabaseDetails(db);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -6,9 +6,11 @@
|
|||
#include "PgLabTableViewHelper.h"
|
||||
#include "DatabasesTableModel.h"
|
||||
|
||||
class PgDatabase;
|
||||
class PgDatabaseCatalog;
|
||||
class PgLabTableView;
|
||||
class QSortFilterProxyModel;
|
||||
class SqlCodePreview;
|
||||
|
||||
class DatabasesPage: public QSplitter {
|
||||
public:
|
||||
|
|
@ -20,9 +22,16 @@ public:
|
|||
|
||||
private:
|
||||
PgLabTableViewHelper<DatabasesTableModel> m_databasesTableView;
|
||||
QTabWidget *m_detailsTabs = nullptr;
|
||||
// QTabWidget *m_detailsTabs = nullptr;
|
||||
SqlCodePreview *m_tableSql = nullptr;
|
||||
|
||||
std::shared_ptr<PgDatabaseCatalog> m_catalog;
|
||||
|
||||
void updateDatabaseDetails(const PgDatabase &db);
|
||||
void updateSqlTab(const PgDatabase &db);
|
||||
|
||||
private slots:
|
||||
|
||||
void databaseSelectionChanged(const QModelIndex ¤t, const QModelIndex &previous);
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
#include <QApplication>
|
||||
#include <QHeaderView>
|
||||
#include <QStringBuilder>
|
||||
#include <QSortFilterProxyModel>
|
||||
//#include <QSortFilterProxyModel>
|
||||
#include <QTableWidget>
|
||||
|
||||
CatalogTablesPage::CatalogTablesPage(std::shared_ptr<OpenDatabase> opendatabase, QWidget *parent)
|
||||
|
|
@ -69,12 +69,6 @@ CatalogTablesPage::CatalogTablesPage(std::shared_ptr<OpenDatabase> opendatabase,
|
|||
// Signals
|
||||
connect(tv->selectionModel(), &QItemSelectionModel::currentRowChanged, this,
|
||||
&CatalogTablesPage::tableListTable_currentRowChanged);
|
||||
// connect(m_tablesTableView.dataModel(), &TablesTableModel::modelReset,
|
||||
// [this] ()
|
||||
// {
|
||||
// selectedTableChanged({});
|
||||
// m_propertiesPage->setActiveRow({});
|
||||
// });
|
||||
|
||||
connect(m_tablesTableView.dataModel(), &QAbstractItemModel::layoutChanged,
|
||||
this, &CatalogTablesPage::tableListTable_layoutChanged);
|
||||
|
|
@ -117,10 +111,11 @@ void CatalogTablesPage::setNamespaceFilter(NamespaceFilter filter)
|
|||
|
||||
void CatalogTablesPage::tableListTable_currentRowChanged(const QModelIndex ¤t, const QModelIndex &previous)
|
||||
{
|
||||
if (current.row() != previous.row()) {
|
||||
auto table = m_tablesTableView.rowItemForProxyIndex(current);
|
||||
selectedTableChanged(table);
|
||||
}
|
||||
if (current.row() == previous.row())
|
||||
return;
|
||||
|
||||
auto table = m_tablesTableView.rowItemForProxyIndex(current);
|
||||
selectedTableChanged(table);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -160,8 +155,9 @@ void CatalogTablesPage::updateSqlTab(const std::optional<PgClass> &table)
|
|||
|
||||
QString drop_sql;
|
||||
QString create_sql;
|
||||
// create table
|
||||
create_sql += table->createSql();
|
||||
// table
|
||||
drop_sql += table->dropSql() % "\n";
|
||||
create_sql += table->createSql() % "\n";
|
||||
// - columns
|
||||
// - constraints
|
||||
// table details (inherits etc)
|
||||
|
|
@ -194,10 +190,7 @@ void CatalogTablesPage::updateSqlTab(const std::optional<PgClass> &table)
|
|||
|
||||
// Comments
|
||||
create_sql += "-- set Comments table + columns\n";
|
||||
if (!table->description.isEmpty()) {
|
||||
create_sql += "COMMENT ON TABLE " + table->fullyQualifiedQuotedObjectName()
|
||||
+ " IS " + dollarQuoteString(table->description) + ";\n";
|
||||
}
|
||||
create_sql += table->commentSql() % "\n";
|
||||
|
||||
auto && cols = m_catalog->attributes()->getColumnsForRelation(table->oid());
|
||||
for (auto && col : cols) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue