]> source.dussan.org Git - sonarqube.git/blob
2e122c5841aa35ebafab31eb91ecd70e5d45141a
[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" 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     <include refid="pagination"/>
98   </select>
99
100   <select id="countUserLoginsByQueryAndTemplate" parameterType="map" resultType="int">
101     SELECT count(1)
102       FROM (
103       SELECT DISTINCT u.login AS login, u.name AS name
104       <include refid="userLoginsByQueryAndTemplate"/>) u
105   </select>
106
107   <sql id="userLoginsByQueryAndTemplate">
108     FROM users u
109     LEFT JOIN perm_templates_users ptu ON ptu.user_uuid=u.uuid AND ptu.template_uuid=#{templateUuid}
110     <where>
111       u.active = ${_true}
112       <if test="query.getSearchQueryToSql() != null">
113         AND (lower(u.name) like #{query.searchQueryToSqlLowercase} ESCAPE '/'
114         OR lower(u.login) like #{query.searchQueryToSqlLowercase} ESCAPE '/'
115         OR lower(u.email) like #{query.searchQueryToSqlLowercase} ESCAPE '/')
116       </if>
117       <if test="query.withAtLeastOnePermission()">
118         and ptu.permission_reference is not null
119         <if test="query.getPermission()!=null">
120           and ptu.permission_reference=#{query.permission}
121         </if>
122       </if>
123     </where>
124   </sql>
125
126   <select id="selectGroupNamesByQueryAndTemplate" resultType="string">
127     select groups.name, lower(groups.name), groups.group_uuid
128     <include refid="groupNamesByQueryAndTemplate"/>
129     group by groups.name, lower(groups.name), groups.group_uuid
130     order by case when (count(groups.permission) > 0) then 1 else 2 end asc, lower(groups.name), groups.name, groups.group_uuid
131     <include refid="pagination"/>
132   </select>
133
134   <select id="countGroupNamesByQueryAndTemplate" parameterType="map" resultType="int">
135     SELECT COUNT(1)
136     FROM (
137       SELECT DISTINCT group_uuid
138       <include refid="groupNamesByQueryAndTemplate"/>) g
139   </select>
140
141   <sql id="pagination">
142     offset #{pagination.offset,jdbcType=INTEGER} rows fetch next #{pagination.pageSize,jdbcType=INTEGER} rows only
143   </sql>
144
145   <sql id="groupNamesByQueryAndTemplate">
146     FROM
147     (SELECT
148       g.uuid AS group_uuid,
149       g.name AS name,
150       ptg.permission_reference AS permission,
151       ptg.template_uuid AS templateUuid
152     FROM groups g
153     LEFT JOIN perm_templates_groups ptg ON
154         ptg.group_uuid=g.uuid
155       AND ptg.template_uuid=#{templateUuid}
156     UNION ALL
157     SELECT
158       'Anyone' AS group_uuid,
159       'Anyone' AS name,
160       ptg.permission_reference AS permission,
161       ptg.template_uuid AS templateUuid
162     FROM groups g
163     LEFT JOIN perm_templates_groups ptg ON
164       ptg.template_uuid=#{templateUuid}
165           <if test="query.withAtLeastOnePermission()">
166     <where>
167       ptg.group_uuid IS NULL
168     </where>
169           </if>
170     ) groups
171     <where>
172       <if test="query.searchQueryToSql != null">
173         AND LOWER(groups.name) LIKE #{query.searchQueryToSqlLowercase} ESCAPE '/'
174       </if>
175       <if test="query.withAtLeastOnePermission()">
176         AND groups.permission IS NOT NULL
177         AND groups.templateUuid=#{templateUuid}
178         <if test="query.permission != null">
179           AND groups.permission=#{query.permission}
180         </if>
181       </if>
182     </where>
183   </sql>
184
185   <sql id="templateColumns">
186     name, uuid, description, key_pattern AS keyPattern, created_at AS createdAt, updated_at AS updatedAt
187   </sql>
188
189   <select id="selectByUuid" parameterType="String" resultType="PermissionTemplate">
190     SELECT
191     <include refid="templateColumns"/>
192     FROM permission_templates
193     WHERE uuid=#{uuid}
194   </select>
195
196   <select id="selectAll" parameterType="map" resultType="PermissionTemplate">
197     select
198     <include refid="templateColumns"/>
199     from permission_templates
200     <if test="upperCaseNameLikeSql != null">
201         where upper(name) like #{upperCaseNameLikeSql} escape '/'
202     </if>
203     order by upper(name), name
204   </select>
205
206   <select id="selectByName" parameterType="map" resultType="PermissionTemplate">
207     select
208     <include refid="templateColumns"/>
209     from permission_templates
210     where
211     upper(name) = #{name,jdbcType=VARCHAR}
212   </select>
213
214   <sql id="permissionTemplateUserColumns">
215     ptu.uuid,
216     ptu.template_uuid as templateUuid,
217     ptu.permission_reference AS permission,
218     ptu.user_uuid AS userUuid,
219     u.name AS userName,
220     u.login AS userLogin,
221     ptu.created_at AS createdAt,
222     ptu.updated_at AS updatedAt
223   </sql>
224
225   <select id="selectUserPermissionsByTemplateUuidAndUserLogins" parameterType="String" resultType="PermissionTemplateUser">
226     SELECT
227     <include refid="permissionTemplateUserColumns"/>
228     FROM perm_templates_users ptu
229     INNER JOIN users u ON u.uuid = ptu.user_uuid AND u.active = ${_true}
230     <where>
231       AND ptu.template_uuid = #{templateUuid}
232       <if test="!logins.isEmpty()">
233         AND u.login IN <foreach collection="logins" open="(" close=")" item="login" separator=",">
234           #{login}
235         </foreach>
236       </if>
237     </where>
238   </select>
239
240   <select id="selectGroupPermissionsByTemplateUuidAndGroupNames" parameterType="String" resultType="PermissionTemplateGroup">
241     SELECT
242       sub.uuid,
243       sub.templateUuid,
244       sub.permission,
245       sub.groupUuid,
246       sub.groupName,
247       sub.createdAt,
248       sub.updatedAt
249     FROM  (
250       SELECT
251         ptg.uuid,
252         ptg.template_uuid as templateUuid,
253         ptg.permission_reference AS permission,
254         ptg.group_uuid AS groupUuid,
255         g.name AS groupName,
256         ptg.created_at as createdAt,
257         ptg.updated_at as updatedAt
258       FROM perm_templates_groups ptg
259       INNER JOIN groups g ON
260         g.uuid=ptg.group_uuid
261       UNION ALL
262         SELECT
263           ptg.uuid,
264           ptg.template_uuid as templateUuid,
265           ptg.permission_reference AS permission,
266           'Anyone' AS groupUuid,
267           'Anyone' AS groupName,
268           ptg.created_at as createdAt,
269           ptg.updated_at as updatedAt
270         FROM perm_templates_groups ptg
271         WHERE ptg.group_uuid IS NULL
272     ) sub
273     <where>
274       sub.templateUuid=#{templateUuid}
275       <if test="!groups.isEmpty()">
276         AND sub.groupName IN <foreach collection="groups" open="(" close=")" item="group" separator=",">
277         #{group,jdbcType=VARCHAR}
278         </foreach>
279       </if>
280     </where>
281   </select>
282
283   <select id="selectPotentialPermissionsByUserUuidAndTemplateUuid" parameterType="map" resultType="String">
284     <if test="userUuid!=null">
285       -- from template users
286       select ptu.permission_reference as permission_key
287       from perm_templates_users ptu
288       <where>
289         and ptu.user_uuid=#{userUuid}
290         and ptu.template_uuid=#{templateUuid}
291       </where>
292       UNION
293       -- from template groups except anyone group
294       select ptg.permission_reference as permission_key
295       from perm_templates_groups ptg
296       inner join groups_users gu on ptg.group_uuid = gu.group_uuid
297       <where>
298         and gu.user_uuid=#{userUuid}
299         and ptg.template_uuid=#{templateUuid}
300       </where>
301       UNION
302       -- from template characteristics
303       select ptc.permission_key as permission_key
304       from perm_tpl_characteristics ptc
305       <where>
306         and with_project_creator = ${_true}
307         and ptc.template_uuid = #{templateUuid}
308       </where>
309       UNION
310     </if>
311     -- from anyone group
312     select ptg.permission_reference as permission_key
313     from perm_templates_groups ptg
314     where ptg.template_uuid=#{templateUuid}
315     and ptg.group_uuid IS NULL
316   </select>
317
318   <select id="usersCountByTemplateUuidAndPermission" parameterType="map"
319           resultType="org.sonar.db.permission.template.CountByTemplateAndPermissionDto">
320     SELECT ptu.template_uuid as templateUuid, ptu.permission_reference as permission, count(u.login) as count
321     FROM users u
322     INNER JOIN perm_templates_users ptu ON ptu.user_uuid=u.uuid
323     AND ptu.template_uuid in
324     <foreach collection="templateUuids" open="(" close=")" item="id" separator=",">
325       #{id}
326     </foreach>
327     <where>
328       AND u.active = ${_true}
329     </where>
330     GROUP BY ptu.template_uuid, ptu.permission_reference
331   </select>
332
333   <select id="groupsCountByTemplateUuidAndPermission" parameterType="map"
334           resultType="org.sonar.db.permission.template.CountByTemplateAndPermissionDto">
335     SELECT count(1) as count, permission, templateUuid
336     FROM
337     (SELECT g.name as name, ptg.permission_reference as permission, ptg.template_uuid as templateUuid
338     FROM groups g
339     INNER JOIN perm_templates_groups ptg ON ptg.group_uuid=g.uuid
340     UNION
341     -- Add Anyone group permission
342     SELECT #{anyoneGroup} as name, ptg.permission_reference as permission, ptg.template_uuid as templateUuid
343     FROM perm_templates_groups ptg
344     <where>
345       AND ptg.group_uuid IS NULL
346     </where>
347     ) groups
348     <where>
349       AND groups.templateUuid in
350       <foreach collection="templateUuids" open="(" close=")" item="id" separator=",">
351         #{id}
352       </foreach>
353     </where>
354     GROUP BY groups.permission, groups.templateUuid
355   </select>
356
357   <select id="countGroupsWithPermission" resultType="int" parameterType="map">
358     select count(1)
359     from perm_templates_groups ptg
360     where ptg.template_uuid = #{templateUuid}
361     and ptg.permission_reference = #{permission}
362     and
363     <if test="groupUuid == null">
364       ptg.group_uuid is null
365     </if>
366     <if test="groupUuid != null">
367       ptg.group_uuid = #{groupUuid}
368     </if>
369   </select>
370
371   <select id="selectAllGroupPermissionTemplatesByGroupUuid" parameterType="string" resultType="PermissionTemplateGroup">
372     SELECT
373       ptg.uuid,
374       ptg.template_uuid as templateUuid,
375       ptg.permission_reference AS permission,
376       ptg.group_uuid AS groupUuid,
377       g.name AS groupName,
378       ptg.created_at as createdAt,
379       ptg.updated_at as updatedAt
380     FROM perm_templates_groups ptg
381     INNER JOIN groups g ON g.uuid=ptg.group_uuid
382     <where>
383       ptg.group_uuid=#{groupUuid,jdbcType=VARCHAR}
384     </where>
385   </select>
386 </mapper>