diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py index 08f362fd1..9873ba37c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/__init__.py @@ -889,10 +889,31 @@ class FunctionView(PGChildNodeView, DataTypeReader): scid: Schema Id fnid: Function Id """ + resp_data = self._fetch_properties(gid, sid, did, scid, fnid) + # Fetch the function definition. + args = '' + cnt = 1 + if 'arguments' in resp_data: + for a in resp_data['arguments']: + if (('argmode' in a and a['argmode'] != 'OUT' and + a['argmode'] is not None + ) or 'argnode' not in a): + if 'argmode' in a: + args += a['argmode'] + " " + if 'argname' in a and a['argname'] != ''\ + and a['argname'] is not None: + args += self.qtIdent( + self.conn, a['argname']) + " " + if 'argtype' in a: + args += a['argtype'] + if cnt < len(resp_data['arguments']): + args += ', ' + cnt += 1 + + resp_data['func_args'] = args.strip(' ') if self.node_type == 'procedure': object_type = 'procedure' - resp_data = self._fetch_properties(gid, sid, did, scid, fnid) # Get SQL to create Function status, func_def = self._get_sql(gid, sid, did, scid, resp_data, @@ -901,16 +922,38 @@ class FunctionView(PGChildNodeView, DataTypeReader): return internal_server_error(errormsg=func_def) name = resp_data['pronamespace'] + "." + resp_data['name_with_args'] + + # Create mode + func_def = render_template("/".join([self.sql_template_path, + 'create.sql']), + data=resp_data, query_type="create") else: object_type = 'function' - # Fetch the function definition. + + # Get Schema Name from its OID. + if 'pronamespace' in resp_data: + resp_data['pronamespace'] = self._get_schema(resp_data[ + 'pronamespace']) + + # Parse privilege data + if 'acl' in resp_data: + resp_data['acl'] = parse_priv_to_db(resp_data['acl'], ['X']) + + # Create mode SQL = render_template("/".join([self.sql_template_path, - 'get_definition.sql']), fnid=fnid, scid=scid) + 'get_definition.sql'] + ), data=resp_data, + fnid=fnid, scid=scid) + status, res = self.conn.execute_2darray(SQL) if not status: return internal_server_error(errormsg=res) func_def, name = res['rows'][0] + # Create mode + func_def = render_template("/".join([self.sql_template_path, + 'create.sql']), + data=resp_data, query_type="create") sql_header = """-- {0}: {1} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.1_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.1_plus/create.sql index 62e61d3c3..efd777558 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.1_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.1_plus/create.sql @@ -3,22 +3,33 @@ {% import 'macros/functions/variable.macros' as VARIABLE %} {% set is_columns = [] %} {% if data %} -CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %} -{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtTypeIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} +CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %} +{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}}{% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} {% if not loop.last %},{% endif %} {% endfor %} {% endif -%} - ) +{% if data.func_args %} +{% set func_args = data.func_args.split(',') %} + +{% for f in func_args %} + {{ f|trim }}{% if not loop.last %}, +{% endif %} +{% endfor %} + +{% endif %} +) RETURNS{% if data.proretset %} SETOF{% endif %} {{ conn|qtTypeIdent(data.prorettypename) }} LANGUAGE {{ data.lanname|qtLiteral }} - {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proisstrict %}STRICT {% endif %}{% if data.prosecdef %}SECURITY DEFINER {% endif %}{% if data.proiswindow %}WINDOW{% endif -%}{% if data.procost %} - - COST {{data.procost}}{% endif %}{% if data.prorows %} - +{% if data.procost %} + COST {{data.procost}} +{% endif %} +{% if query_type != 'create' %} + {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proisstrict %}STRICT {% endif %}{% if data.prosecdef %}SECURITY DEFINER {% endif %}{% if data.proiswindow %}WINDOW{% endif -%} +{% if data.prorows %} ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %} SET {{ conn|qtIdent(v.name) }}={{ v.value|qtLiteral }}{% endfor %} -{% endif %} +{% endif %}{% endif %} AS {% if data.lanname == 'c' %} {{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.2_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.2_plus/create.sql index 6976a75b5..63585adb5 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.2_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.2_plus/create.sql @@ -3,25 +3,37 @@ {% import 'macros/functions/variable.macros' as VARIABLE %} {% set is_columns = [] %} {% if data %} -CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %} -{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtTypeIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} +CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %} +{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}}{% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} {% if not loop.last %},{% endif %} {% endfor %} {% endif -%} - ) +{% if data.func_args %} +{% set func_args = data.func_args.split(',') %} + +{% for f in func_args %} + {{ f|trim }}{% if not loop.last %}, +{% endif %} +{% endfor %} + +{% endif %} +) RETURNS{% if data.proretset %} SETOF{% endif %} {{ conn|qtTypeIdent(data.prorettypename) }} LANGUAGE {{ data.lanname|qtLiteral }} +{% if data.procost %} + COST {{data.procost}} +{% endif %} +{% if query_type != 'create' %} {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proleakproof %}LEAKPROOF {% else %}NOT LEAKPROOF {% endif %} {% if data.proisstrict %}STRICT {% endif %} {% if data.prosecdef %}SECURITY DEFINER {% endif %} -{% if data.proiswindow %}WINDOW{% endif %}{% if data.procost %} - - COST {{data.procost}}{% endif %}{% if data.prorows %} +{% if data.proiswindow %}WINDOW{% endif %} +{% if data.prorows %} ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %} SET {{ conn|qtIdent(v.name) }}={{ v.value|qtLiteral }}{% endfor %} -{% endif %} +{% endif %}{% endif %} AS {% if data.lanname == 'c' %} {{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.5_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.5_plus/create.sql index 102dc7af2..45a9c6127 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.5_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/pg/sql/9.5_plus/create.sql @@ -3,26 +3,37 @@ {% import 'macros/functions/variable.macros' as VARIABLE %} {% set is_columns = [] %} {% if data %} -CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data -.args %} +CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %} {% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{ conn|qtTypeIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} {% if not loop.last %},{% endif %} {% endfor %} {% endif -%} - ) +{% if data.func_args %} +{% set func_args = data.func_args.split(',') %} + +{% for f in func_args %} + {{ f|trim }}{% if not loop.last %}, +{% endif %} +{% endfor %} + +{% endif %} +) RETURNS{% if data.proretset %} SETOF{% endif %} {{ conn|qtTypeIdent(data.prorettypename) }} LANGUAGE {{ data.lanname|qtLiteral }} +{% if data.procost %} + COST {{data.procost}} +{% endif %} +{% if query_type != 'create' %} {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proleakproof %}LEAKPROOF {% else %}NOT LEAKPROOF {% endif %} {% if data.proisstrict %}STRICT {% endif %} {% if data.prosecdef %}SECURITY DEFINER {% endif %} -{% if data.proiswindow %}WINDOW{% endif %}{% if data.procost %} - - COST {{data.procost}}{% endif %}{% if data.prorows %} +{% if data.proiswindow %}WINDOW{% endif %} +{% if data.prorows %} ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %} SET {{ conn|qtIdent(v.name) }}={{ v.value|qtLiteral }}{% endfor %} -{% endif %} +{% endif %}{% endif %} AS {% if data.lanname == 'c' %} {{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.1_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.1_plus/create.sql index 62e61d3c3..efd777558 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.1_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.1_plus/create.sql @@ -3,22 +3,33 @@ {% import 'macros/functions/variable.macros' as VARIABLE %} {% set is_columns = [] %} {% if data %} -CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %} -{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtTypeIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} +CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %} +{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}}{% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} {% if not loop.last %},{% endif %} {% endfor %} {% endif -%} - ) +{% if data.func_args %} +{% set func_args = data.func_args.split(',') %} + +{% for f in func_args %} + {{ f|trim }}{% if not loop.last %}, +{% endif %} +{% endfor %} + +{% endif %} +) RETURNS{% if data.proretset %} SETOF{% endif %} {{ conn|qtTypeIdent(data.prorettypename) }} LANGUAGE {{ data.lanname|qtLiteral }} - {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proisstrict %}STRICT {% endif %}{% if data.prosecdef %}SECURITY DEFINER {% endif %}{% if data.proiswindow %}WINDOW{% endif -%}{% if data.procost %} - - COST {{data.procost}}{% endif %}{% if data.prorows %} - +{% if data.procost %} + COST {{data.procost}} +{% endif %} +{% if query_type != 'create' %} + {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proisstrict %}STRICT {% endif %}{% if data.prosecdef %}SECURITY DEFINER {% endif %}{% if data.proiswindow %}WINDOW{% endif -%} +{% if data.prorows %} ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %} SET {{ conn|qtIdent(v.name) }}={{ v.value|qtLiteral }}{% endfor %} -{% endif %} +{% endif %}{% endif %} AS {% if data.lanname == 'c' %} {{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.2_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.2_plus/create.sql index 9514344d2..516e6d40e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.2_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.2_plus/create.sql @@ -3,25 +3,37 @@ {% import 'macros/functions/variable.macros' as VARIABLE %} {% set is_columns = [] %} {% if data %} -CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %} -{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtTypeIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} +CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %} +{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}}{% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} {% if not loop.last %},{% endif %} {% endfor %} {% endif -%} - ) +{% if data.func_args %} +{% set func_args = data.func_args.split(',') %} + +{% for f in func_args %} + {{ f|trim }}{% if not loop.last %}, +{% endif %} +{% endfor %} + +{% endif %} +) RETURNS{% if data.proretset %} SETOF{% endif %} {{ conn|qtTypeIdent(data.prorettypename) }} LANGUAGE {{ data.lanname|qtLiteral }} +{% if data.procost %} + COST {{data.procost}} +{% endif %} +{% if query_type != 'create' %} {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proleakproof %} LEAKPROOF {% else %} NOT LEAKPROOF {% endif %} {% if data.proisstrict %}STRICT {% endif %} {% if data.prosecdef %}SECURITY DEFINER {% endif %} -{% if data.proiswindow %}WINDOW{% endif %}{% if data.procost %} - - COST {{data.procost}}{% endif %}{% if data.prorows %} +{% if data.proiswindow %}WINDOW{% endif %} +{% if data.prorows %} ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %} SET {{ conn|qtIdent(v.name) }}={{ v.value|qtLiteral }}{% endfor %} -{% endif %} +{% endif %}{% endif %} AS {% if data.lanname == 'c' %} {{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.5_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.5_plus/create.sql index 102dc7af2..b5b717602 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.5_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/function/ppas/sql/9.5_plus/create.sql @@ -3,8 +3,7 @@ {% import 'macros/functions/variable.macros' as VARIABLE %} {% set is_columns = [] %} {% if data %} -CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data -.args %} +CREATE{% if query_type is defined %}{{' OR REPLACE'}}{% endif %} FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.args %} {% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname) }} {% endif %}{% if p.argtype %}{{ conn|qtTypeIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} {% if not loop.last %},{% endif %} {% endfor %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.1_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.1_plus/create.sql index a971b55ed..0a8cb20e2 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.1_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.1_plus/create.sql @@ -3,11 +3,12 @@ {% import 'macros/functions/variable.macros' as VARIABLE %} {% set is_columns = [] %} {% if data %} -CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}{% if data.args %}( -{% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtTypeIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} -{% if not loop.last %},{% endif %} -{% endfor %}) -{% endif %} +CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}{% if data.args is defined or data.func_args is defined %} +({% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} +{% if not loop.last %}, {% endif %} +{% endfor -%} +{% if data.func_args %}{{ data.func_args }}{% endif %} +){% endif %} AS {{ data.prosrc }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.2_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.2_plus/create.sql index 23965175c..073ce1d3d 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.2_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.2_plus/create.sql @@ -3,10 +3,12 @@ {% import 'macros/functions/variable.macros' as VARIABLE %} {% set is_columns = [] %} {% if data %} -CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}{% if data.args %} -({% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %} {{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtTypeIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} -{% if not loop.last %}, {% endif %} -{% endfor -%}){% endif %} +CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}{% if data.args is defined or data.func_args is defined %} +({% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} + {% if not loop.last %}, {% endif %} +{% endfor -%} +{% if data.func_args %}{{ data.func_args }}{% endif %} +){% endif %} AS {{ data.prosrc }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.5_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.5_plus/create.sql index c5f008467..f1a40af6e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.5_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/procedure/ppas/sql/9.5_plus/create.sql @@ -3,10 +3,13 @@ {% import 'macros/functions/variable.macros' as VARIABLE %} {% set is_columns = [] %} {% if data %} -CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}{% if data.args %} +CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}{% if data.args is defined or data.func_args is defined %} ({% for p in data.args %}{% if p.argmode %}{{p.argmode}} {% endif %}{% if p.argname %}{{ conn|qtIdent(p.argname)}} {% endif %}{% if p.argtype %}{{ conn|qtTypeIdent(p.argtype) }}{% endif %}{% if p.argdefval %} DEFAULT {{p.argdefval}}{% endif %} {% if not loop.last %}, {% endif %} -{% endfor -%}){% endif %} +{% endfor -%} +{% if data.func_args %}{{ data.func_args }}{% endif %} +){% endif %} +{% if query_type != 'create' %} {{ data.provolatile }}{% if data.proleakproof %} LEAKPROOF {% elif not data.proleakproof %} NOT LEAKPROOF {% endif %} {% if data.proisstrict %}STRICT {% endif %} @@ -17,7 +20,7 @@ CREATE OR REPLACE PROCEDURE {{ conn|qtIdent(data.pronamespace, data.name) }}{% i ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %} SET {{ conn|qtIdent(v.name) }}={{ v.value|qtLiteral }}{% endfor -%} -{% endif %} +{% endif %}{% endif %} AS {{ data.prosrc }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.1_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.1_plus/create.sql index 8e51a49e3..6e9fd789e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.1_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.1_plus/create.sql @@ -6,16 +6,19 @@ CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}() RETURNS{% if data.proretset %} SETOF{% endif %} {{ conn|qtTypeIdent(data.prorettypename) }} LANGUAGE {{ data.lanname|qtLiteral }} - {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proisstrict %}STRICT {% endif %}{% if data.prosecdef %}SECURITY DEFINER {% endif %}{% if data.proiswindow %}WINDOW{% endif -%}{% if data.procost %} - - COST {{data.procost}}{% endif %}{% if data.prorows %} +{% if data.procost %} + COST {{data.procost}} +{% endif %} +{% if query_type != 'create' %} + {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proisstrict %}STRICT {% endif %}{% if data.prosecdef %}SECURITY DEFINER {% endif %}{% if data.proiswindow %}WINDOW{% endif -%} +{% if data.prorows %} ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %} SET {{ conn|qtIdent(v.name) }}={{ v.value|qtLiteral }}{% endfor %} {% endif %} -AS {% if data.lanname == 'c' %} +AS {% endif %}{% if data.lanname == 'c' %} {{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }} {% else %} $BODY$ diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.2_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.2_plus/create.sql index 149c2049e..7ca4bf1d9 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.2_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.2_plus/create.sql @@ -6,6 +6,10 @@ CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}() RETURNS{% if data.proretset %} SETOF{% endif %} {{ conn|qtTypeIdent(data.prorettypename) }} LANGUAGE {{ data.lanname|qtLiteral }} +{% if data.procost %} + COST {{data.procost}} +{% endif %} +{% if query_type != 'create' %} {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proleakproof %}LEAKPROOF {% else %}NOT LEAKPROOF {% endif %} {% if data.proisstrict %}STRICT {% endif %} {% if data.prosecdef %}SECURITY DEFINER {% endif %} @@ -18,7 +22,7 @@ CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}() SET {{ conn|qtIdent(v.name) }}={{ v.value|qtLiteral }}{% endfor %} {% endif %} -AS {% if data.lanname == 'c' %} +AS {% endif %}{% if data.lanname == 'c' %} {{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }} {% else %} $BODY$ diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.5_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.5_plus/create.sql index fa36ad879..544585519 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.5_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/pg/sql/9.5_plus/create.sql @@ -3,22 +3,25 @@ {% import 'macros/functions/variable.macros' as VARIABLE %} {% set is_columns = [] %} {% if data %} -CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}() +CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}({% if data.proargnames %}{{data.proargnames}}{% endif %}) RETURNS{% if data.proretset %} SETOF{% endif %} {{ conn|qtTypeIdent(data.prorettypename) }} LANGUAGE {{ data.lanname|qtLiteral }} +{% if data.procost %} + COST {{data.procost}} +{% endif %} +{% if query_type != 'create' %} {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proleakproof %}LEAKPROOF {% else %}NOT LEAKPROOF {% endif %} {% if data.proisstrict %}STRICT {% endif %} {% if data.prosecdef %}SECURITY DEFINER {% endif %} -{% if data.proiswindow %}WINDOW{% endif %}{% if data.procost %} - - COST {{data.procost}}{% endif %}{% if data.prorows %} +{% if data.proiswindow %}WINDOW{% endif %} +{% if data.prorows %} ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %} SET {{ conn|qtIdent(v.name) }}={{ v.value|qtLiteral }}{% endfor %} {% endif %} -AS {% if data.lanname == 'c' %} +AS {% endif %}{% if data.lanname == 'c' %} {{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }} {% else %} $BODY$ diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.1_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.1_plus/create.sql index 8e51a49e3..6e9fd789e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.1_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.1_plus/create.sql @@ -6,16 +6,19 @@ CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}() RETURNS{% if data.proretset %} SETOF{% endif %} {{ conn|qtTypeIdent(data.prorettypename) }} LANGUAGE {{ data.lanname|qtLiteral }} - {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proisstrict %}STRICT {% endif %}{% if data.prosecdef %}SECURITY DEFINER {% endif %}{% if data.proiswindow %}WINDOW{% endif -%}{% if data.procost %} - - COST {{data.procost}}{% endif %}{% if data.prorows %} +{% if data.procost %} + COST {{data.procost}} +{% endif %} +{% if query_type != 'create' %} + {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proisstrict %}STRICT {% endif %}{% if data.prosecdef %}SECURITY DEFINER {% endif %}{% if data.proiswindow %}WINDOW{% endif -%} +{% if data.prorows %} ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %} SET {{ conn|qtIdent(v.name) }}={{ v.value|qtLiteral }}{% endfor %} {% endif %} -AS {% if data.lanname == 'c' %} +AS {% endif %}{% if data.lanname == 'c' %} {{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }} {% else %} $BODY$ diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.2_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.2_plus/create.sql index f7d497e74..210cf3abf 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.2_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.2_plus/create.sql @@ -6,19 +6,22 @@ CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}() RETURNS{% if data.proretset %} SETOF{% endif %} {{ conn|qtTypeIdent(data.prorettypename) }} LANGUAGE {{ data.lanname|qtLiteral }} +{% if data.procost %} + COST {{data.procost}} +{% endif %} +{% if query_type != 'create' %} {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proleakproof %} LEAKPROOF {% else %} NOT LEAKPROOF {% endif %} {% if data.proisstrict %}STRICT {% endif %} {% if data.prosecdef %}SECURITY DEFINER {% endif %} -{% if data.proiswindow %}WINDOW{% endif %}{% if data.procost %} - - COST {{data.procost}}{% endif %}{% if data.prorows %} +{% if data.proiswindow %}WINDOW{% endif %} +{% if data.prorows %} ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %} SET {{ conn|qtIdent(v.name) }}={{ v.value|qtLiteral }}{% endfor %} {% endif %} -AS {% if data.lanname == 'c' %} +AS {% endif %}{% if data.lanname == 'c' %} {{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }} {% else %} $BODY$ diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.5_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.5_plus/create.sql index fa36ad879..5c7c568ab 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.5_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_function/ppas/sql/9.5_plus/create.sql @@ -6,23 +6,26 @@ CREATE FUNCTION {{ conn|qtIdent(data.pronamespace, data.name) }}() RETURNS{% if data.proretset %} SETOF{% endif %} {{ conn|qtTypeIdent(data.prorettypename) }} LANGUAGE {{ data.lanname|qtLiteral }} +{% if data.procost %} + COST {{data.procost}} +{% endif %} +{% if query_type != 'create' %} {% if data.provolatile %}{{ data.provolatile }} {% endif %}{% if data.proleakproof %}LEAKPROOF {% else %}NOT LEAKPROOF {% endif %} {% if data.proisstrict %}STRICT {% endif %} {% if data.prosecdef %}SECURITY DEFINER {% endif %} -{% if data.proiswindow %}WINDOW{% endif %}{% if data.procost %} - - COST {{data.procost}}{% endif %}{% if data.prorows %} +{% if data.proiswindow %}WINDOW{% endif %} +{% if data.prorows %} ROWS {{data.prorows}}{% endif -%}{% if data.variables %}{% for v in data.variables %} SET {{ conn|qtIdent(v.name) }}={{ v.value|qtLiteral }}{% endfor %} {% endif %} -AS {% if data.lanname == 'c' %} ++AS {% endif %}{% if data.lanname == 'c' %} {{ data.probin|qtLiteral }}, {{ data.prosrc_c|qtLiteral }} {% else %} $BODY$ -{{ data.prosrc }} +{{ data.prosrc }}; $BODY${% endif -%}; {% if data.funcowner %}