From d2a7f7fffe3eeae984cb7a608a8ad5e3ed012299 Mon Sep 17 00:00:00 2001 From: Akshay Joshi Date: Wed, 20 Oct 2021 18:39:42 +0530 Subject: [PATCH] Fixed API test cases for PG 14 --- .../alter_proc_change_grantee_priv.sql | 18 + .../tests/pg/14_plus/alter_proc_comment.sql | 15 + .../tests/pg/14_plus/alter_proc_param.sql | 16 + .../tests/pg/14_plus/create_procedure.sql | 12 + .../tests/pg/14_plus/test_function.json | 311 +++++++++++++++++ .../tests/pg/14_plus/test_procedures.json | 142 ++++++++ .../pg/14_plus/test_trigger_functions.json | 191 +++++++++++ .../alter_proc_change_grantee_priv.sql | 18 + .../tests/ppas/14_plus/alter_proc_comment.sql | 15 + .../tests/ppas/14_plus/alter_proc_param.sql | 16 + .../tests/ppas/14_plus/create_procedure.sql | 12 + .../tests/ppas/14_plus/test_function.json | 323 ++++++++++++++++++ .../tests/ppas/14_plus/test_procedures.json | 142 ++++++++ .../ppas/14_plus/test_trigger_functions.json | 191 +++++++++++ .../tests/test_procedure_exec_sql.py | 5 +- .../servers/roles/tests/role_test_data.json | 4 +- .../utils/versioned_template_loader.py | 3 +- 17 files changed, 1431 insertions(+), 3 deletions(-) create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/alter_proc_change_grantee_priv.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/alter_proc_comment.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/alter_proc_param.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/create_procedure.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/test_function.json create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/test_procedures.json create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/test_trigger_functions.json create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/alter_proc_change_grantee_priv.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/alter_proc_comment.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/alter_proc_param.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/create_procedure.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/test_function.json create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/test_procedures.json create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/test_trigger_functions.json diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/alter_proc_change_grantee_priv.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/alter_proc_change_grantee_priv.sql new file mode 100644 index 000000000..89ac43121 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/alter_proc_change_grantee_priv.sql @@ -0,0 +1,18 @@ +-- PROCEDURE: public.Proc1_$%{}[]()&*^!@"'`\/#(integer) + +-- DROP PROCEDURE IF EXISTS public."Proc1_$%{}[]()&*^!@""'`\/#"(integer); + +CREATE OR REPLACE PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"( + IN i1 integer) +LANGUAGE 'plpgsql' + SET application_name='pgadmin' +AS $BODY$ +begin +select 1; +end; +$BODY$; + +GRANT EXECUTE ON PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"(integer) TO PUBLIC; + +COMMENT ON PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"(integer) + IS 'some comment'; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/alter_proc_comment.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/alter_proc_comment.sql new file mode 100644 index 000000000..d4b2ffb91 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/alter_proc_comment.sql @@ -0,0 +1,15 @@ +-- PROCEDURE: public.Proc1_$%{}[]()&*^!@"'`\/#(integer) + +-- DROP PROCEDURE IF EXISTS public."Proc1_$%{}[]()&*^!@""'`\/#"(integer); + +CREATE OR REPLACE PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"( + IN i1 integer) +LANGUAGE 'plpgsql' +AS $BODY$ +begin +select 1; +end; +$BODY$; + +COMMENT ON PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"(integer) + IS 'some comment'; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/alter_proc_param.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/alter_proc_param.sql new file mode 100644 index 000000000..46e551e69 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/alter_proc_param.sql @@ -0,0 +1,16 @@ +-- PROCEDURE: public.Proc1_$%{}[]()&*^!@"'`\/#(integer) + +-- DROP PROCEDURE IF EXISTS public."Proc1_$%{}[]()&*^!@""'`\/#"(integer); + +CREATE OR REPLACE PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"( + IN i1 integer) +LANGUAGE 'plpgsql' + SET application_name='pgadmin' +AS $BODY$ +begin +select 1; +end; +$BODY$; + +COMMENT ON PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"(integer) + IS 'some comment'; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/create_procedure.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/create_procedure.sql new file mode 100644 index 000000000..cc1ea2eb0 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/create_procedure.sql @@ -0,0 +1,12 @@ +-- PROCEDURE: public.Proc1_$%{}[]()&*^!@"'`\/#(integer) + +-- DROP PROCEDURE IF EXISTS public."Proc1_$%{}[]()&*^!@""'`\/#"(integer); + +CREATE OR REPLACE PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"( + IN i1 integer) +LANGUAGE 'plpgsql' +AS $BODY$ +begin +select 1; +end; +$BODY$; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/test_function.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/test_function.json new file mode 100644 index 000000000..9ff8bb6b6 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/test_function.json @@ -0,0 +1,311 @@ +{ + "scenarios": [ + { + "type": "create", + "name": "Create function with all options.", + "endpoint": "NODE-function.obj", + "msql_endpoint": "NODE-function.msql", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "name": "Function1_$%{}[]()&*^!@\"'`\\/#", + "funcowner": "postgres", + "pronamespace": 2200, + "prorettypename": "character varying", + "lanname": "plpgsql", + "provolatile": "v", + "proretset": false, + "proisstrict": true, + "prosecdef": true, + "proiswindow": true, + "proparallel": "u", + "procost": "100", + "prorows": "0", + "proleakproof": true, + "arguments": [ + { + "argtype": "character varying", + "argmode": "IN", + "argname": "param", + "argdefval": "'1'" + } + ], + "prosrc": "begin\nselect '1';\nend", + "probin": "$libdir/", + "options": [], + "variables": [ + { + "name": "enable_sort", + "value": true + } + ], + "seclabels": [], + "acl": [], + "schema": "public" + }, + "expected_sql_file": "create_function.sql", + "expected_msql_file": "create_function.msql" + }, + { + "type": "alter", + "name": "Alter function comment", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "description": "Some comment" + }, + "expected_sql_file": "alter_function_comment.sql", + "expected_msql_file": "alter_function_comment.msql" + }, + { + "type": "delete", + "name": "Drop function", + "endpoint": "NODE-function.delete_id", + "data": { + } + }, + { + "type": "create", + "name": "Create function for alter.", + "endpoint": "NODE-function.obj", + "msql_endpoint": "NODE-function.msql", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "name": "Function2_$%{}[]()&*^!@\"'`\\/#", + "funcowner": "postgres", + "pronamespace": 2200, + "prorettypename": "character varying", + "lanname": "plpgsql", + "provolatile": "v", + "proparallel": "u", + "arguments": [], + "procost": "100", + "prosrc": "begin\nselect '1';\nend", + "probin": "$libdir/", + "options": [], + "variables": [ + { + "name": "enable_sort", + "value": true + } + ], + "seclabels": [], + "acl": [], + "schema": "public" + }, + "expected_sql_file": "create_function_for_alter.sql", + "expected_msql_file": "create_function_for_alter.msql" + }, + { + "type": "alter", + "name": "Alter function rename.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "name":"Function3_$%{}[]()&*^!@\"'`\\/#" + }, + "expected_sql_file": "alter_function_rename.sql", + "expected_msql_file": "alter_function_rename.msql" + }, + { + "type": "alter", + "name": "Alter function code and add parameters.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "prosrc": "begin\nselect '2';\nend\n", + "variables": { + "added": [ + { + "name": "application_name", + "value": "appname" + } + ] + } + }, + "expected_sql_file": "alter_function_add_parameter.sql", + "expected_msql_file": "alter_function_add_parameter.msql" + }, + { + "type": "alter", + "name": "Alter function delete parameters.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "variables": { + "deleted": [ + { + "name": "application_name", + "value": true + } + ] + } + }, + "expected_sql_file": "alter_function_delete_parameter.sql", + "expected_msql_file": "alter_function_delete_parameter.msql" + }, + { + "type": "delete", + "name": "Drop function", + "endpoint": "NODE-function.delete_id", + "data": { + } + }, + { + "type": "create", + "name": "Create function for acl.", + "endpoint": "NODE-function.obj", + "msql_endpoint": "NODE-function.msql", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "name": "Function2_$%{}[]()&*^!@\"'`\\/#", + "funcowner": "postgres", + "pronamespace": 2200, + "prorettypename": "character varying", + "lanname": "plpgsql", + "provolatile": "v", + "proparallel": "u", + "arguments": [], + "procost": "100", + "prosrc": "begin\nselect '1';\nend", + "probin": "$libdir/", + "options": [], + "variables": [ + { + "name": "enable_sort", + "value": true + } + ], + "seclabels": [], + "acl": [], + "schema": "public" + }, + "expected_sql_file": "create_function_for_alter.sql", + "expected_msql_file": "create_function_for_alter.msql" + }, + { + "type": "alter", + "name": "Alter function add acl.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "acl": { + "added": [ + { + "grantee": "postgres", + "grantor": "postgres", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ] + } + ] + } + }, + "expected_sql_file": "alter_function_add_acl.sql", + "expected_msql_file": "alter_function_add_acl.msql" + }, + { + "type": "alter", + "name": "Alter function remove partial privileges.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "acl": { + "deleted": [ + { + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ] + } + ] + } + } + }, + { + "type": "alter", + "name": "Alter function change grantee in privileges.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "acl": { + "changed": [ + { + "grantee": "PUBLIC", + "grantor": "postgres", + "old_grantee": "postgres", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ] + } + ] + } + }, + "expected_sql_file": "alter_function_change_grantee_acl.sql", + "expected_msql_file": "alter_function_change_grantee_acl.msql" + }, + { + "type": "alter", + "name": "Alter function delete acl.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "acl": { + "deleted": [ + { + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ] + }, + { + "grantee": "postgres", + "grantor": "postgres", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ] + } + ] + } + }, + "expected_sql_file": "alter_function_delete_acl.sql", + "expected_msql_file": "alter_function_delete_acl.msql" + }, + { + "type": "delete", + "name": "Drop function", + "endpoint": "NODE-function.delete_id", + "data": { + } + } + ] +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/test_procedures.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/test_procedures.json new file mode 100644 index 000000000..cf0996aab --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/test_procedures.json @@ -0,0 +1,142 @@ +{ + "scenarios": [ + { + "type": "create", + "name": "Create procedure", + "endpoint": "NODE-procedure.obj", + "sql_endpoint": "NODE-procedure.sql_id", + "data": { + "name": "Proc1_$%{}[]()&*^!@\"'`\\/#", + "acl": [], + "arguments": [{"argtype": "integer", "argmode": "IN", "argname": "i1", "argdefval": ""}], + "funcowner": "postgres", + "lanname": "plpgsql", + "options": [], + "pronamespace": 2200, + "prosrc": "begin\nselect 1;\nend;", + "seclabels": [], + "variables": [], + "schema": "public", + "provolatile": null, + "proisstrict": false, + "proparallel": null, + "procost": null, + "proleakproof": false, + "probin": "$libdir/" + }, + "expected_sql_file": "create_procedure.sql" + }, { + "type": "alter", + "name": "Alter procedure comment", + "endpoint": "NODE-procedure.obj_id", + "sql_endpoint": "NODE-procedure.sql_id", + "data": { + "description": "some comment" + }, + "expected_sql_file": "alter_proc_comment.sql", + "expected_msql_file": "alter_proc_comment_msql.sql" + }, { + "type": "alter", + "name": "Alter procedure param", + "endpoint": "NODE-procedure.obj_id", + "sql_endpoint": "NODE-procedure.sql_id", + "data": { + "variables": { + "added": [{"name": "application_name", "value": "pgadmin"}] + } + }, + "expected_sql_file": "alter_proc_param.sql", + "expected_msql_file": "alter_proc_param_msql.sql" + }, + { + "type": "alter", + "name": "Alter procedure add privileges", + "endpoint": "NODE-procedure.obj_id", + "sql_endpoint": "NODE-procedure.sql_id", + "data": { + "acl": { + "added": [ + { + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": false + } + ] + }, + { + "grantee": "postgres", + "grantor": "postgres", + "privileges": [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": false + } + ] + } + ] + } + } + }, + { + "type": "alter", + "name": "Alter procedure delete privileges", + "endpoint": "NODE-procedure.obj_id", + "sql_endpoint": "NODE-procedure.sql_id", + "data": { + "acl": { + "deleted": [ + { + "grantee": "PUBLIC", + "grantor": "postgres", + "privileges": [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": false + } + ] + } + ] + } + } + }, + { + "type": "alter", + "name": "Alter procedure change privileges", + "endpoint": "NODE-procedure.obj_id", + "sql_endpoint": "NODE-procedure.sql_id", + "data": { + "acl": { + "changed": [ + { + "grantee": "PUBLIC", + "grantor": "postgres", + "old_grantee": "postgres", + "privileges": [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": false + } + ] + } + ] + } + }, + "expected_sql_file": "alter_proc_change_grantee_priv.sql", + "expected_msql_file": "alter_proc_change_grantee_priv.msql" + }, + { + "type": "delete", + "name": "Drop procedure", + "endpoint": "NODE-procedure.delete_id", + "data": { + } + } + ] +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/test_trigger_functions.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/test_trigger_functions.json new file mode 100644 index 000000000..a2e9fc70d --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/pg/14_plus/test_trigger_functions.json @@ -0,0 +1,191 @@ +{ + "scenarios": [ + { + "type": "create", + "name": "Create trigger function", + "endpoint": "NODE-trigger_function.obj", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "name": "Trig1_$%{}[]()&*^!@\"'`\\/#", + "acl": [], + "args": [], + "funcowner": "postgres", + "lanname": "plpgsql", + "options": [], + "pronamespace": 2200, + "prorettypename": "trigger", + "prosrc": "begin\nselect 1;\nend;", + "seclabels": [], + "variables": [], + "schema": "public" + }, + "expected_sql_file": "create_plain_trigger.sql" + }, { + "type": "alter", + "name": "Alter trigger function comment", + "endpoint": "NODE-trigger_function.obj_id", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "description": "some comment" + }, + "expected_sql_file": "alter_ptrig_comment.sql" + }, { + "type": "alter", + "name": "Alter trigger function Set 1 - Strict, Leakproof, Security of definer, Volatility", + "endpoint": "NODE-trigger_function.obj_id", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "proisstrict": true, + "proleakproof": true, + "prosecdef": true, + "provolatile": "s" + }, + "expected_sql_file": "alter_ptrig_set_1.sql" + }, { + "type": "alter", + "name": "Alter trigger function Set 2 - Cost, Volatility, Add Param", + "endpoint": "NODE-trigger_function.obj_id", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "procost": "123", + "provolatile": "i", + "variables": { + "added": [{ + "name": "application_name", + "value": "appname" + },{ + "name": "search_path", + "value": "public, pg_temp" + }] + } + }, + "expected_sql_file": "alter_ptrig_set_2.sql" + }, { + "type": "alter", + "name": "Alter trigger function Set 3 - Add Param, Change Param", + "endpoint": "NODE-trigger_function.obj_id", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "variables": { + "added": [{ + "name": "application_name", + "value": "appname2" + }], + "changed": [{ + "name": "array_nulls", + "value": true + },{ + "name": "search_path", + "value": "public, pg_catalog" + }] + } + }, + "expected_sql_file": "alter_ptrig_set_3.sql" + }, { + "type": "delete", + "name": "Drop trigger function", + "endpoint": "NODE-trigger_function.delete_id", + "data": { + } + }, { + "type": "create", + "name": "Create full fledged trigger function", + "endpoint": "NODE-trigger_function.obj", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "name": "Trig1_$%{}[]()&*^!@\"'`\\/#", + "acl": [{ + "grantee": "postgres", + "grantor": "postgres", + "privileges": [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": true + } + ] + }], + "args": [], + "description": "some comment", + "funcowner": "postgres", + "lanname": "plpgsql", + "options": [], + "procost": "1234", + "proisstrict": true, + "proiswindow": true, + "proleakproof": true, + "pronamespace": 2200, + "proretset": true, + "prorettypename": "trigger", + "prorows": "4321", + "prosecdef": true, + "provolatile": "s", + "prosrc": "begin\nselect 1;\nend;", + "seclabels": [], + "variables": [{ + "name": "application_name", + "value": "appname" + },{ + "name": "search_path", + "value": "public, pg_temp" + }], + "schema": "public" + }, + "expected_sql_file": "create_plain_trigger_full.sql" + }, { + "type": "delete", + "name": "Drop full fledged trigger function", + "endpoint": "NODE-trigger_function.delete_id", + "data": { + } + }, { + "type": "create", + "name": "Create full fledged event trigger function", + "endpoint": "NODE-trigger_function.obj", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "name": "Trig1_$%{}[]()&*^!@\"'`\\/#", + "acl": [{ + "grantee": "postgres", + "grantor": "postgres", + "privileges": [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": true + } + ] + }], + "args": [], + "description": "some comment", + "funcowner": "postgres", + "lanname": "plpgsql", + "options": [], + "procost": "1234", + "proisstrict": true, + "proiswindow": true, + "proleakproof": true, + "pronamespace": 2200, + "proretset": true, + "prorettypename": "event_trigger", + "prorows": "4321", + "prosecdef": true, + "provolatile": "s", + "prosrc": "begin\nselect 1;\nend;", + "seclabels": [], + "variables": [{ + "name": "application_name", + "value": "appname" + }], + "schema": "public" + }, + "expected_sql_file": "create_event_trigger_full.sql" + }, { + "type": "delete", + "name": "Drop full fledged event trigger function", + "endpoint": "NODE-trigger_function.delete_id", + "data": { + } + } + ] +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/alter_proc_change_grantee_priv.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/alter_proc_change_grantee_priv.sql new file mode 100644 index 000000000..89ac43121 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/alter_proc_change_grantee_priv.sql @@ -0,0 +1,18 @@ +-- PROCEDURE: public.Proc1_$%{}[]()&*^!@"'`\/#(integer) + +-- DROP PROCEDURE IF EXISTS public."Proc1_$%{}[]()&*^!@""'`\/#"(integer); + +CREATE OR REPLACE PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"( + IN i1 integer) +LANGUAGE 'plpgsql' + SET application_name='pgadmin' +AS $BODY$ +begin +select 1; +end; +$BODY$; + +GRANT EXECUTE ON PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"(integer) TO PUBLIC; + +COMMENT ON PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"(integer) + IS 'some comment'; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/alter_proc_comment.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/alter_proc_comment.sql new file mode 100644 index 000000000..d4b2ffb91 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/alter_proc_comment.sql @@ -0,0 +1,15 @@ +-- PROCEDURE: public.Proc1_$%{}[]()&*^!@"'`\/#(integer) + +-- DROP PROCEDURE IF EXISTS public."Proc1_$%{}[]()&*^!@""'`\/#"(integer); + +CREATE OR REPLACE PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"( + IN i1 integer) +LANGUAGE 'plpgsql' +AS $BODY$ +begin +select 1; +end; +$BODY$; + +COMMENT ON PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"(integer) + IS 'some comment'; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/alter_proc_param.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/alter_proc_param.sql new file mode 100644 index 000000000..46e551e69 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/alter_proc_param.sql @@ -0,0 +1,16 @@ +-- PROCEDURE: public.Proc1_$%{}[]()&*^!@"'`\/#(integer) + +-- DROP PROCEDURE IF EXISTS public."Proc1_$%{}[]()&*^!@""'`\/#"(integer); + +CREATE OR REPLACE PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"( + IN i1 integer) +LANGUAGE 'plpgsql' + SET application_name='pgadmin' +AS $BODY$ +begin +select 1; +end; +$BODY$; + +COMMENT ON PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"(integer) + IS 'some comment'; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/create_procedure.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/create_procedure.sql new file mode 100644 index 000000000..cc1ea2eb0 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/create_procedure.sql @@ -0,0 +1,12 @@ +-- PROCEDURE: public.Proc1_$%{}[]()&*^!@"'`\/#(integer) + +-- DROP PROCEDURE IF EXISTS public."Proc1_$%{}[]()&*^!@""'`\/#"(integer); + +CREATE OR REPLACE PROCEDURE public."Proc1_$%{}[]()&*^!@""'`\/#"( + IN i1 integer) +LANGUAGE 'plpgsql' +AS $BODY$ +begin +select 1; +end; +$BODY$; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/test_function.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/test_function.json new file mode 100644 index 000000000..22bf13586 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/test_function.json @@ -0,0 +1,323 @@ +{ + "scenarios": [ + { + "type": "create", + "name": "Create function with all options.", + "endpoint": "NODE-function.obj", + "msql_endpoint": "NODE-function.msql", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "name": "Function1_$%{}[]()&*^!@\"'`\\/#", + "funcowner": "enterprisedb", + "pronamespace": 2200, + "prorettypename": "character varying", + "lanname": "plpgsql", + "provolatile": "v", + "proretset": false, + "proisstrict": true, + "prosecdef": true, + "proiswindow": true, + "proparallel": "u", + "procost": "100", + "prorows": "0", + "proleakproof": true, + "arguments": [ + { + "argtype": "character varying", + "argmode": "IN", + "argname": "param", + "argdefval": "'1'" + } + ], + "prosrc": "begin\nselect '1';\nend", + "probin": "$libdir/", + "options": [], + "variables": [ + { + "name": "enable_sort", + "value": true + } + ], + "seclabels": [], + "acl": [], + "schema": "public" + }, + "expected_sql_file": "create_function.sql", + "expected_msql_file": "create_function.msql" + }, + { + "type": "alter", + "name": "Alter function comment", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "description": "Some comment" + }, + "expected_sql_file": "alter_function_comment.sql", + "expected_msql_file": "alter_function_comment.msql" + }, + { + "type": "delete", + "name": "Drop function", + "endpoint": "NODE-function.delete_id", + "data": { + } + }, + { + "type": "create", + "name": "Create function for alter.", + "endpoint": "NODE-function.obj", + "msql_endpoint": "NODE-function.msql", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "name": "Function2_$%{}[]()&*^!@\"'`\\/#", + "funcowner": "enterprisedb", + "pronamespace": 2200, + "prorettypename": "character varying", + "lanname": "plpgsql", + "provolatile": "v", + "proparallel": "u", + "prosecdef": true, + "arguments": [], + "procost": "100", + "prosrc": "begin\nselect '1';\nend", + "probin": "$libdir/", + "options": [], + "variables": [ + { + "name": "enable_sort", + "value": true + } + ], + "seclabels": [], + "acl": [], + "schema": "public" + }, + "expected_sql_file": "create_function_for_alter.sql", + "expected_msql_file": "create_function_for_alter.msql" + }, + { + "type": "alter", + "name": "Alter function rename.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "name": "Function3_$%{}[]()&*^!@\"'`\\/#" + }, + "expected_sql_file": "alter_function_rename.sql", + "expected_msql_file": "alter_function_rename.msql" + }, + { + "type": "alter", + "name": "Alter function code and add parameters.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "prosrc": "begin\nselect '2';\nend\n", + "variables": { + "added": [ + { + "name": "application_name", + "value": "appname" + } + ] + } + }, + "expected_sql_file": "alter_function_add_parameter.sql" + }, + { + "type": "alter", + "name": "Alter function delete parameters.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "variables": { + "deleted": [ + { + "name": "application_name", + "value": true + } + ] + } + }, + "expected_sql_file": "alter_function_delete_parameter.sql", + "expected_msql_file": "alter_function_delete_parameter.msql" + }, + { + "type": "delete", + "name": "Drop function", + "endpoint": "NODE-function.delete_id", + "data": { + } + }, + { + "type": "create", + "name": "Create function for acl.", + "endpoint": "NODE-function.obj", + "msql_endpoint": "NODE-function.msql", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "name": "Function2_$%{}[]()&*^!@\"'`\\/#", + "funcowner": "enterprisedb", + "pronamespace": 2200, + "prorettypename": "character varying", + "lanname": "plpgsql", + "provolatile": "v", + "proparallel": "u", + "prosecdef": true, + "arguments": [], + "procost": "100", + "prosrc": "begin\nselect '1';\nend", + "probin": "$libdir/", + "options": [], + "variables": [ + { + "name": "enable_sort", + "value": true + } + ], + "seclabels": [], + "acl": [], + "schema": "public" + }, + "expected_sql_file": "create_function_for_alter.sql", + "expected_msql_file": "create_function_for_alter.msql" + }, + { + "type": "alter", + "name": "Alter function add acl.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "acl": { + "added": [ + { + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ] + }, + { + "grantee": "enterprisedb", + "grantor": "enterprisedb", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ] + } + ] + } + }, + "expected_sql_file": "alter_function_add_acl.sql", + "expected_msql_file": "alter_function_add_acl.msql" + }, + { + "type": "alter", + "name": "Alter function remove partial privileges.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "acl": { + "deleted": [ + { + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ] + } + ] + } + } + }, + { + "type": "alter", + "name": "Alter function change grantee in privileges.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "acl": { + "changed": [ + { + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "old_grantee": "enterprisedb", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ] + } + ] + } + }, + "expected_sql_file": "alter_function_change_grantee_acl.sql", + "expected_msql_file": "alter_function_change_grantee_acl.msql" + }, + { + "type": "alter", + "name": "Alter function delete acl.", + "endpoint": "NODE-function.obj_id", + "msql_endpoint": "NODE-function.msql_id", + "sql_endpoint": "NODE-function.sql_id", + "data": { + "acl": { + "deleted": [ + { + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ] + }, + { + "grantee": "enterprisedb", + "grantor": "enterprisedb", + "privileges": [ + { + "privilege_type": "X", + "privilege": true, + "with_grant": false + } + ] + } + ] + } + }, + "expected_sql_file": "alter_function_delete_acl.sql", + "expected_msql_file": "alter_function_delete_acl.msql" + }, + { + "type": "delete", + "name": "Drop function", + "endpoint": "NODE-function.delete_id", + "data": { + } + } + ] +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/test_procedures.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/test_procedures.json new file mode 100644 index 000000000..ed8de0427 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/test_procedures.json @@ -0,0 +1,142 @@ +{ + "scenarios": [ + { + "type": "create", + "name": "Create procedure", + "endpoint": "NODE-procedure.obj", + "sql_endpoint": "NODE-procedure.sql_id", + "data": { + "name": "Proc1_$%{}[]()&*^!@\"'`\\/#", + "acl": [], + "arguments": [{"argtype": "integer", "argmode": "IN", "argname": "i1", "argdefval": ""}], + "funcowner": "enterprisedb", + "lanname": "plpgsql", + "options": [], + "pronamespace": 2200, + "prosrc": "begin\nselect 1;\nend;", + "seclabels": [], + "variables": [], + "schema": "public", + "provolatile": null, + "proisstrict": false, + "proparallel": null, + "procost": null, + "proleakproof": false, + "probin": "$libdir/" + }, + "expected_sql_file": "create_procedure.sql" + }, { + "type": "alter", + "name": "Alter procedure comment", + "endpoint": "NODE-procedure.obj_id", + "sql_endpoint": "NODE-procedure.sql_id", + "data": { + "description": "some comment" + }, + "expected_sql_file": "alter_proc_comment.sql", + "expected_msql_file": "alter_proc_comment_msql.sql" + }, { + "type": "alter", + "name": "Alter procedure param", + "endpoint": "NODE-procedure.obj_id", + "sql_endpoint": "NODE-procedure.sql_id", + "data": { + "variables": { + "added": [{"name": "application_name", "value": "pgadmin"}] + } + }, + "expected_sql_file": "alter_proc_param.sql", + "expected_msql_file": "alter_proc_param_msql.sql" + }, + { + "type": "alter", + "name": "Alter procedure add privileges", + "endpoint": "NODE-procedure.obj_id", + "sql_endpoint": "NODE-procedure.sql_id", + "data": { + "acl": { + "added": [ + { + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": false + } + ] + }, + { + "grantee": "enterprisedb", + "grantor": "enterprisedb", + "privileges": [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": false + } + ] + } + ] + } + } + }, + { + "type": "alter", + "name": "Alter procedure delete privileges", + "endpoint": "NODE-procedure.obj_id", + "sql_endpoint": "NODE-procedure.sql_id", + "data": { + "acl": { + "deleted": [ + { + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "privileges": [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": false + } + ] + } + ] + } + } + }, + { + "type": "alter", + "name": "Alter procedure change privileges", + "endpoint": "NODE-procedure.obj_id", + "sql_endpoint": "NODE-procedure.sql_id", + "data": { + "acl": { + "changed": [ + { + "grantee": "PUBLIC", + "grantor": "enterprisedb", + "old_grantee": "enterprisedb", + "privileges": [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": false + } + ] + } + ] + } + }, + "expected_sql_file": "alter_proc_change_grantee_priv.sql", + "expected_msql_file": "alter_proc_change_grantee_priv.msql" + }, + { + "type": "delete", + "name": "Drop procedure", + "endpoint": "NODE-procedure.delete_id", + "data": { + } + } + ] +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/test_trigger_functions.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/test_trigger_functions.json new file mode 100644 index 000000000..3f20cf801 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/ppas/14_plus/test_trigger_functions.json @@ -0,0 +1,191 @@ +{ + "scenarios": [ + { + "type": "create", + "name": "Create trigger function", + "endpoint": "NODE-trigger_function.obj", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "name": "Trig1_$%{}[]()&*^!@\"'`\\/#", + "acl": [], + "args": [], + "funcowner": "enterprisedb", + "lanname": "plpgsql", + "options": [], + "pronamespace": 2200, + "prorettypename": "trigger", + "prosrc": "begin\nselect 1;\nend;", + "seclabels": [], + "variables": [], + "schema": "public" + }, + "expected_sql_file": "create_plain_trigger.sql" + }, { + "type": "alter", + "name": "Alter trigger function comment", + "endpoint": "NODE-trigger_function.obj_id", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "description": "some comment" + }, + "expected_sql_file": "alter_ptrig_comment.sql" + }, { + "type": "alter", + "name": "Alter trigger function Set 1 - Strict, Leakproof, Security of definer, Volatility", + "endpoint": "NODE-trigger_function.obj_id", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "proisstrict": true, + "proleakproof": true, + "prosecdef": true, + "provolatile": "s" + }, + "expected_sql_file": "alter_ptrig_set_1.sql" + }, { + "type": "alter", + "name": "Alter trigger function Set 2 - Cost, Volatility, Add Param", + "endpoint": "NODE-trigger_function.obj_id", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "procost": "123", + "provolatile": "i", + "variables": { + "added": [{ + "name": "application_name", + "value": "appname" + },{ + "name": "search_path", + "value": "public, pg_temp" + }] + } + }, + "expected_sql_file": "alter_ptrig_set_2.sql" + }, { + "type": "alter", + "name": "Alter trigger function Set 3 - Add Param, Change Param", + "endpoint": "NODE-trigger_function.obj_id", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "variables": { + "added": [{ + "name": "application_name", + "value": "appname2" + }], + "changed": [{ + "name": "array_nulls", + "value": true + },{ + "name": "search_path", + "value": "public, pg_catalog" + }] + } + }, + "expected_sql_file": "alter_ptrig_set_3.sql" + }, { + "type": "delete", + "name": "Drop trigger function", + "endpoint": "NODE-trigger_function.delete_id", + "data": { + } + }, { + "type": "create", + "name": "Create full fledged trigger function", + "endpoint": "NODE-trigger_function.obj", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "name": "Trig1_$%{}[]()&*^!@\"'`\\/#", + "acl": [{ + "grantee": "enterprisedb", + "grantor": "enterprisedb", + "privileges": [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": true + } + ] + }], + "args": [], + "description": "some comment", + "funcowner": "enterprisedb", + "lanname": "plpgsql", + "options": [], + "procost": "1234", + "proisstrict": true, + "proiswindow": true, + "proleakproof": true, + "pronamespace": 2200, + "proretset": true, + "prorettypename": "trigger", + "prorows": "4321", + "prosecdef": true, + "provolatile": "v", + "prosrc": "begin\nselect 1;\nend;", + "seclabels": [], + "variables": [{ + "name": "application_name", + "value": "appname" + },{ + "name": "search_path", + "value": "public, pg_temp" + }], + "schema": "public" + }, + "expected_sql_file": "create_plain_trigger_full.sql" + }, { + "type": "delete", + "name": "Drop full fledged trigger function", + "endpoint": "NODE-trigger_function.delete_id", + "data": { + } + }, { + "type": "create", + "name": "Create full fledged event trigger function", + "endpoint": "NODE-trigger_function.obj", + "sql_endpoint": "NODE-trigger_function.sql_id", + "data": { + "name": "Trig1_$%{}[]()&*^!@\"'`\\/#", + "acl": [{ + "grantee": "enterprisedb", + "grantor": "enterprisedb", + "privileges": [ + { + "privilege": true, + "privilege_type": "X", + "with_grant": true + } + ] + }], + "args": [], + "description": "some comment", + "funcowner": "enterprisedb", + "lanname": "plpgsql", + "options": [], + "procost": "1234", + "proisstrict": true, + "proiswindow": true, + "proleakproof": true, + "pronamespace": 2200, + "proretset": true, + "prorettypename": "event_trigger", + "prorows": "4321", + "prosecdef": true, + "provolatile": "v", + "prosrc": "begin\nselect 1;\nend;", + "seclabels": [], + "variables": [{ + "name": "application_name", + "value": "appname" + }], + "schema": "public" + }, + "expected_sql_file": "create_event_trigger_full.sql" + }, { + "type": "delete", + "name": "Drop full fledged event trigger function", + "endpoint": "NODE-trigger_function.delete_id", + "data": { + } + } + ] +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_procedure_exec_sql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_procedure_exec_sql.py index 6073163dc..e8595fb09 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_procedure_exec_sql.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/functions/tests/test_procedure_exec_sql.py @@ -25,7 +25,7 @@ class ProcedureExecSQLTestCase(BaseTestGenerator): ('Fetch Procedure SQL to execute', dict( url='/browser/procedure/exec_sql/', with_args=False, args="", expected_sql="{0} {1}.{2}()")), - ('Fetch Procedure with arguuments SQL to execute', dict( + ('Fetch Procedure with arguments SQL to execute', dict( url='/browser/procedure/exec_sql/', with_args=True, args="arg1 bigint", expected_sql="{0} {1}.{2}( )")) @@ -41,6 +41,9 @@ class ProcedureExecSQLTestCase(BaseTestGenerator): message = "Procedures are not supported by PG < 110000." self.skipTest(message) + if self.with_args and self.server_version >= 140000: + self.expected_sql = "{0} {1}.{2}( )" + proc_name = "test_procedure_exec_sql_%s" % str(uuid.uuid4())[1:8] proc_info = funcs_utils.create_procedure( self.server, self.db_name, self.schema_name, proc_name, diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/role_test_data.json b/web/pgadmin/browser/server_groups/servers/roles/tests/role_test_data.json index 47061a4c9..8c50a20b0 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/role_test_data.json +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/role_test_data.json @@ -202,7 +202,9 @@ "expected_data": { "status_code": 200, "error_msg": null, - "test_result_data": {} + "test_result_data": { + "result": "REASSIGN OWNED BY role_user_1 TO CURRENT_ROLE" + } } }, { diff --git a/web/pgadmin/utils/versioned_template_loader.py b/web/pgadmin/utils/versioned_template_loader.py index 08ff61dbe..3da832af8 100644 --- a/web/pgadmin/utils/versioned_template_loader.py +++ b/web/pgadmin/utils/versioned_template_loader.py @@ -77,7 +77,8 @@ def get_version_mapping_directories(server_type): :param server_type: :return: """ - return ({'name': "13_plus", 'number': 130000}, + return ({'name': "14_plus", 'number': 140000}, + {'name': "13_plus", 'number': 130000}, {'name': "12_plus", 'number': 120000}, {'name': "11_plus", 'number': 110000}, {'name': "10_plus", 'number': 100000},