ab49604f2e3efc08ba20c1736dd51c3806adc3d1
[xtuple] / enyo-client / database / source / xt / functions / grant_role_ext.sql
1 drop function if exists xt.grant_role_ext(text, text);
2
3 create or replace function xt.grant_role_ext(role_name text, ext_name text) returns boolean volatile as $$
4
5   var sqlCount = "select count(*) as count from xt.grpext where grpext_grp_id = $1 and grpext_ext_id = $2;",
6     sqlInsert = "insert into xt.grpext (grpext_grp_id, grpext_ext_id) values ($1, $2);",
7     sqlRoleId = "select grp_id from public.grp where grp_name = $1;",
8     sqlExtId = "select ext_id from xt.ext where ext_name = $1;",
9     role = plv8.execute(sqlRoleId, [role_name.toUpperCase()]),
10     ext = plv8.execute(sqlExtId, [ext_name]),
11     roleId,
12     extId,
13     count;
14
15   if (!role.length || !ext.length) {
16     plv8.elog(WARNING, "Cannot grant Role: ", role_name, " Extension: ", ext_name, ". The Role or Extension has not been created yet.");
17
18     return false;
19   } else {
20     roleId = role[0].grp_id;
21     extId = ext[0].grp_id;
22     count = plv8.execute(sqlCount, [roleId, extId])[0].count;
23   }
24
25   if(count > 0) {
26     return false;
27   }
28
29   plv8.execute(sqlInsert, [roleId, extId]);
30
31   return true;
32
33 $$ language plv8;