This commit is contained in:
81
dist/win-x64/postgres-standalone/share/extension/pldbgapi--1.0--1.1.sql
vendored
Normal file
81
dist/win-x64/postgres-standalone/share/extension/pldbgapi--1.0--1.1.sql
vendored
Normal file
@@ -0,0 +1,81 @@
|
||||
DO $do$
|
||||
|
||||
declare
|
||||
isedb bool;
|
||||
createstmt text;
|
||||
begin
|
||||
|
||||
isedb = (SELECT version() LIKE '%EnterpriseDB%');
|
||||
|
||||
createstmt := $create_stmt$
|
||||
|
||||
CREATE OR REPLACE FUNCTION pldbg_get_target_info(signature text, targetType "char") returns targetinfo AS $$
|
||||
SELECT p.oid AS target,
|
||||
pronamespace AS schema,
|
||||
pronargs::int4 AS nargs,
|
||||
-- The returned argtypes column is of type oidvector, but unlike
|
||||
-- proargtypes, it's supposed to include OUT params. So we
|
||||
-- essentially have to return proallargtypes, converted to an
|
||||
-- oidvector. There is no oid[] -> oidvector cast, so we have to
|
||||
-- do it via text.
|
||||
CASE WHEN proallargtypes IS NOT NULL THEN
|
||||
translate(proallargtypes::text, ',{}', ' ')::oidvector
|
||||
ELSE
|
||||
proargtypes
|
||||
END AS argtypes,
|
||||
proname AS targetname,
|
||||
proargmodes AS argmodes,
|
||||
proargnames AS proargnames,
|
||||
prolang AS targetlang,
|
||||
quote_ident(nspname) || '.' || quote_ident(proname) AS fqname,
|
||||
proretset AS returnsset,
|
||||
prorettype AS returntype,
|
||||
$create_stmt$;
|
||||
|
||||
-- Add the three EDB-columns to the query (as dummies if we're installing
|
||||
-- to PostgreSQL)
|
||||
IF isedb THEN
|
||||
createstmt := createstmt ||
|
||||
$create_stmt$
|
||||
p.protype='0' AS isfunc,
|
||||
CASE WHEN n.nspparent <> 0 THEN n.oid ELSE 0 END AS pkg,
|
||||
edb_get_func_defvals(p.oid) AS argdefvals
|
||||
$create_stmt$;
|
||||
ELSE
|
||||
createstmt := createstmt ||
|
||||
$create_stmt$
|
||||
't'::bool AS isfunc,
|
||||
0::oid AS pkg,
|
||||
NULL::text[] AS argdefvals
|
||||
$create_stmt$;
|
||||
END IF;
|
||||
-- End of conditional part
|
||||
|
||||
createstmt := createstmt ||
|
||||
$create_stmt$
|
||||
FROM pg_proc p, pg_namespace n
|
||||
WHERE p.pronamespace = n.oid
|
||||
AND p.oid = $1::oid
|
||||
-- We used to support querying by function name or trigger name/oid as well,
|
||||
-- but that was never used in the client, so the support for that has been
|
||||
-- removed. The targeType argument remains as a legacy of that. You're
|
||||
-- expected to pass 'o' as target type, but it doesn't do anything.
|
||||
AND $2 = 'o'
|
||||
$$ LANGUAGE SQL;
|
||||
$create_stmt$;
|
||||
|
||||
execute createstmt;
|
||||
|
||||
-- Add a couple of EDB specific functions
|
||||
IF isedb THEN
|
||||
CREATE OR REPLACE FUNCTION edb_oid_debug(functionOID oid) RETURNS integer AS $$
|
||||
select pldbg_oid_debug($1);
|
||||
$$ LANGUAGE SQL;
|
||||
|
||||
CREATE OR REPLACE FUNCTION pldbg_get_pkg_cons(packageOID oid) RETURNS oid AS $$
|
||||
select oid from pg_proc where pronamespace=$1 and proname='cons';
|
||||
$$ LANGUAGE SQL;
|
||||
END IF;
|
||||
|
||||
end;
|
||||
$do$;
|
||||
Reference in New Issue
Block a user