Daily Archives: August 9, 2007

Making a cool Query for Sakai

I am down at NCSA right now working on pulling site membership info out of Sakai for the Maeviz project so it can be stuffed into SAML assertions to pass to other systems. We are using MyProxy and GridShib.
My job was to come up with a queru whcih for a particular Enterprise ID (i.e. csev) – find all the sites they are in, give the site ID, Site title, and whether they were the owner or just a member (I used site.upd for this).
I seldom get to play in the DB – after a few hours I came up with this query. Feel free to criticize – it only works on MySql 2.3 for sure:

SELECT SAKAI_SITE.SITE_ID,SAKAI_SITE.TITLE, NOT ISNULL(SAKAI_REALM_RL_FN.FUNCTION_KEY) AS POWER
FROM SAKAI_USER_ID_MAP
JOIN SAKAI_SITE_USER
ON SAKAI_USER_ID_MAP.USER_ID = SAKAI_SITE_USER.USER_ID
join SAKAI_SITE
ON SAKAI_SITE_USER.SITE_ID = SAKAI_SITE.SITE_ID
JOIN SAKAI_REALM
ON SAKAI_REALM.REALM_ID = CONCAT('/site/',SAKAI_SITE.SITE_ID)
JOIN SAKAI_REALM_RL_GR
ON SAKAI_REALM.REALM_KEY = SAKAI_REALM_RL_GR.REALM_KEY
AND SAKAI_SITE_USER.USER_ID = SAKAI_REALM_RL_GR.USER_ID
LEFT JOIN SAKAI_REALM_RL_FN
ON SAKAI_REALM.REALM_KEY = SAKAI_REALM_RL_FN.REALM_KEY
AND SAKAI_REALM_RL_GR.ROLE_KEY = SAKAI_REALM_RL_FN.ROLE_KEY
AND SAKAI_REALM_RL_FN.FUNCTION_KEY IN (SELECT FUNCTION_KEY FROM SAKAI_REALM_FUNCTION WHERE FUNCTION_NAME = 'site.upd')
WHERE
SAKAI_USER_ID_MAP.EID='tmclaren'
;

Here is sample output:

+---------------------------------------+--------------------------+-------+
| SITE_ID                               | TITLE                    | POWER |
+---------------------------------------+--------------------------+-------+
| !admin                                | Administration Workspace |     1 |
| ed4fd8d8-a717-4a3d-00f0-f1e368ac1faa  | MAEviz                   |     0 |
| ~1d722376-bd33-44a0-80ba-de56ba912175 | My Workspace             |     1 |
+---------------------------------------+--------------------------+-------+

Good fun.