From ead3ce8a8ab594d268d059fbc60c55a2d7a60198 Mon Sep 17 00:00:00 2001 From: eelke Date: Sat, 26 Oct 2019 13:13:58 +0200 Subject: [PATCH] Show view definition --- pglablib/catalog/PgClass.cpp | 19 +++++++++++++++++++ pglablib/catalog/PgClass.h | 2 ++ pglablib/catalog/PgClassContainer.cpp | 6 +++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/pglablib/catalog/PgClass.cpp b/pglablib/catalog/PgClass.cpp index 3ae416b..aecb769 100644 --- a/pglablib/catalog/PgClass.cpp +++ b/pglablib/catalog/PgClass.cpp @@ -68,6 +68,8 @@ QString PgClass::createSql() const if (createSqlCache.isEmpty()) { if (kind == RelKind::Table) createSqlCache = createTableSql(); + else if (kind == RelKind::View) + createSqlCache = createViewSql(); } return createSqlCache; @@ -159,3 +161,20 @@ QString PgClass::createTableSql() const sql += ";\n"; return sql; } + +QString PgClass::createViewSql() const +{ + QString sql; + sql += "CREATE OR REPLACE VIEW " + fullyQualifiedQuotedObjectName(); + + // todo security_barrier + // todo check_option + + sql += " AS \n"; + sql += viewdef; + + // todo owner + + return sql; +} + diff --git a/pglablib/catalog/PgClass.h b/pglablib/catalog/PgClass.h index 3a8ff3f..f6c2aad 100644 --- a/pglablib/catalog/PgClass.h +++ b/pglablib/catalog/PgClass.h @@ -47,6 +47,7 @@ public: int frozenxid; int minmxid; std::vector options; + QString viewdef; using PgNamespaceObject::PgNamespaceObject; @@ -59,6 +60,7 @@ private: mutable QString createSqlCache; QString createTableSql() const; + QString createViewSql() const; }; #endif // PGCLASS_H diff --git a/pglablib/catalog/PgClassContainer.cpp b/pglablib/catalog/PgClassContainer.cpp index 4bb25cb..c34eab4 100644 --- a/pglablib/catalog/PgClassContainer.cpp +++ b/pglablib/catalog/PgClassContainer.cpp @@ -11,7 +11,7 @@ std::string PgClassContainer::getLoadQuery() const " relowner, relam, relfilenode, reltablespace, relpages, " " reltuples, reltoastrelid, relisshared, relpersistence, " " relkind, relispopulated, relfrozenxid, relminmxid, " - " reloptions, relacl"; + " reloptions, relacl, pg_get_viewdef(oid)"; if (lessThenVersion(120000)) q += ", relhasoids "; @@ -45,6 +45,10 @@ PgClass PgClassContainer::loadElem(const Pgsql::Row &row) col >> acl_list; v.setAcls(std::move(acl_list)); + auto vd = col.nextValue(); + if (!vd.null()) + v.viewdef = vd.asQString(); + if (lessThenVersion(120000)) col >> v.hasoids;