]> source.dussan.org Git - sonarqube.git/blob
0ced621cbd782ca9be95177ba612b89958d97687
[sonarqube.git] /
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd">
3
4 <mapper namespace="org.sonar.db.permission.template.PermissionTemplateMapper">
5
6   <insert id="insert" parameterType="PermissionTemplate" useGeneratedKeys="false">
7     INSERT INTO permission_templates (name, uuid, description, key_pattern, created_at, updated_at)
8     VALUES (
9     #{name,jdbcType=VARCHAR},
10     #{uuid,jdbcType=VARCHAR},
11     #{description,jdbcType=VARCHAR},
12     #{keyPattern,jdbcType=VARCHAR},
13     #{createdAt},
14     #{updatedAt})
15   </insert>
16
17   <update id="update" parameterType="PermissionTemplate">
18     UPDATE permission_templates
19     SET name = #{name}, description = #{description}, key_pattern = #{keyPattern}, updated_at = #{updatedAt}
20     WHERE uuid = #{uuid}
21   </update>
22
23   <delete id="deleteByUuid" parameterType="String">
24     DELETE FROM permission_templates
25     WHERE uuid = #{uuid}
26   </delete>
27
28   <delete id="deleteUserPermissionsByTemplateUuid" parameterType="string">
29     delete from
30       perm_templates_users
31     where
32       template_uuid = #{templateUuid,jdbcType=VARCHAR}
33   </delete>
34
35   <delete id="deleteUserPermission" parameterType="PermissionTemplateUser">
36     DELETE FROM perm_templates_users
37     WHERE template_uuid = #{templateUuid}
38     AND user_uuid = #{userUuid}
39     AND permission_reference = #{permission}
40   </delete>
41
42   <delete id="deleteUserPermissionsByUserUuid" parameterType="String">
43     delete from perm_templates_users
44     where
45     user_uuid = #{userUuid,jdbcType=VARCHAR}
46   </delete>
47
48   <delete id="deleteGroupPermissionsByTemplateUuid" parameterType="String">
49     delete from
50       perm_templates_groups
51     where
52       template_uuid = #{templateUuid,jdbcType=VARCHAR}
53   </delete>
54
55   <delete id="deleteGroupPermission" parameterType="PermissionTemplateGroup">
56     DELETE FROM perm_templates_groups
57     WHERE template_uuid = #{templateUuid}
58     AND permission_reference = #{permission}
59     AND
60     <choose>
61       <when test="groupUuid != null">
62         group_uuid = #{groupUuid}
63       </when>
64       <otherwise>
65         group_uuid IS NULL
66       </otherwise>
67     </choose>
68   </delete>
69
70   <insert id="insertUserPermission" parameterType="PermissionTemplateUser">
71     INSERT INTO perm_templates_users (uuid, template_uuid, user_uuid, permission_reference, created_at, updated_at)
72     VALUES (#{uuid}, #{templateUuid}, #{userUuid}, #{permission}, #{createdAt}, #{updatedAt})
73   </insert>
74
75   <insert id="insertGroupPermission" parameterType="PermissionTemplateGroup">
76     INSERT INTO perm_templates_groups (uuid, template_uuid, group_uuid, permission_reference, created_at, updated_at)
77     VALUES (
78     #{uuid,jdbcType=VARCHAR},
79     #{templateUuid,jdbcType=VARCHAR},
80     #{groupUuid,jdbcType=VARCHAR},
81     #{permission,jdbcType=VARCHAR},
82     #{createdAt,jdbcType=TIMESTAMP},
83     #{updatedAt,jdbcType=TIMESTAMP}
84     )
85   </insert>
86
87   <delete id="deleteByGroupUuid" parameterType="string">
88     delete from perm_templates_groups
89     where group_uuid = #{groupUuid,jdbcType=VARCHAR}
90   </delete>
91
92   <select id="selectUserLoginsByQueryAndTemplate" parameterType="map" resultType="string">
93     select u.login as login
94       <include refid="userLoginsByQueryAndTemplate"/>
95     group by u.login, u.name
96     order by case when (count(ptu.permission_reference) > 0) then 1 else 2 end asc, u.name
97   </select>
98
99   <select id="countUserLoginsByQueryAndTemplate" parameterType="map" resultType="int">
100     SELECT count(1)
101       FROM (
102       SELECT DISTINCT u.login AS login, u.name AS name
103       <include refid="userLoginsByQueryAndTemplate"/>) u
104   </select>
105
106   <sql id="userLoginsByQueryAndTemplate">
107     FROM users u
108     LEFT JOIN perm_templates_users ptu ON ptu.user_uuid=u.uuid AND ptu.template_uuid=#{templateUuid}
109     <where>
110       u.active = ${_true}
111       <if test="query.getSearchQueryToSql() != null">
112         AND (lower(u.name) like #{query.searchQueryToSqlLowercase} ESCAPE '/'
113         OR lower(u.login) like #{query.searchQueryToSqlLowercase} ESCAPE '/'
114         OR lower(u.email) like #{query.searchQueryToSqlLowercase} ESCAPE '/')
115       </if>
116       <if test="query.withAtLeastOnePermission()">
117         and ptu.permission_reference is not null
118         <if test="query.getPermission()!=null">
119           and ptu.permission_reference=#{query.permission}
120         </if>
121       </if>
122     </where>
123   </sql>
124
125   <select id="selectGroupNamesByQueryAndTemplate" parameterType="map" resultType="string">
126     select groups.name, lower(groups.name), groups.group_uuid
127     <include refid="groupNamesByQueryAndTemplate"/>
128     group by groups.name, lower(groups.name), groups.group_uuid
129     order by case when (count(groups.permission) > 0) then 1 else 2 end asc, lower(groups.name), groups.name, groups.group_uuid
130   </select>
131
132   <select id="countGroupNamesByQueryAndTemplate" parameterType="map" resultType="int">
133     SELECT COUNT(1)
134     FROM (
135       SELECT DISTINCT group_uuid
136       <include refid="groupNamesByQueryAndTemplate"/>) g
137   </select>
138
139   <sql id="groupNamesByQueryAndTemplate">
140     FROM
141     (SELECT
142       g.uuid AS group_uuid,
143       g.name AS name,
144       ptg.permission_reference AS permission,
145       ptg.template_uuid AS templateUuid
146     FROM groups g
147     LEFT JOIN perm_templates_groups ptg ON
148         ptg.group_uuid=g.uuid
149       AND ptg.template_uuid=#{templateUuid}
150     UNION ALL
151     SELECT
152       'Anyone' AS group_uuid,
153       'Anyone' AS name,
154       ptg.permission_reference AS permission,
155       ptg.template_uuid AS templateUuid
156     FROM groups g
157     LEFT JOIN perm_templates_groups ptg ON
158       ptg.template_uuid=#{templateUuid}
159           <if test="query.withAtLeastOnePermission()">
160     <where>
161       ptg.group_uuid IS NULL
162     </where>
163           </if>
164     ) groups
165     <where>
166       <if test="query.searchQueryToSql != null">
167         AND LOWER(groups.name) LIKE #{query.searchQueryToSqlLowercase} ESCAPE '/'
168       </if>
169       <if test="query.withAtLeastOnePermission()">
170         AND groups.permission IS NOT NULL
171         AND groups.templateUuid=#{templateUuid}
172         <if test="query.permission != null">
173           AND groups.permission=#{query.permission}
174         </if>
175       </if>
176     </where>
177   </sql>
178
179   <sql id="templateColumns">
180     name, uuid, description, key_pattern AS keyPattern, created_at AS createdAt, updated_at AS updatedAt
181   </sql>
182
183   <select id="selectByUuid" parameterType="String" resultType="PermissionTemplate">
184     SELECT
185     <include refid="templateColumns"/>
186     FROM permission_templates
187     WHERE uuid=#{uuid}
188   </select>
189
190   <select id="selectAll" parameterType="map" resultType="PermissionTemplate">
191     select
192     <include refid="templateColumns"/>
193     from permission_templates
194     <if test="upperCaseNameLikeSql != null">
195         where upper(name) like #{upperCaseNameLikeSql} escape '/'
196     </if>
197     order by upper(name), name
198   </select>
199
200   <select id="selectByName" parameterType="map" resultType="PermissionTemplate">
201     select
202     <include refid="templateColumns"/>
203     from permission_templates
204     where
205     upper(name) = #{name,jdbcType=VARCHAR}
206   </select>
207
208   <sql id="permissionTemplateUserColumns">
209     ptu.uuid,
210     ptu.template_uuid as templateUuid,
211     ptu.permission_reference AS permission,
212     ptu.user_uuid AS userUuid,
213     u.name AS userName,
214     u.login AS userLogin,
215     ptu.created_at AS createdAt,
216     ptu.updated_at AS updatedAt
217   </sql>
218
219   <select id="selectUserPermissionsByTemplateUuidAndUserLogins" parameterType="String" resultType="PermissionTemplateUser">
220     SELECT
221     <include refid="permissionTemplateUserColumns"/>
222     FROM perm_templates_users ptu
223     INNER JOIN users u ON u.uuid = ptu.user_uuid AND u.active = ${_true}
224     <where>
225       AND ptu.template_uuid = #{templateUuid}
226       <if test="!logins.isEmpty()">
227         AND u.login IN <foreach collection="logins" open="(" close=")" item="login" separator=",">
228           #{login}
229         </foreach>
230       </if>
231     </where>
232   </select>
233
234   <select id="selectGroupPermissionsByTemplateUuidAndGroupNames" parameterType="String" resultType="PermissionTemplateGroup">
235     SELECT
236       sub.uuid,
237       sub.templateUuid,
238       sub.permission,
239       sub.groupUuid,
240       sub.groupName,
241       sub.createdAt,
242       sub.updatedAt
243     FROM  (
244       SELECT
245         ptg.uuid,
246         ptg.template_uuid as templateUuid,
247         ptg.permission_reference AS permission,
248         ptg.group_uuid AS groupUuid,
249         g.name AS groupName,
250         ptg.created_at as createdAt,
251         ptg.updated_at as updatedAt
252       FROM perm_templates_groups ptg
253       INNER JOIN groups g ON
254         g.uuid=ptg.group_uuid
255       UNION ALL
256         SELECT
257           ptg.uuid,
258           ptg.template_uuid as templateUuid,
259           ptg.permission_reference AS permission,
260           'Anyone' AS groupUuid,
261           'Anyone' AS groupName,
262           ptg.created_at as createdAt,
263           ptg.updated_at as updatedAt
264         FROM perm_templates_groups ptg
265         WHERE ptg.group_uuid IS NULL
266     ) sub
267     <where>
268       sub.templateUuid=#{templateUuid}
269       <if test="!groups.isEmpty()">
270         AND sub.groupName IN <foreach collection="groups" open="(" close=")" item="group" separator=",">
271         #{group,jdbcType=VARCHAR}
272         </foreach>
273       </if>
274     </where>
275   </select>
276
277   <select id="selectPotentialPermissionsByUserUuidAndTemplateUuid" parameterType="map" resultType="String">
278     <if test="userUuid!=null">
279       -- from template users
280       select ptu.permission_reference as permission_key
281       from perm_templates_users ptu
282       <where>
283         and ptu.user_uuid=#{userUuid}
284         and ptu.template_uuid=#{templateUuid}
285       </where>
286       UNION
287       -- from template groups except anyone group
288       select ptg.permission_reference as permission_key
289       from perm_templates_groups ptg
290       inner join groups_users gu on ptg.group_uuid = gu.group_uuid
291       <where>
292         and gu.user_uuid=#{userUuid}
293         and ptg.template_uuid=#{templateUuid}
294       </where>
295       UNION
296       -- from template characteristics
297       select ptc.permission_key as permission_key
298       from perm_tpl_characteristics ptc
299       <where>
300         and with_project_creator = ${_true}
301         and ptc.template_uuid = #{templateUuid}
302       </where>
303       UNION
304     </if>
305     -- from anyone group
306     select ptg.permission_reference as permission_key
307     from perm_templates_groups ptg
308     where ptg.template_uuid=#{templateUuid}
309     and ptg.group_uuid IS NULL
310   </select>
311
312   <select id="usersCountByTemplateUuidAndPermission" parameterType="map"
313           resultType="org.sonar.db.permission.template.CountByTemplateAndPermissionDto">
314     SELECT ptu.template_uuid as templateUuid, ptu.permission_reference as permission, count(u.login) as count
315     FROM users u
316     INNER JOIN perm_templates_users ptu ON ptu.user_uuid=u.uuid
317     AND ptu.template_uuid in
318     <foreach collection="templateUuids" open="(" close=")" item="id" separator=",">
319       #{id}
320     </foreach>
321     <where>
322       AND u.active = ${_true}
323     </where>
324     GROUP BY ptu.template_uuid, ptu.permission_reference
325   </select>
326
327   <select id="groupsCountByTemplateUuidAndPermission" parameterType="map"
328           resultType="org.sonar.db.permission.template.CountByTemplateAndPermissionDto">
329     SELECT count(1) as count, permission, templateUuid
330     FROM
331     (SELECT g.name as name, ptg.permission_reference as permission, ptg.template_uuid as templateUuid
332     FROM groups g
333     INNER JOIN perm_templates_groups ptg ON ptg.group_uuid=g.uuid
334     UNION
335     -- Add Anyone group permission
336     SELECT #{anyoneGroup} as name, ptg.permission_reference as permission, ptg.template_uuid as templateUuid
337     FROM perm_templates_groups ptg
338     <where>
339       AND ptg.group_uuid IS NULL
340     </where>
341     ) groups
342     <where>
343       AND groups.templateUuid in
344       <foreach collection="templateUuids" open="(" close=")" item="id" separator=",">
345         #{id}
346       </foreach>
347     </where>
348     GROUP BY groups.permission, groups.templateUuid
349   </select>
350
351   <select id="countGroupsWithPermission" resultType="int" parameterType="map">
352     select count(1)
353     from perm_templates_groups ptg
354     where ptg.template_uuid = #{templateUuid}
355     and ptg.permission_reference = #{permission}
356     and
357     <if test="groupUuid == null">
358       ptg.group_uuid is null
359     </if>
360     <if test="groupUuid != null">
361       ptg.group_uuid = #{groupUuid}
362     </if>
363   </select>
364
365   <select id="selectAllGroupPermissionTemplatesByGroupUuid" parameterType="string" resultType="PermissionTemplateGroup">
366     SELECT
367       ptg.uuid,
368       ptg.template_uuid as templateUuid,
369       ptg.permission_reference AS permission,
370       ptg.group_uuid AS groupUuid,
371       g.name AS groupName,
372       ptg.created_at as createdAt,
373       ptg.updated_at as updatedAt
374     FROM perm_templates_groups ptg
375     INNER JOIN groups g ON g.uuid=ptg.group_uuid
376     <where>
377       ptg.group_uuid=#{groupUuid,jdbcType=VARCHAR}
378     </where>
379   </select>
380 </mapper>