diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/trigger_function.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/trigger_function.js index 1eed8e8bf..b7a1f2af8 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/trigger_function.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/trigger_function.js @@ -96,7 +96,7 @@ define('pgadmin.node.trigger_function', [ }), language: ()=>getNodeAjaxOptions('get_languages', this, treeNodeInfo, itemNodeData, {noCache: true}, (res) => { return _.reject(res, function(o) { - return o.label == 'sql' || o.label == 'edbspl'; + return o.label == 'sql'; }); }), nodeInfo: treeNodeInfo diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/trigger_function.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/trigger_function.ui.js index 209d3a3d5..72a7e6316 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/trigger_function.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/static/js/trigger_function.ui.js @@ -149,6 +149,7 @@ export default class TriggerFunctionSchema extends BaseUISchema { }, { id: 'lanname', label: gettext('Language'), cell: 'text', type: 'select', group: gettext('Definition'), + mode: ['create', 'properties', 'edit'], disabled: obj.isDisabled, readonly: obj.isReadonly, options: obj.fieldOptions.language, controlProps: { diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/get_oid.sql index 53bc02b24..ca82a1949 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/get_oid.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/get_oid.sql @@ -14,5 +14,5 @@ JOIN WHERE pr.prokind IN ('f', 'w') AND typname IN ('trigger', 'event_trigger') - AND lanname NOT IN ('edbspl', 'sql', 'internal') + AND lanname NOT IN ('sql', 'internal') AND pr.proname = {{ name|qtLiteral }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/node.sql index 9dc1d9f13..d499e9afe 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/node.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/node.sql @@ -21,6 +21,6 @@ WHERE AND CASE WHEN (SELECT COUNT(*) FROM pg_catalog.pg_depend WHERE objid = pr.oid AND deptype = 'e') > 0 THEN FALSE ELSE TRUE END {% endif %} - AND typname IN ('trigger', 'event_trigger') AND lanname != 'edbspl' + AND typname IN ('trigger', 'event_trigger') ORDER BY proname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/properties.sql index 8aafa7c71..c9f2fae3b 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/11_plus/properties.sql @@ -26,7 +26,7 @@ LEFT OUTER JOIN pg_catalog.pg_description des ON (des.objoid=pr.oid AND des.classoid='pg_proc'::regclass and des.objsubid = 0) WHERE pr.prokind IN ('f', 'w') - AND typname IN ('trigger', 'event_trigger') AND lanname != 'edbspl' + AND typname IN ('trigger', 'event_trigger') {% if fnid %} AND pr.oid = {{fnid}}::oid {% else %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/9.2_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/9.2_plus/get_oid.sql index 86a720aac..823eed26e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/9.2_plus/get_oid.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/9.2_plus/get_oid.sql @@ -14,5 +14,5 @@ JOIN WHERE proisagg = FALSE AND typname IN ('trigger', 'event_trigger') - AND lanname NOT IN ('edbspl', 'sql', 'internal') + AND lanname NOT IN ('sql', 'internal') AND pr.proname = {{ name|qtLiteral }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/9.2_plus/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/9.2_plus/node.sql index 85e48c3a7..b0a7783e5 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/9.2_plus/node.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/9.2_plus/node.sql @@ -22,6 +22,6 @@ WHERE WHERE objid = pr.oid AND deptype = 'e') > 0 THEN FALSE ELSE TRUE END {% endif %} AND typname IN ('trigger', 'event_trigger') - AND lanname NOT IN ('edbspl', 'sql', 'internal') + AND lanname NOT IN ('sql', 'internal') ORDER BY proname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/9.2_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/9.2_plus/properties.sql index 9679f2c06..8ef144b66 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/9.2_plus/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/9.2_plus/properties.sql @@ -26,7 +26,7 @@ LEFT OUTER JOIN WHERE proisagg = FALSE AND typname IN ('trigger', 'event_trigger') - AND lanname NOT IN ('edbspl', 'sql', 'internal') + AND lanname NOT IN ('sql', 'internal') {% if fnid %} AND pr.oid = {{fnid}}::oid {% else %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/get_oid.sql index f0e279c55..adfe5fd6b 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/get_oid.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/get_oid.sql @@ -13,5 +13,5 @@ JOIN AND nsp.nspname={{ nspname|qtLiteral }} WHERE proisagg = FALSE - AND typname = 'trigger' AND lanname != 'edbspl' + AND typname = 'trigger' AND pr.proname = {{ name|qtLiteral }}; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/node.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/node.sql index 9c7e998c3..3111c7529 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/node.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/node.sql @@ -17,6 +17,6 @@ WHERE {% if scid %} AND pronamespace = {{scid}}::oid {% endif %} - AND typname = 'trigger' AND lanname != 'edbspl' + AND typname = 'trigger' ORDER BY proname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/properties.sql index 9679f2c06..8ef144b66 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/templates/trigger_functions/ppas/sql/default/properties.sql @@ -26,7 +26,7 @@ LEFT OUTER JOIN WHERE proisagg = FALSE AND typname IN ('trigger', 'event_trigger') - AND lanname NOT IN ('edbspl', 'sql', 'internal') + AND lanname NOT IN ('sql', 'internal') {% if fnid %} AND pr.oid = {{fnid}}::oid {% else %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_triggerfunctions.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_triggerfunctions.sql index 81bab0748..6b8383b4e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_triggerfunctions.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_triggerfunctions.sql @@ -3,7 +3,7 @@ FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n, pg_catalog.pg_language l WHERE p.pronamespace = n.oid AND p.prolang = l.oid -- PGOID_TYPE_TRIGGER = 2279 - AND l.lanname != 'edbspl' AND prorettype = 2279 + AND prorettype = 2279 -- If Show SystemObjects is not true {% if not show_system_objects %} AND (nspname NOT LIKE 'pg\_%' AND nspname NOT in ('information_schema')) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_triggerfunctions.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_triggerfunctions.sql index 81bab0748..6b8383b4e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_triggerfunctions.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_triggerfunctions.sql @@ -3,7 +3,7 @@ FROM pg_catalog.pg_proc p, pg_catalog.pg_namespace n, pg_catalog.pg_language l WHERE p.pronamespace = n.oid AND p.prolang = l.oid -- PGOID_TYPE_TRIGGER = 2279 - AND l.lanname != 'edbspl' AND prorettype = 2279 + AND prorettype = 2279 -- If Show SystemObjects is not true {% if not show_system_objects %} AND (nspname NOT LIKE 'pg\_%' AND nspname NOT in ('information_schema')) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py index 0a909a785..7127af70e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py @@ -314,38 +314,36 @@ class TriggerView(PGChildNodeView, SchemaDiffObjectCompare): return gone( gettext("Could not find the specified trigger function")) - # For language EDB SPL we should not display any node. - if rset['rows'][0]['lanname'] != 'edbspl': - trigger_function_schema_oid = rset['rows'][0]['tfuncschoid'] - - sql = render_template("/".join( - [self.trigger_function_template_path, self._NODE_SQL]), - scid=trigger_function_schema_oid, - fnid=rset['rows'][0]['tfuncoid'] - ) - status, res = self.conn.execute_2darray(sql) - if not status: - return internal_server_error(errormsg=rset) - - if len(res['rows']) == 0: - return gone(gettext( - "Could not find the specified trigger function")) - - row = res['rows'][0] - func_name = row['name'] - # If trigger function is from another schema then we should - # display the name as schema qulified name. - if scid != trigger_function_schema_oid: - func_name = \ - rset['rows'][0]['tfuncschema'] + '.' + row['name'] - - trigger_func = current_app.blueprints['NODE-trigger_function'] - nodes.append(trigger_func.generate_browser_node( - row['oid'], trigger_function_schema_oid, - gettext(func_name), - icon="icon-trigger_function", funcowner=row['funcowner'], - language=row['lanname'], inode=False) - ) + trigger_function_schema_oid = rset['rows'][0]['tfuncschoid'] + + sql = render_template("/".join( + [self.trigger_function_template_path, self._NODE_SQL]), + scid=trigger_function_schema_oid, + fnid=rset['rows'][0]['tfuncoid'] + ) + status, res = self.conn.execute_2darray(sql) + if not status: + return internal_server_error(errormsg=rset) + + if len(res['rows']) == 0: + return gone(gettext( + "Could not find the specified trigger function")) + + row = res['rows'][0] + func_name = row['name'] + # If trigger function is from another schema then we should + # display the name as schema qulified name. + if scid != trigger_function_schema_oid: + func_name = \ + rset['rows'][0]['tfuncschema'] + '.' + row['name'] + + trigger_func = current_app.blueprints['NODE-trigger_function'] + nodes.append(trigger_func.generate_browser_node( + row['oid'], trigger_function_schema_oid, + gettext(func_name), + icon="icon-trigger_function", funcowner=row['funcowner'], + language=row['lanname'], inode=False) + ) except Exception as e: return internal_server_error(errormsg=str(e)) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/utils.py index d57768a69..495d7ef44 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/utils.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/utils.py @@ -103,41 +103,37 @@ def get_trigger_function_and_columns(conn, data, tid, # If language is 'edbspl' then trigger function should be # 'Inline EDB-SPL' else we will find the trigger function # with schema name. - if data['lanname'] == 'edbspl': - data['tfunction'] = 'Inline EDB-SPL' - data['tgargs'] = None - else: - SQL = render_template("/".join( - [template_path, 'get_triggerfunctions.sql']), - tgfoid=data['tgfoid'], - show_system_objects=show_system_objects - ) + SQL = render_template("/".join( + [template_path, 'get_triggerfunctions.sql']), + tgfoid=data['tgfoid'], + show_system_objects=show_system_objects + ) - status, result = conn.execute_dict(SQL) - if not status: - return internal_server_error(errormsg=result) + status, result = conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=result) # Update the trigger function which we have fetched with # schema name - if 'rows' in result and len(result['rows']) > 0 and \ - 'tfunctions' in result['rows'][0]: - data['tfunction'] = result['rows'][0]['tfunctions'] - - if len(data['custom_tgargs']) > 0: - driver = get_driver(PG_DEFAULT_DRIVER) - # We know that trigger has more than 1 argument, let's join them - # and convert it to string - formatted_args = [driver.qtLiteral(arg) - for arg in data['custom_tgargs']] - formatted_args = ', '.join(formatted_args) - - data['tgargs'] = formatted_args - else: - data['tgargs'] = None - - if len(data['tgattr']) >= 1: - columns = ', '.join(data['tgattr'].split(' ')) - data['columns'] = get_column_details(conn, tid, columns) + if 'rows' in result and len(result['rows']) > 0 and \ + 'tfunctions' in result['rows'][0]: + data['tfunction'] = result['rows'][0]['tfunctions'] + + if len(data['custom_tgargs']) > 0: + driver = get_driver(PG_DEFAULT_DRIVER) + # We know that trigger has more than 1 argument, let's join them + # and convert it to string + formatted_args = [driver.qtLiteral(arg) + for arg in data['custom_tgargs']] + formatted_args = ', '.join(formatted_args) + + data['tgargs'] = formatted_args + else: + data['tgargs'] = None + + if len(data['tgattr']) >= 1: + columns = ', '.join(data['tgattr'].split(' ')) + data['columns'] = get_column_details(conn, tid, columns) return data diff --git a/web/pgadmin/feature_tests/xss_checks_roles_control_test.py b/web/pgadmin/feature_tests/xss_checks_roles_control_test.py index 948062966..1d53d1cab 100644 --- a/web/pgadmin/feature_tests/xss_checks_roles_control_test.py +++ b/web/pgadmin/feature_tests/xss_checks_roles_control_test.py @@ -60,9 +60,12 @@ class CheckRoleMembershipControlFeatureTest(BaseFeatureTest): "

test

") def _role_node_expandable(self, role): - self.page.expand_server_child_node("Server", self.server['name'], - self.server['db_password'], - 'Login/Group Roles') + retry = 3 + while retry > 0: + if self.page.expand_server_child_node( + "Server", self.server['name'], self.server['db_password'], + 'Login/Group Roles'): + retry = 0 role_node = self.page.check_if_element_exists_with_scroll( TreeAreaLocators.role_node(role))