#include "PgProcContainer.h" #include "Pgsql_Connection.h" #include "Pgsql_Col.h" #include "PgDatabaseCatalog.h" #include #include std::string PgProcContainer::getLoadQuery() const { std::string column_list = "oid,proname,pronamespace,proowner,prolang,procost,prorows," "provariadic,protransform,proisagg,proiswindow,prosecdef,proleakproof," "proisstrict,proretset,provolatile,pronargs,pronargdefaults,prorettype," "proargtypes,proallargtypes,proargmodes,proargnames,proargdefaults," "prosrc,probin,proconfig,proacl"; if (minimumVersion(90500)) { column_list += ",protrftypes"; } if (minimumVersion(90600)) { column_list += ",proparallel"; } return "SELECT " + column_list + " FROM pg_proc"; } PgProc PgProcContainer::loadElem(const Pgsql::Row &row) { Pgsql::Col col(row); PgProc v(m_catalog); Oid namespace_oid; std::vector argtypes; // oid[] std::vector allargtypes; // oid[] std::vector argmodes; // char[] std::vector argnames; // text[] std::optional argdefaults; // pg_node_tree col >> v.oid >> v.name >> namespace_oid >> v.owner >> v.lang >> v.cost >> v.rows >> v.variadic >> v.transform >> v.isagg >> v.iswindow >> v.secdef >> v.leakproof >> v.isstrict >> v.retset >> v.provolatile >> v.nargs >> v.nargdefaults >> v.rettype; col.getAsVector(std::back_inserter(argtypes)); col >> allargtypes >> argmodes >> argnames >> argdefaults >> v.src >> v.bin >> v.config >> v.acl; v.setSchemaOid(namespace_oid); v.setArgs(argtypes, allargtypes, argmodes, argnames, argdefaults); if (minimumVersion(90500)) { col >> v.trftypes; } if (minimumVersion(90600)) { col >> v.parallel; } return v; }