123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd">
-
- <mapper namespace="org.sonar.db.user.GroupMembershipMapper">
-
- <sql id="commonClauses">
- FROM groups g
- LEFT JOIN groups_users gu ON gu.group_id=g.id AND gu.user_id=#{userId}
- <where>
- AND g.organization_uuid=#{organizationUuid}
- <choose>
- <when test="query.membership() == 'IN'">
- AND gu.user_id IS NOT NULL
- </when>
- <when test="query.membership() == 'OUT'">
- AND gu.user_id IS NULL
- </when>
- </choose>
- <if test="query.groupSearch() != null">
- AND (UPPER(g.name) LIKE #{query.groupSearchSql} ESCAPE '/')
- </if>
- </where>
- </sql>
-
- <select id="selectGroups" parameterType="map" resultType="GroupMembership">
- SELECT g.id as id, g.name as name, g.description as description, gu.user_id as userId
- <include refid="commonClauses"/>
- ORDER BY g.name
- </select>
-
- <select id="countGroups" parameterType="map" resultType="int">
- SELECT COUNT(g.id)
- <include refid="commonClauses"/>
- </select>
-
- <select id="countUsersByGroup" parameterType="int" resultType="org.sonar.db.user.GroupUserCount">
- SELECT g.name as groupName, count(gu.user_id) as userCount
- FROM groups g
- LEFT JOIN groups_users gu ON gu.group_id=g.id
- <where>
- g.id in
- <foreach collection="groupIds" open="(" close=")" item="id" separator=",">
- #{id}
- </foreach>
- </where>
- GROUP BY g.name
- </select>
-
- <select id="selectGroupsByLogins" parameterType="string" resultType="org.sonar.db.user.LoginGroup">
- SELECT u.login as login, g.name as groupName
- FROM users u
- LEFT JOIN groups_users gu ON gu.user_id=u.id
- INNER JOIN groups g ON gu.group_id=g.id
- <where>
- u.login in
- <foreach collection="logins" open="(" close=")" item="login" separator=",">
- #{login}
- </foreach>
- </where>
- ORDER BY u.login, g.name, g.created_at
- </select>
-
- <select id="selectGroupsByLoginsAndOrganization" parameterType="map" resultType="org.sonar.db.user.LoginGroup">
- SELECT u.login as login, g.name as groupName
- FROM users u
- LEFT JOIN groups_users gu ON gu.user_id=u.id
- INNER JOIN groups g ON gu.group_id=g.id
- <where>
- u.login in
- <foreach collection="logins" open="(" close=")" item="login" separator=",">
- #{login}
- </foreach>
- and g.organization_uuid=#{organizationUuid,jdbcType=VARCHAR}
- </where>
- ORDER BY u.login, g.name, g.created_at
- </select>
-
- <sql id="userCommonClauses">
- FROM users u
- LEFT JOIN groups_users gu ON gu.user_id=u.id AND gu.group_id=#{groupId}
- INNER JOIN organization_members om ON u.id=om.user_id AND om.organization_uuid=#{organizationUuid}
- <where>
- <choose>
- <when test="query.membership() == 'IN'">
- AND gu.group_id IS NOT NULL
- </when>
- <when test="query.membership() == 'OUT'">
- AND gu.group_id IS NULL
- </when>
- </choose>
- <if test="query.memberSearch() != null">
- AND (
- lower(u.name) like #{query.memberSearchSqlLowercase} ESCAPE '/'
- or u.login like #{query.memberSearchSql} ESCAPE '/'
- or u.email like #{query.memberSearchSql} ESCAPE '/' )
- </if>
- AND u.active=${_true}
- </where>
- </sql>
-
- <select id="selectMembers" parameterType="map" resultType="org.sonar.db.user.UserMembershipDto">
- SELECT u.id as id, u.login as login, u.name as name, gu.group_id as groupId
- <include refid="userCommonClauses"/>
- ORDER BY u.name ASC
- </select>
-
- <select id="countMembers" parameterType="map" resultType="int">
- SELECT COUNT(u.id)
- <include refid="userCommonClauses"/>
- </select>
-
- <select id="selectGroupIdsByUserId" parameterType="map" resultType="int">
- select group_id
- from groups_users
- where user_id = #{userId}
- </select>
- </mapper>
|