Show SQL for database

Also improvements to the SQL for tables and views.
This commit is contained in:
eelke 2022-01-20 20:13:56 +01:00
parent b5a706a2a2
commit 3158a4364b
12 changed files with 172 additions and 58 deletions

View file

@ -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:

View file

@ -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:

View file

@ -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 &current, const QModelIndex &previous)
{
if (current.row() == previous.row())
return;
auto db = m_databasesTableView.rowItemForProxyIndex(current);
updateDatabaseDetails(db);
}

View file

@ -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 &current, const QModelIndex &previous);
};

View file

@ -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 &current, 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) {