public inbox for [email protected]
help / color / mirror / Atom feedFrom: Akshay Joshi <[email protected]>
To: pgadmin-hackers <[email protected]>
Subject: [pgAdmin4][Patch]: RM 4452 Add RE-SQL tests for Languages
Date: Wed, 10 Jul 2019 15:58:23 +0530
Message-ID: <CANxoLDd2NaPNH5cDXWtxJy1jjooggWAww+obroFaWxUpnxz-pg@mail.gmail.com> (raw)
Hi Hackers,
Attached is the patch to fix RM #4452 "Add RE-SQL tests for Languages".
Please review it.
--
*Thanks & Regards*
*Akshay Joshi*
*Sr. Software Architect*
*EnterpriseDB Software India Private Limited*
*Mobile: +91 976-788-8246*
Attachments:
[application/octet-stream] RM_4452.patch (17.7K, 3-RM_4452.patch)
download | inline diff:
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/languages/__init__.py
index 11f835c7..2b03d5c6 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/__init__.py
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/__init__.py
@@ -722,6 +722,13 @@ class LanguageView(PGChildNodeView):
else:
old_data[row['deftype']] = [priv]
+ # To format privileges
+ if 'lanacl' in old_data:
+ old_data['lanacl'] = parse_priv_to_db(
+ old_data['lanacl'],
+ ['U']
+ )
+
seclabels = []
if 'seclabels' in old_data and old_data['seclabels'] is not None:
import re
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/acl.sql
index c760114f..dfdafac1 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/acl.sql
@@ -17,3 +17,4 @@ FROM
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
GROUP BY g.rolname, gt.rolname
+ORDER BY grantee
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/sqlpane.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/sqlpane.sql
index d4f4f65d..e5ac14a7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/sqlpane.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/9.3_plus/sqlpane.sql
@@ -5,7 +5,7 @@
-- DROP LANGUAGE {{ conn|qtIdent(data.name) }}
{# ============= CREATE LANGUAGE Query ============= #}
-CREATE {% if data.trusted %}TRUSTED{% endif %} PROCEDURAL LANGUAGE {{ conn|qtIdent(data.name) }}
+CREATE{% if data.trusted %} TRUSTED{% endif %} PROCEDURAL LANGUAGE {{ conn|qtIdent(data.name) }}
{% if data.lanproc %}
HANDLER {{ conn|qtIdent(data.lanproc) }}
{% endif %}
@@ -14,7 +14,7 @@ CREATE {% if data.trusted %}TRUSTED{% endif %} PROCEDURAL LANGUAGE {{ conn|qtIde
{% endif %}
{% if data.lanval %}
VALIDATOR {{ conn|qtIdent(data.lanval) }}{% endif %};
- {# ============= ALTER LANGUAGE Query ============= #}
+{# ============= ALTER LANGUAGE Query ============= #}
{% if data.lanowner %}
ALTER LANGUAGE {{ conn|qtIdent(data.name) }}
@@ -30,7 +30,7 @@ COMMENT ON LANGUAGE {{ conn|qtIdent(data.name) }}
{% if data.lanacl and data.lanacl|length > 0 %}
{% for priv in data.lanacl %}
-{{ PRIVILEGE.RESETALL(conn, 'LANGUAGE', priv.grantee, data.name) }}
+{{ PRIVILEGE.APPLY(conn, 'LANGUAGE', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}
{% endfor %}
{% endif %}
{# ============= PRIVILEGES on LANGUAGE ============= #}
@@ -39,4 +39,4 @@ COMMENT ON LANGUAGE {{ conn|qtIdent(data.name) }}
{% for r in data.seclabels %}
{{ SECLABEL.APPLY(conn, 'PROCEDURAL LANGUAGE', data.name, r.provider, r.label) }}
{% endfor %}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/acl.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/acl.sql
index c13aa510..9054baa4 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/acl.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/acl.sql
@@ -21,3 +21,4 @@ FROM
LEFT JOIN pg_catalog.pg_roles g ON (d.grantor = g.oid)
LEFT JOIN pg_catalog.pg_roles gt ON (d.grantee = gt.oid)
GROUP BY g.rolname, gt.rolname
+ORDER BY grantee
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/sqlpane.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/sqlpane.sql
index d0003cf4..e5ac14a7 100644
--- a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/sqlpane.sql
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/sqlpane.sql
@@ -5,7 +5,7 @@
-- DROP LANGUAGE {{ conn|qtIdent(data.name) }}
{# ============= CREATE LANGUAGE Query ============= #}
-CREATE {% if data.trusted %}TRUSTED{% endif %} PROCEDURAL LANGUAGE {{ conn|qtIdent(data.name) }}
+CREATE{% if data.trusted %} TRUSTED{% endif %} PROCEDURAL LANGUAGE {{ conn|qtIdent(data.name) }}
{% if data.lanproc %}
HANDLER {{ conn|qtIdent(data.lanproc) }}
{% endif %}
@@ -14,7 +14,7 @@ CREATE {% if data.trusted %}TRUSTED{% endif %} PROCEDURAL LANGUAGE {{ conn|qtIde
{% endif %}
{% if data.lanval %}
VALIDATOR {{ conn|qtIdent(data.lanval) }}{% endif %};
- {# ============= ALTER LANGUAGE Query ============= #}
+{# ============= ALTER LANGUAGE Query ============= #}
{% if data.lanowner %}
ALTER LANGUAGE {{ conn|qtIdent(data.name) }}
@@ -30,7 +30,7 @@ COMMENT ON LANGUAGE {{ conn|qtIdent(data.name) }}
{% if data.lanacl and data.lanacl|length > 0 %}
{% for priv in data.lanacl %}
-{{ PRIVILEGE.RESETALL(conn, 'LANGUAGE', priv.grantee, data.name) }}
+{{ PRIVILEGE.APPLY(conn, 'LANGUAGE', priv.grantee, data.name, priv.without_grant, priv.with_grant) }}
{% endfor %}
{% endif %}
{# ============= PRIVILEGES on LANGUAGE ============= #}
@@ -39,4 +39,4 @@ COMMENT ON LANGUAGE {{ conn|qtIdent(data.name) }}
{% for r in data.seclabels %}
{{ SECLABEL.APPLY(conn, 'PROCEDURAL LANGUAGE', data.name, r.provider, r.label) }}
{% endfor %}
-{% endif %}
\ No newline at end of file
+{% endif %}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/alter_comment_privileges.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/alter_comment_privileges.sql
new file mode 100644
index 00000000..acc99758
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/alter_comment_privileges.sql
@@ -0,0 +1,18 @@
+-- Language: Lan2_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+
+CREATE TRUSTED PROCEDURAL LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+ HANDLER plpgsql_call_handler
+ INLINE plpgsql_inline_handler
+ VALIDATOR plpgsql_validator;
+
+ALTER LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+ OWNER TO <OWNER>;
+
+COMMENT ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+ IS 'This is comment on custom trusted language';
+
+GRANT USAGE ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
+
+GRANT USAGE ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" TO postgres WITH GRANT OPTION;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/alter_trusted_lan_name.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/alter_trusted_lan_name.sql
new file mode 100644
index 00000000..d9c28893
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/alter_trusted_lan_name.sql
@@ -0,0 +1,11 @@
+-- Language: Lan2_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+
+CREATE TRUSTED PROCEDURAL LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+ HANDLER plpgsql_call_handler
+ INLINE plpgsql_inline_handler
+ VALIDATOR plpgsql_validator;
+
+ALTER LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+ OWNER TO <OWNER>;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/create_trusted_language.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/create_trusted_language.sql
new file mode 100644
index 00000000..9b5ff05e
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/create_trusted_language.sql
@@ -0,0 +1,11 @@
+-- Language: Lan1_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+
+CREATE TRUSTED PROCEDURAL LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+ HANDLER plpgsql_call_handler
+ INLINE plpgsql_inline_handler
+ VALIDATOR plpgsql_validator;
+
+ALTER LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+ OWNER TO <OWNER>;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/create_untrusted_language.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/create_untrusted_language.sql
new file mode 100644
index 00000000..b2890ba4
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/create_untrusted_language.sql
@@ -0,0 +1,11 @@
+-- Language: Lan1_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+
+CREATE PROCEDURAL LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+ HANDLER plpgsql_call_handler
+ INLINE plpgsql_inline_handler
+ VALIDATOR plpgsql_validator;
+
+ALTER LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+ OWNER TO <OWNER>;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/test.json b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/test.json
new file mode 100644
index 00000000..b1c7b18c
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/pg/9.4_plus/test.json
@@ -0,0 +1,86 @@
+{
+ "scenarios": [
+ {
+ "type": "create",
+ "name": "Create trusted language",
+ "endpoint": "NODE-language.obj",
+ "sql_endpoint": "NODE-language.sql_id",
+ "data": {
+ "name": "Lan1_$%{}[]()&*^!@\"'`\\/#",
+ "trusted": true,
+ "lanproc": "plpgsql_call_handler",
+ "laninl": "plpgsql_inline_handler",
+ "lanval": "plpgsql_validator",
+ "is_template": false
+ },
+ "expected_sql_file": "create_trusted_language.sql"
+ },
+ {
+ "type": "alter",
+ "name": "Alter trusted language name",
+ "endpoint": "NODE-language.obj_id",
+ "sql_endpoint": "NODE-language.sql_id",
+ "data": {
+ "name": "Lan2_$%{}[]()&*^!@\"'`\\/#"
+ },
+ "expected_sql_file": "alter_trusted_lan_name.sql"
+ },
+ {
+ "type": "alter",
+ "name": "Alter comment and privileges",
+ "endpoint": "NODE-language.obj_id",
+ "sql_endpoint": "NODE-language.sql_id",
+ "data": {
+ "description": "This is comment on custom trusted language",
+ "lanacl": {
+ "added":[{
+ "grantee": "PUBLIC",
+ "grantor": "postgres",
+ "privileges":[
+ {
+ "privilege_type": "U",
+ "privilege": true,
+ "with_grant": false
+ }]
+ },{
+ "grantee": "postgres",
+ "grantor": "postgres",
+ "privileges":[{
+ "privilege_type": "U",
+ "privilege": true,
+ "with_grant": true
+ }]
+ }]
+ }
+ },
+ "expected_sql_file": "alter_comment_privileges.sql"
+ },
+ {
+ "type": "delete",
+ "name": "Drop trusted language",
+ "endpoint": "NODE-language.obj_id",
+ "data": {}
+ },
+ {
+ "type": "create",
+ "name": "Create untrusted language",
+ "endpoint": "NODE-language.obj",
+ "sql_endpoint": "NODE-language.sql_id",
+ "data": {
+ "name": "Lan1_$%{}[]()&*^!@\"'`\\/#",
+ "trusted": false,
+ "lanproc": "plpgsql_call_handler",
+ "laninl": "plpgsql_inline_handler",
+ "lanval": "plpgsql_validator",
+ "is_template": false
+ },
+ "expected_sql_file": "create_untrusted_language.sql"
+ },
+ {
+ "type": "delete",
+ "name": "Drop untrusted language",
+ "endpoint": "NODE-language.obj_id",
+ "data": {}
+ }
+ ]
+}
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/alter_comment_privileges.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/alter_comment_privileges.sql
new file mode 100644
index 00000000..3681e4fa
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/alter_comment_privileges.sql
@@ -0,0 +1,18 @@
+-- Language: Lan2_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+
+CREATE TRUSTED PROCEDURAL LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+ HANDLER spl_call_handler
+ INLINE spl_inline_handler
+ VALIDATOR spl_validator;
+
+ALTER LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+ OWNER TO <OWNER>;
+
+COMMENT ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+ IS 'This is comment on custom trusted language';
+
+GRANT USAGE ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" TO PUBLIC;
+
+GRANT USAGE ON LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#" TO enterprisedb WITH GRANT OPTION;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/alter_trusted_lan_name.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/alter_trusted_lan_name.sql
new file mode 100644
index 00000000..9c41b6d0
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/alter_trusted_lan_name.sql
@@ -0,0 +1,11 @@
+-- Language: Lan2_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+
+CREATE TRUSTED PROCEDURAL LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+ HANDLER spl_call_handler
+ INLINE spl_inline_handler
+ VALIDATOR spl_validator;
+
+ALTER LANGUAGE "Lan2_$%{}[]()&*^!@""'`\/#"
+ OWNER TO <OWNER>;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/create_trusted_language.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/create_trusted_language.sql
new file mode 100644
index 00000000..b197ce2c
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/create_trusted_language.sql
@@ -0,0 +1,11 @@
+-- Language: Lan1_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+
+CREATE TRUSTED PROCEDURAL LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+ HANDLER spl_call_handler
+ INLINE spl_inline_handler
+ VALIDATOR spl_validator;
+
+ALTER LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+ OWNER TO <OWNER>;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/create_untrusted_language.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/create_untrusted_language.sql
new file mode 100644
index 00000000..96792bd7
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/create_untrusted_language.sql
@@ -0,0 +1,11 @@
+-- Language: Lan1_$%{}[]()&*^!@"'`\/#
+
+-- DROP LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+
+CREATE PROCEDURAL LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+ HANDLER spl_call_handler
+ INLINE spl_inline_handler
+ VALIDATOR spl_validator;
+
+ALTER LANGUAGE "Lan1_$%{}[]()&*^!@""'`\/#"
+ OWNER TO <OWNER>;
diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/test.json b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/test.json
new file mode 100644
index 00000000..48ffa74f
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/databases/languages/tests/ppas/9.4_plus/test.json
@@ -0,0 +1,85 @@
+{
+ "scenarios": [
+ {
+ "type": "create",
+ "name": "Create trusted language",
+ "endpoint": "NODE-language.obj",
+ "sql_endpoint": "NODE-language.sql_id",
+ "data": {
+ "name": "Lan1_$%{}[]()&*^!@\"'`\\/#",
+ "trusted": true,
+ "lanproc": "spl_call_handler",
+ "laninl": "spl_inline_handler",
+ "lanval": "spl_validator",
+ "is_template": false
+ },
+ "expected_sql_file": "create_trusted_language.sql"
+ },
+ {
+ "type": "alter",
+ "name": "Alter trusted language name",
+ "endpoint": "NODE-language.obj_id",
+ "sql_endpoint": "NODE-language.sql_id",
+ "data": {
+ "name": "Lan2_$%{}[]()&*^!@\"'`\\/#"
+ },
+ "expected_sql_file": "alter_trusted_lan_name.sql"
+ },
+ {
+ "type": "alter",
+ "name": "Alter comment and privileges",
+ "endpoint": "NODE-language.obj_id",
+ "sql_endpoint": "NODE-language.sql_id",
+ "data": {
+ "description": "This is comment on custom trusted language",
+ "lanacl": {
+ "added":[{
+ "grantee": "PUBLIC",
+ "grantor": "enterprisedb",
+ "privileges":[{
+ "privilege_type": "U",
+ "privilege": true,
+ "with_grant": false
+ }]
+ },{
+ "grantee": "enterprisedb",
+ "grantor": "enterprisedb",
+ "privileges":[{
+ "privilege_type": "U",
+ "privilege": true,
+ "with_grant": true
+ }]
+ }]
+ }
+ },
+ "expected_sql_file": "alter_comment_privileges.sql"
+ },
+ {
+ "type": "delete",
+ "name": "Drop trusted language",
+ "endpoint": "NODE-language.obj_id",
+ "data": {}
+ },
+ {
+ "type": "create",
+ "name": "Create untrusted language",
+ "endpoint": "NODE-language.obj",
+ "sql_endpoint": "NODE-language.sql_id",
+ "data": {
+ "name": "Lan1_$%{}[]()&*^!@\"'`\\/#",
+ "trusted": false,
+ "lanproc": "spl_call_handler",
+ "laninl": "spl_inline_handler",
+ "lanval": "spl_validator",
+ "is_template": false
+ },
+ "expected_sql_file": "create_untrusted_language.sql"
+ },
+ {
+ "type": "delete",
+ "name": "Drop untrusted language",
+ "endpoint": "NODE-language.obj_id",
+ "data": {}
+ }
+ ]
+}
view thread (2+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected]
Subject: Re: [pgAdmin4][Patch]: RM 4452 Add RE-SQL tests for Languages
In-Reply-To: <CANxoLDd2NaPNH5cDXWtxJy1jjooggWAww+obroFaWxUpnxz-pg@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox