51 lines
1.4 KiB
C++
51 lines
1.4 KiB
C++
#include "PgProcContainer.h"
|
|
#include "Pgsql_Connection.h"
|
|
#include "Pgsql_Col.h"
|
|
#include "PgDatabaseCatalog.h"
|
|
#include <algorithm>
|
|
#include <iterator>
|
|
|
|
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;
|
|
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<Oid>(std::back_inserter(v.argtypes));
|
|
col >> v.allargtypes >> v.argmodes >> v.argnames
|
|
>> v.argdefaults;
|
|
col >> v.src;
|
|
col >> v.bin >> v.config >> v.acl;
|
|
|
|
v.setSchemaOid(namespace_oid);
|
|
|
|
if (minimumVersion(90500)) {
|
|
col >> v.trftypes;
|
|
}
|
|
if (minimumVersion(90600)) {
|
|
col >> v.parallel;
|
|
}
|
|
|
|
return v;
|
|
}
|