Hi, Please find the attached patch to fix #3191 : Debug option is not working.
Issues fixed: 1. EPAS packages' function/procedure does not honour INOUT arguments, it converts INOUT to OUT. 2. Packages' functions and procedures are not getting listed in their respected nodes in some scenarios like procedure having INOUT argument and function with void return type 3. The Reverse engineering SQL is not correct for Packages' functions/procedures 4. In case of INOUT argument, debugger asks for mendatory input which should not. Thanks, Khushboo
diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/__init__.py index b1b7521..8f0e712 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/__init__.py @@ -391,32 +391,13 @@ class EdbFuncView(PGChildNodeView, DataTypeReader): proargmodenames = {'i': 'IN', 'o': 'OUT', 'b': 'INOUT', 'v': 'VARIADIC', 't': 'TABLE'} - # The proargtypes doesn't give OUT params, so we need to fetch - # those from database explicitly, below code is written for this - # purpose. - # - # proallargtypes gives all the Function's argument including OUT, - # but we have not used that column; as the data type of this - # column (i.e. oid[]) is not supported by oidvectortypes(oidvector) - # function which we have used to fetch the datatypes - # of the other parameters. + # EPAS explicitly converts OUT to INOUT, So we always have proargtypes proargmodes_fltrd = copy.deepcopy(proargmodes) proargnames_fltrd = [] cnt = 0 for m in proargmodes: - if m == 'o': # Out Mode - SQL = render_template("/".join([self.sql_template_path, - 'get_out_types.sql']), - out_arg_oid=proallargtypes[cnt]) - status, out_arg_type = self.conn.execute_scalar(SQL) - if not status: - return internal_server_error(errormsg=out_arg_type) - - # Insert out parameter datatype - proargtypes.insert(cnt, out_arg_type) - proargdefaultvals.insert(cnt, '') - elif m == 'v': # Variadic Mode + if m in ['v', 'o']: # Out / Variadic Mode proargdefaultvals.insert(cnt, '') elif m == 't': # Table Mode proargmodes_fltrd.remove(m) @@ -532,8 +513,7 @@ class EdbFuncView(PGChildNodeView, DataTypeReader): """ SQL = render_template( "/".join([self.sql_template_path, 'get_body.sql']), - scid=scid, - pkgid=pkgid) + edbfnid=edbfnid) status, res = self.conn.execute_dict(SQL) if not status: @@ -543,7 +523,7 @@ class EdbFuncView(PGChildNodeView, DataTypeReader): gettext("Could not find the function in the database.") ) - body = self.get_inner(res['rows'][0]['pkgbodysrc']) + body = res['rows'][0]['funcdef'] if body is None: body = '' diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/11_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/11_plus/get_oid.sql new file mode 100644 index 0000000..8908a27 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/11_plus/get_oid.sql @@ -0,0 +1,17 @@ +SELECT + pr.oid, pr.proname || '(' || COALESCE(pg_catalog + .pg_get_function_identity_arguments(pr.oid), '') || ')' as name, + lanname, pg_get_userbyid(proowner) as funcowner +FROM + pg_proc pr +JOIN + pg_type typ ON typ.oid=prorettype +JOIN + pg_language lng ON lng.oid=prolang +JOIN + pg_namespace nsp ON nsp.oid=pr.pronamespace + AND nsp.nspname={{ nspname|qtLiteral }} +WHERE + pr.prokind IN ('f', 'w') + AND typname NOT IN ('trigger', 'event_trigger') + AND pr.proname = {{ name|qtLiteral }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/11_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/11_plus/properties.sql new file mode 100644 index 0000000..a0cc7d7 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/11_plus/properties.sql @@ -0,0 +1,27 @@ +SELECT pg_proc.oid, + proname AS name, + pronargs, + proallargtypes, + proargnames AS argnames, + pronargdefaults, + oidvectortypes(proargtypes) AS proargtypenames, + proargdeclaredmodes AS proargmodes, + proargnames, + pg_get_expr(proargdefaults, 'pg_catalog.pg_class'::regclass) AS proargdefaultvals, + pg_get_userbyid(proowner) AS funcowner, + pg_get_function_result(pg_proc.oid) AS prorettypename, + prosrc, + lanname, + CASE + WHEN proaccess = '+' THEN 'Public' + WHEN proaccess = '-' THEN 'Private' + ELSE 'Unknown' END AS visibility +FROM pg_proc, pg_namespace, pg_language lng +WHERE pr.prokind IN ('f', 'w') +AND pronamespace = {{pkgid}}::oid +AND pg_proc.pronamespace = pg_namespace.oid +AND lng.oid=prolang +{% if edbfnid %} +AND pg_proc.oid = {{edbfnid}}::oid +{% endif %} + ORDER BY name diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/get_body.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/get_body.sql deleted file mode 100644 index ad47f2e..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/get_body.sql +++ /dev/null @@ -1,5 +0,0 @@ -SELECT pg_catalog.edb_get_packagebodydef(nsp.oid) AS pkgbodysrc -FROM pg_namespace nsp -LEFT OUTER JOIN pg_description des ON (des.objoid=nsp.oid AND des.classoid='pg_namespace'::regclass) -WHERE nspparent = {{scid}}::oid -AND nsp.oid = {{pkgid}}::oid; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/get_name.sql deleted file mode 100644 index 7410b71..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/get_name.sql +++ /dev/null @@ -1,3 +0,0 @@ -SELECT proname AS name -FROM pg_proc -WHERE oid = {{edbfnid}}::oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/get_oid.sql deleted file mode 100644 index 2bc76a2..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/get_oid.sql +++ /dev/null @@ -1,17 +0,0 @@ -SELECT - pr.oid, pr.proname || '(' || COALESCE(pg_catalog - .pg_get_function_identity_arguments(pr.oid), '') || ')' as name, - lanname, pg_get_userbyid(proowner) as funcowner -FROM - pg_proc pr -JOIN - pg_type typ ON typ.oid=prorettype -JOIN - pg_language lng ON lng.oid=prolang -JOIN - pg_namespace nsp ON nsp.oid=pr.pronamespace - AND nsp.nspname={{ nspname|qtLiteral }} -WHERE - proisagg = FALSE - AND typname NOT IN ('trigger', 'event_trigger') - AND pr.proname = {{ name|qtLiteral }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/get_schema.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/get_schema.sql deleted file mode 100644 index 127d4b9..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/get_schema.sql +++ /dev/null @@ -1,6 +0,0 @@ -SELECT - nspname -FROM - pg_namespace -WHERE - oid = {{ scid }}::oid; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/node.sql deleted file mode 100644 index 44e3456..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/node.sql +++ /dev/null @@ -1,11 +0,0 @@ -SELECT pg_proc.oid, - pg_proc.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pg_proc.oid), '') || ')' AS name, - pg_get_userbyid(proowner) AS funcowner -FROM pg_proc, pg_namespace -WHERE format_type(prorettype, NULL) != 'void' -{% if fnid %} -AND pg_proc.oid = {{ fnid|qtLiteral }} -{% endif %} -AND pronamespace = {{ pkgid|qtLiteral }}::oid -AND pg_proc.pronamespace = pg_namespace.oid -ORDER BY pg_proc.proname diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/properties.sql deleted file mode 100644 index 6576daf..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/properties.sql +++ /dev/null @@ -1,27 +0,0 @@ -SELECT pg_proc.oid, - proname AS name, - pronargs, - proallargtypes, - proargnames AS argnames, - pronargdefaults, - oidvectortypes(proargtypes) AS proargtypenames, - proargmodes, - proargnames, - pg_get_expr(proargdefaults, 'pg_catalog.pg_class'::regclass) AS proargdefaultvals, - pg_get_userbyid(proowner) AS funcowner, - pg_get_function_result(pg_proc.oid) AS prorettypename, - prosrc, - lanname, - CASE - WHEN proaccess = '+' THEN 'Public' - WHEN proaccess = '-' THEN 'Private' - ELSE 'Unknown' END AS visibility -FROM pg_proc, pg_namespace, pg_language lng -WHERE format_type(prorettype, NULL) != 'void' -AND pronamespace = {{pkgid}}::oid -AND pg_proc.pronamespace = pg_namespace.oid -AND lng.oid=prolang -{% if edbfnid %} -AND pg_proc.oid = {{edbfnid}}::oid -{% endif %} - ORDER BY name diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/stats.sql deleted file mode 100644 index 2e276b6..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.1_plus/stats.sql +++ /dev/null @@ -1,8 +0,0 @@ -SELECT - calls AS {{ conn|qtIdent(_('Number of calls')) }}, - total_time AS {{ conn|qtIdent(_('Total time')) }}, - self_time AS {{ conn|qtIdent(_('Self time')) }} -FROM - pg_stat_user_functions -WHERE - funcid = {{fnid}}::OID diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/get_body.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/get_body.sql deleted file mode 100644 index 72675f4..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/get_body.sql +++ /dev/null @@ -1,6 +0,0 @@ -SELECT pg_catalog.edb_get_packagebodydef(nsp.oid) AS pkgbodysrc -FROM pg_namespace nsp -LEFT OUTER JOIN pg_description des ON (des.objoid=nsp.oid AND des.classoid='pg_namespace'::regclass) -WHERE nspparent = {{scid}}::oid -AND nsp.oid = {{pkgid}}::oid -AND nspobjecttype = 0; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/get_name.sql deleted file mode 100644 index 7410b71..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/get_name.sql +++ /dev/null @@ -1,3 +0,0 @@ -SELECT proname AS name -FROM pg_proc -WHERE oid = {{edbfnid}}::oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/get_oid.sql deleted file mode 100644 index 2bc76a2..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/get_oid.sql +++ /dev/null @@ -1,17 +0,0 @@ -SELECT - pr.oid, pr.proname || '(' || COALESCE(pg_catalog - .pg_get_function_identity_arguments(pr.oid), '') || ')' as name, - lanname, pg_get_userbyid(proowner) as funcowner -FROM - pg_proc pr -JOIN - pg_type typ ON typ.oid=prorettype -JOIN - pg_language lng ON lng.oid=prolang -JOIN - pg_namespace nsp ON nsp.oid=pr.pronamespace - AND nsp.nspname={{ nspname|qtLiteral }} -WHERE - proisagg = FALSE - AND typname NOT IN ('trigger', 'event_trigger') - AND pr.proname = {{ name|qtLiteral }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/get_schema.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/get_schema.sql deleted file mode 100644 index 127d4b9..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/get_schema.sql +++ /dev/null @@ -1,6 +0,0 @@ -SELECT - nspname -FROM - pg_namespace -WHERE - oid = {{ scid }}::oid; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/node.sql deleted file mode 100644 index 9a58068..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/node.sql +++ /dev/null @@ -1,10 +0,0 @@ -SELECT pg_proc.oid, - pg_proc.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pg_proc.oid), '') || ')' AS name, - pg_get_userbyid(proowner) AS funcowner -FROM pg_proc, pg_namespace -WHERE format_type(prorettype, NULL) != 'void' -{% if fnid %} -AND pg_proc.oid = {{ fnid|qtLiteral }} -{% endif %} -AND pronamespace = {{pkgid|qtLiteral}}::oid -AND pg_proc.pronamespace = pg_namespace.oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/properties.sql deleted file mode 100644 index 6576daf..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/properties.sql +++ /dev/null @@ -1,27 +0,0 @@ -SELECT pg_proc.oid, - proname AS name, - pronargs, - proallargtypes, - proargnames AS argnames, - pronargdefaults, - oidvectortypes(proargtypes) AS proargtypenames, - proargmodes, - proargnames, - pg_get_expr(proargdefaults, 'pg_catalog.pg_class'::regclass) AS proargdefaultvals, - pg_get_userbyid(proowner) AS funcowner, - pg_get_function_result(pg_proc.oid) AS prorettypename, - prosrc, - lanname, - CASE - WHEN proaccess = '+' THEN 'Public' - WHEN proaccess = '-' THEN 'Private' - ELSE 'Unknown' END AS visibility -FROM pg_proc, pg_namespace, pg_language lng -WHERE format_type(prorettype, NULL) != 'void' -AND pronamespace = {{pkgid}}::oid -AND pg_proc.pronamespace = pg_namespace.oid -AND lng.oid=prolang -{% if edbfnid %} -AND pg_proc.oid = {{edbfnid}}::oid -{% endif %} - ORDER BY name diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/stats.sql deleted file mode 100644 index 2e276b6..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/9.2_plus/stats.sql +++ /dev/null @@ -1,8 +0,0 @@ -SELECT - calls AS {{ conn|qtIdent(_('Number of calls')) }}, - total_time AS {{ conn|qtIdent(_('Total time')) }}, - self_time AS {{ conn|qtIdent(_('Self time')) }} -FROM - pg_stat_user_functions -WHERE - funcid = {{fnid}}::OID diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/get_body.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/get_body.sql new file mode 100644 index 0000000..d82e09f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/get_body.sql @@ -0,0 +1 @@ +SELECT pg_get_functiondef({{edbfnid}}::oid) AS funcdef; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/get_name.sql new file mode 100644 index 0000000..7410b71 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/get_name.sql @@ -0,0 +1,3 @@ +SELECT proname AS name +FROM pg_proc +WHERE oid = {{edbfnid}}::oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/get_oid.sql new file mode 100644 index 0000000..2bc76a2 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/get_oid.sql @@ -0,0 +1,17 @@ +SELECT + pr.oid, pr.proname || '(' || COALESCE(pg_catalog + .pg_get_function_identity_arguments(pr.oid), '') || ')' as name, + lanname, pg_get_userbyid(proowner) as funcowner +FROM + pg_proc pr +JOIN + pg_type typ ON typ.oid=prorettype +JOIN + pg_language lng ON lng.oid=prolang +JOIN + pg_namespace nsp ON nsp.oid=pr.pronamespace + AND nsp.nspname={{ nspname|qtLiteral }} +WHERE + proisagg = FALSE + AND typname NOT IN ('trigger', 'event_trigger') + AND pr.proname = {{ name|qtLiteral }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/get_schema.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/get_schema.sql new file mode 100644 index 0000000..127d4b9 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/get_schema.sql @@ -0,0 +1,6 @@ +SELECT + nspname +FROM + pg_namespace +WHERE + oid = {{ scid }}::oid; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/node.sql new file mode 100644 index 0000000..a7d00be --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/node.sql @@ -0,0 +1,10 @@ +SELECT pg_proc.oid, + pg_proc.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pg_proc.oid), '') || ')' AS name, + pg_get_userbyid(proowner) AS funcowner +FROM pg_proc, pg_namespace +WHERE protype = '0'::char +{% if fnid %} +AND pg_proc.oid = {{ fnid|qtLiteral }} +{% endif %} +AND pronamespace = {{pkgid|qtLiteral}}::oid +AND pg_proc.pronamespace = pg_namespace.oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/properties.sql new file mode 100644 index 0000000..dcc540d --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/properties.sql @@ -0,0 +1,27 @@ +SELECT pg_proc.oid, + proname AS name, + pronargs, + proallargtypes, + proargnames AS argnames, + pronargdefaults, + oidvectortypes(proargtypes) AS proargtypenames, + proargdeclaredmodes AS proargmodes, + proargnames, + pg_get_expr(proargdefaults, 'pg_catalog.pg_class'::regclass) AS proargdefaultvals, + pg_get_userbyid(proowner) AS funcowner, + pg_get_function_result(pg_proc.oid) AS prorettypename, + prosrc, + lanname, + CASE + WHEN proaccess = '+' THEN 'Public' + WHEN proaccess = '-' THEN 'Private' + ELSE 'Unknown' END AS visibility +FROM pg_proc, pg_namespace, pg_language lng +WHERE protype = '0'::char +AND pronamespace = {{pkgid}}::oid +AND pg_proc.pronamespace = pg_namespace.oid +AND lng.oid=prolang +{% if edbfnid %} +AND pg_proc.oid = {{edbfnid}}::oid +{% endif %} + ORDER BY name diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/stats.sql new file mode 100644 index 0000000..2e276b6 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbfunc/ppas/default/stats.sql @@ -0,0 +1,8 @@ +SELECT + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + funcid = {{fnid}}::OID diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/11_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/11_plus/get_oid.sql new file mode 100644 index 0000000..acd5069 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/11_plus/get_oid.sql @@ -0,0 +1,17 @@ +SELECT + pr.oid, pr.proname || '(' || COALESCE(pg_catalog + .pg_get_function_identity_arguments(pr.oid), '') || ')' as name, + lanname, pg_get_userbyid(proowner) as funcowner +FROM + pg_proc pr +JOIN + pg_type typ ON typ.oid=prorettype +JOIN + pg_language lng ON lng.oid=prolang +JOIN + pg_namespace nsp ON nsp.oid=pr.pronamespace + AND nsp.nspname={{ nspname|qtLiteral }} +WHERE + pr.prokind = 'p' + AND typname NOT IN ('trigger', 'event_trigger') + AND pr.proname = {{ name|qtLiteral }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/11_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/11_plus/properties.sql new file mode 100644 index 0000000..3f6f671 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/11_plus/properties.sql @@ -0,0 +1,27 @@ +SELECT pg_proc.oid, + proname AS name, + pronargs, + proallargtypes, + proargnames AS argnames, + pronargdefaults, + oidvectortypes(proargtypes) AS proargtypenames, + proargdeclaredmodes AS proargmodes, + proargnames, + pg_get_expr(proargdefaults, 'pg_catalog.pg_class'::regclass) AS proargdefaultvals, + pg_get_userbyid(proowner) AS funcowner, + pg_get_function_result(pg_proc.oid) AS prorettypename, + prosrc, + lanname, + CASE + WHEN proaccess = '+' THEN 'Public' + WHEN proaccess = '-' THEN 'Private' + ELSE 'Unknown' END AS visibility +FROM pg_proc, pg_namespace, pg_language lng +WHERE pr.prokind = 'p' +AND pronamespace = {{pkgid}}::oid +AND pg_proc.pronamespace = pg_namespace.oid +AND lng.oid=prolang +{% if edbfnid %} +AND pg_proc.oid = {{edbfnid}}::oid +{% endif %} + ORDER BY name diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/get_body.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/get_body.sql deleted file mode 100644 index ad47f2e..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/get_body.sql +++ /dev/null @@ -1,5 +0,0 @@ -SELECT pg_catalog.edb_get_packagebodydef(nsp.oid) AS pkgbodysrc -FROM pg_namespace nsp -LEFT OUTER JOIN pg_description des ON (des.objoid=nsp.oid AND des.classoid='pg_namespace'::regclass) -WHERE nspparent = {{scid}}::oid -AND nsp.oid = {{pkgid}}::oid; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/get_name.sql deleted file mode 100644 index 7410b71..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/get_name.sql +++ /dev/null @@ -1,3 +0,0 @@ -SELECT proname AS name -FROM pg_proc -WHERE oid = {{edbfnid}}::oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/get_oid.sql deleted file mode 100644 index 2bc76a2..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/get_oid.sql +++ /dev/null @@ -1,17 +0,0 @@ -SELECT - pr.oid, pr.proname || '(' || COALESCE(pg_catalog - .pg_get_function_identity_arguments(pr.oid), '') || ')' as name, - lanname, pg_get_userbyid(proowner) as funcowner -FROM - pg_proc pr -JOIN - pg_type typ ON typ.oid=prorettype -JOIN - pg_language lng ON lng.oid=prolang -JOIN - pg_namespace nsp ON nsp.oid=pr.pronamespace - AND nsp.nspname={{ nspname|qtLiteral }} -WHERE - proisagg = FALSE - AND typname NOT IN ('trigger', 'event_trigger') - AND pr.proname = {{ name|qtLiteral }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/get_schema.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/get_schema.sql deleted file mode 100644 index 127d4b9..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/get_schema.sql +++ /dev/null @@ -1,6 +0,0 @@ -SELECT - nspname -FROM - pg_namespace -WHERE - oid = {{ scid }}::oid; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/node.sql deleted file mode 100644 index 4d2a0df..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/node.sql +++ /dev/null @@ -1,10 +0,0 @@ -SELECT pg_proc.oid, - pg_proc.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pg_proc.oid), '') || ')' AS name, - pg_get_userbyid(proowner) AS funcowner -FROM pg_proc, pg_namespace -WHERE format_type(prorettype, NULL) = 'void' -{% if fnid %} -AND pg_proc.oid = {{ fnid|qtLiteral }} -{% endif %} -AND pronamespace = {{pkgid|qtLiteral}}::oid -AND pg_proc.pronamespace = pg_namespace.oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/properties.sql deleted file mode 100644 index 0677233..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/properties.sql +++ /dev/null @@ -1,27 +0,0 @@ -SELECT pg_proc.oid, - proname AS name, - pronargs, - proallargtypes, - proargnames AS argnames, - pronargdefaults, - oidvectortypes(proargtypes) AS proargtypenames, - proargmodes, - proargnames, - pg_get_expr(proargdefaults, 'pg_catalog.pg_class'::regclass) AS proargdefaultvals, - pg_get_userbyid(proowner) AS funcowner, - pg_get_function_result(pg_proc.oid) AS prorettypename, - prosrc, - lanname, - CASE - WHEN proaccess = '+' THEN 'Public' - WHEN proaccess = '-' THEN 'Private' - ELSE 'Unknown' END AS visibility -FROM pg_proc, pg_namespace, pg_language lng -WHERE format_type(prorettype, NULL) = 'void' -AND pronamespace = {{pkgid}}::oid -AND pg_proc.pronamespace = pg_namespace.oid -AND lng.oid=prolang -{% if edbfnid %} -AND pg_proc.oid = {{edbfnid}}::oid -{% endif %} - ORDER BY name diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/stats.sql deleted file mode 100644 index 2e276b6..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.1_plus/stats.sql +++ /dev/null @@ -1,8 +0,0 @@ -SELECT - calls AS {{ conn|qtIdent(_('Number of calls')) }}, - total_time AS {{ conn|qtIdent(_('Total time')) }}, - self_time AS {{ conn|qtIdent(_('Self time')) }} -FROM - pg_stat_user_functions -WHERE - funcid = {{fnid}}::OID diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/get_body.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/get_body.sql deleted file mode 100644 index 72675f4..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/get_body.sql +++ /dev/null @@ -1,6 +0,0 @@ -SELECT pg_catalog.edb_get_packagebodydef(nsp.oid) AS pkgbodysrc -FROM pg_namespace nsp -LEFT OUTER JOIN pg_description des ON (des.objoid=nsp.oid AND des.classoid='pg_namespace'::regclass) -WHERE nspparent = {{scid}}::oid -AND nsp.oid = {{pkgid}}::oid -AND nspobjecttype = 0; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/get_name.sql deleted file mode 100644 index 7410b71..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/get_name.sql +++ /dev/null @@ -1,3 +0,0 @@ -SELECT proname AS name -FROM pg_proc -WHERE oid = {{edbfnid}}::oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/get_oid.sql deleted file mode 100644 index 2bc76a2..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/get_oid.sql +++ /dev/null @@ -1,17 +0,0 @@ -SELECT - pr.oid, pr.proname || '(' || COALESCE(pg_catalog - .pg_get_function_identity_arguments(pr.oid), '') || ')' as name, - lanname, pg_get_userbyid(proowner) as funcowner -FROM - pg_proc pr -JOIN - pg_type typ ON typ.oid=prorettype -JOIN - pg_language lng ON lng.oid=prolang -JOIN - pg_namespace nsp ON nsp.oid=pr.pronamespace - AND nsp.nspname={{ nspname|qtLiteral }} -WHERE - proisagg = FALSE - AND typname NOT IN ('trigger', 'event_trigger') - AND pr.proname = {{ name|qtLiteral }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/get_schema.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/get_schema.sql deleted file mode 100644 index 127d4b9..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/get_schema.sql +++ /dev/null @@ -1,6 +0,0 @@ -SELECT - nspname -FROM - pg_namespace -WHERE - oid = {{ scid }}::oid; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/node.sql deleted file mode 100644 index 4d2a0df..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/node.sql +++ /dev/null @@ -1,10 +0,0 @@ -SELECT pg_proc.oid, - pg_proc.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pg_proc.oid), '') || ')' AS name, - pg_get_userbyid(proowner) AS funcowner -FROM pg_proc, pg_namespace -WHERE format_type(prorettype, NULL) = 'void' -{% if fnid %} -AND pg_proc.oid = {{ fnid|qtLiteral }} -{% endif %} -AND pronamespace = {{pkgid|qtLiteral}}::oid -AND pg_proc.pronamespace = pg_namespace.oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/properties.sql deleted file mode 100644 index 0677233..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/properties.sql +++ /dev/null @@ -1,27 +0,0 @@ -SELECT pg_proc.oid, - proname AS name, - pronargs, - proallargtypes, - proargnames AS argnames, - pronargdefaults, - oidvectortypes(proargtypes) AS proargtypenames, - proargmodes, - proargnames, - pg_get_expr(proargdefaults, 'pg_catalog.pg_class'::regclass) AS proargdefaultvals, - pg_get_userbyid(proowner) AS funcowner, - pg_get_function_result(pg_proc.oid) AS prorettypename, - prosrc, - lanname, - CASE - WHEN proaccess = '+' THEN 'Public' - WHEN proaccess = '-' THEN 'Private' - ELSE 'Unknown' END AS visibility -FROM pg_proc, pg_namespace, pg_language lng -WHERE format_type(prorettype, NULL) = 'void' -AND pronamespace = {{pkgid}}::oid -AND pg_proc.pronamespace = pg_namespace.oid -AND lng.oid=prolang -{% if edbfnid %} -AND pg_proc.oid = {{edbfnid}}::oid -{% endif %} - ORDER BY name diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/stats.sql deleted file mode 100644 index 2e276b6..0000000 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/9.2_plus/stats.sql +++ /dev/null @@ -1,8 +0,0 @@ -SELECT - calls AS {{ conn|qtIdent(_('Number of calls')) }}, - total_time AS {{ conn|qtIdent(_('Total time')) }}, - self_time AS {{ conn|qtIdent(_('Self time')) }} -FROM - pg_stat_user_functions -WHERE - funcid = {{fnid}}::OID diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/get_body.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/get_body.sql new file mode 100644 index 0000000..d82e09f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/get_body.sql @@ -0,0 +1 @@ +SELECT pg_get_functiondef({{edbfnid}}::oid) AS funcdef; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/get_name.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/get_name.sql new file mode 100644 index 0000000..7410b71 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/get_name.sql @@ -0,0 +1,3 @@ +SELECT proname AS name +FROM pg_proc +WHERE oid = {{edbfnid}}::oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/get_oid.sql new file mode 100644 index 0000000..2bc76a2 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/get_oid.sql @@ -0,0 +1,17 @@ +SELECT + pr.oid, pr.proname || '(' || COALESCE(pg_catalog + .pg_get_function_identity_arguments(pr.oid), '') || ')' as name, + lanname, pg_get_userbyid(proowner) as funcowner +FROM + pg_proc pr +JOIN + pg_type typ ON typ.oid=prorettype +JOIN + pg_language lng ON lng.oid=prolang +JOIN + pg_namespace nsp ON nsp.oid=pr.pronamespace + AND nsp.nspname={{ nspname|qtLiteral }} +WHERE + proisagg = FALSE + AND typname NOT IN ('trigger', 'event_trigger') + AND pr.proname = {{ name|qtLiteral }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/get_schema.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/get_schema.sql new file mode 100644 index 0000000..127d4b9 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/get_schema.sql @@ -0,0 +1,6 @@ +SELECT + nspname +FROM + pg_namespace +WHERE + oid = {{ scid }}::oid; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/node.sql new file mode 100644 index 0000000..4aabd45 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/node.sql @@ -0,0 +1,10 @@ +SELECT pg_proc.oid, + pg_proc.proname || '(' || COALESCE(pg_catalog.pg_get_function_identity_arguments(pg_proc.oid), '') || ')' AS name, + pg_get_userbyid(proowner) AS funcowner +FROM pg_proc, pg_namespace +WHERE protype = '1'::char +{% if fnid %} +AND pg_proc.oid = {{ fnid|qtLiteral }} +{% endif %} +AND pronamespace = {{pkgid|qtLiteral}}::oid +AND pg_proc.pronamespace = pg_namespace.oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/properties.sql new file mode 100644 index 0000000..fb90c34 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/properties.sql @@ -0,0 +1,27 @@ +SELECT pg_proc.oid, + proname AS name, + pronargs, + proallargtypes, + proargnames AS argnames, + pronargdefaults, + oidvectortypes(proargtypes) AS proargtypenames, + proargmodes, + proargnames, + pg_get_expr(proargdefaults, 'pg_catalog.pg_class'::regclass) AS proargdefaultvals, + pg_get_userbyid(proowner) AS funcowner, + pg_get_function_result(pg_proc.oid) AS prorettypename, + prosrc, + lanname, + CASE + WHEN proaccess = '+' THEN 'Public' + WHEN proaccess = '-' THEN 'Private' + ELSE 'Unknown' END AS visibility +FROM pg_proc, pg_namespace, pg_language lng +WHERE protype = '1'::char +AND pronamespace = {{pkgid}}::oid +AND pg_proc.pronamespace = pg_namespace.oid +AND lng.oid=prolang +{% if edbfnid %} +AND pg_proc.oid = {{edbfnid}}::oid +{% endif %} + ORDER BY name diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/stats.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/stats.sql new file mode 100644 index 0000000..2e276b6 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/templates/edbproc/ppas/default/stats.sql @@ -0,0 +1,8 @@ +SELECT + calls AS {{ conn|qtIdent(_('Number of calls')) }}, + total_time AS {{ conn|qtIdent(_('Total time')) }}, + self_time AS {{ conn|qtIdent(_('Self time')) }} +FROM + pg_stat_user_functions +WHERE + funcid = {{fnid}}::OID diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/tests/__init__.py new file mode 100644 index 0000000..c895db1 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/tests/__init__.py @@ -0,0 +1,16 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2018, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class PackageEDBFuncsTestGenerator(BaseTestGenerator): + + def runTest(self): + return diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/tests/test_package_edbfuncs_get.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/tests/test_package_edbfuncs_get.py new file mode 100644 index 0000000..a78f53f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/edbfuncs/tests/test_package_edbfuncs_get.py @@ -0,0 +1,134 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2018, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +import uuid +import json +from pgadmin.browser.server_groups.servers.databases.schemas.tests import \ + utils as schema_utils +from pgadmin.browser.server_groups.servers.databases.tests import utils as \ + database_utils +from pgadmin.utils import server_utils as server_utils +from pgadmin.utils.route import BaseTestGenerator +from regression import parent_node_dict +from regression.python_test_utils import test_utils as utils + + +class PackageEDBFuncsGetTestCase(BaseTestGenerator): + """ This class will fetch functions/procedures of package + under test schema. """ + skip_on_database = ['gpdb', 'pg'] + + scenarios = [ + # Fetching default URL for package node. + ('Fetch Package Functions/Procedures URL', dict( + url='/browser/{0}/nodes/')) + ] + + def setUp(self): + super(PackageEDBFuncsGetTestCase, self).setUp() + schema_info = parent_node_dict["schema"][-1] + self.schema_id = schema_info["schema_id"] + self.schema_name = schema_info["schema_name"] + self.db_name = parent_node_dict["database"][-1]["db_name"] + self.pkg_name = "pkg_%s" % str(uuid.uuid4())[1:8] + self.proc_name = "proc_%s" % str(uuid.uuid4())[1:8] + self.func_name = "func_%s" % str(uuid.uuid4())[1:8] + self.server_id = schema_info["server_id"] + self.db_id = schema_info["db_id"] + server_con = server_utils.connect_server(self, self.server_id) + + connection = utils.get_db_connection(self.db_name, + self.server['username'], + self.server['db_password'], + self.server['host'], + self.server['port'], + self.server['sslmode']) + pg_cursor = connection.cursor() + query = """ + CREATE OR REPLACE PACKAGE %s.%s +IS + emp_name character varying(10); + PROCEDURE %s(INOUT p_empno numeric); + FUNCTION %s() RETURN integer; +END %s; + + +CREATE OR REPLACE PACKAGE BODY %s.%s +IS + v_counter integer; + PROCEDURE %s(INOUT p_empno numeric) IS + BEGIN + SELECT ename INTO emp_name FROM emp WHERE empno = p_empno; + v_counter := v_counter + 1; + END; + FUNCTION %s() RETURN integer IS + BEGIN + RETURN v_counter; + END; +END %s;""" % (self.schema_name, self.pkg_name, self.proc_name, + self.func_name, self.pkg_name, + self.schema_name, self.pkg_name, + self.proc_name, self.func_name, self.pkg_name) + + pg_cursor.execute(query) + connection.commit() + # Get 'oid' from newly created package + pg_cursor.execute("SELECT oid FROM pg_namespace WHERE nspname='%s'" % + self.pkg_name) + self.package_id = pg_cursor.fetchone()[0] + connection.close() + + def runTest(self): + db_con = database_utils.connect_database(self, + utils.SERVER_GROUP, + self.server_id, + self.db_id) + + if not db_con["info"] == "Database connected.": + raise Exception("Could not connect to database.") + + schema_response = schema_utils.verify_schemas(self.server, + self.db_name, + self.schema_name) + if not schema_response: + raise Exception("Could not find the schema.") + + # Fetch Package function + url = self.url.format('edbfunc') + str(utils.SERVER_GROUP) + '/' +\ + str(self.server_id) + '/' + str(self.db_id) + '/' +\ + str(self.schema_id) + '/' +str(self.package_id) + "/" + response = self.tester.get(url, + content_type='html/json') + + response_data = json.loads(response.data.decode('utf-8')) + + self.assertEquals(response.status_code, 200) + self.assertEquals(len(response_data['data']), 1) + self.assertEquals(response_data['data'][0]['label'], self.func_name + '()') + self.assertEquals(response_data['data'][0]['_type'], 'edbfunc') + + # Fetch Package procedure + url = self.url.format('edbproc') + str(utils.SERVER_GROUP) + '/' +\ + str(self.server_id) + '/' + str(self.db_id) + '/' + \ + str(self.schema_id) + '/' + str(self.package_id) + "/" + response = self.tester.get(url, + content_type='html/json') + + response_data = json.loads(response.data.decode('utf-8')) + + self.assertEquals(response.status_code, 200) + self.assertEquals(len(response_data['data']), 1) + self.assertIn(self.proc_name, response_data['data'][0]['label']) + self.assertIn("INOUT", response_data['data'][0]['label']) + self.assertEquals(response_data['data'][0]['_type'], 'edbproc') + + def tearDown(self): + """This function disconnect the test database.""" + database_utils.disconnect_database(self, self.server_id, + self.db_id) diff --git a/web/pgadmin/tools/debugger/templates/debugger/sql/get_function_debug_info.sql b/web/pgadmin/tools/debugger/templates/debugger/sql/get_function_debug_info.sql index 2807cad..64195b5 100644 --- a/web/pgadmin/tools/debugger/templates/debugger/sql/get_function_debug_info.sql +++ b/web/pgadmin/tools/debugger/templates/debugger/sql/get_function_debug_info.sql @@ -26,7 +26,11 @@ SELECT pg_catalog.generate_series(0, pg_catalog.array_upper(proargtypes, 1)) s(i)), ',') END AS proargtypes, pg_catalog.array_to_string(p.proargnames, ',') AS proargnames, + {% if is_ppas_database %} + pg_catalog.array_to_string(proargdeclaredmodes, ',') AS proargmodes, + {% else %} pg_catalog.array_to_string(proargmodes, ',') AS proargmodes, + {% endif %} {% if is_ppas_database %} CASE WHEN n.nspparent <> 0 THEN n.oid ELSE 0 END AS pkg,