You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

GroupMembershipMapper.xml 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd">
  3. <mapper namespace="org.sonar.db.user.GroupMembershipMapper">
  4. <sql id="commonClauses">
  5. FROM groups g
  6. LEFT JOIN groups_users gu ON gu.group_id=g.id AND gu.user_id=#{userId}
  7. <where>
  8. AND g.organization_uuid=#{organizationUuid}
  9. <choose>
  10. <when test="query.membership() == 'IN'">
  11. AND gu.user_id IS NOT NULL
  12. </when>
  13. <when test="query.membership() == 'OUT'">
  14. AND gu.user_id IS NULL
  15. </when>
  16. </choose>
  17. <if test="query.groupSearch() != null">
  18. AND (UPPER(g.name) LIKE #{query.groupSearchSql} ESCAPE '/')
  19. </if>
  20. </where>
  21. </sql>
  22. <select id="selectGroups" parameterType="map" resultType="GroupMembership">
  23. SELECT g.id as id, g.name as name, g.description as description, gu.user_id as userId
  24. <include refid="commonClauses"/>
  25. ORDER BY g.name
  26. </select>
  27. <select id="countGroups" parameterType="map" resultType="int">
  28. SELECT COUNT(g.id)
  29. <include refid="commonClauses"/>
  30. </select>
  31. <select id="countUsersByGroup" parameterType="int" resultType="org.sonar.db.user.GroupUserCount">
  32. SELECT g.name as groupName, count(gu.user_id) as userCount
  33. FROM groups g
  34. LEFT JOIN groups_users gu ON gu.group_id=g.id
  35. <where>
  36. g.id in
  37. <foreach collection="groupIds" open="(" close=")" item="id" separator=",">
  38. #{id}
  39. </foreach>
  40. </where>
  41. GROUP BY g.name
  42. </select>
  43. <select id="selectGroupsByLogins" parameterType="string" resultType="org.sonar.db.user.LoginGroup">
  44. SELECT u.login as login, g.name as groupName
  45. FROM users u
  46. LEFT JOIN groups_users gu ON gu.user_id=u.id
  47. INNER JOIN groups g ON gu.group_id=g.id
  48. <where>
  49. u.login in
  50. <foreach collection="logins" open="(" close=")" item="login" separator=",">
  51. #{login}
  52. </foreach>
  53. </where>
  54. ORDER BY u.login, g.name, g.created_at
  55. </select>
  56. <select id="selectGroupsByLoginsAndOrganization" parameterType="map" resultType="org.sonar.db.user.LoginGroup">
  57. SELECT u.login as login, g.name as groupName
  58. FROM users u
  59. LEFT JOIN groups_users gu ON gu.user_id=u.id
  60. INNER JOIN groups g ON gu.group_id=g.id
  61. <where>
  62. u.login in
  63. <foreach collection="logins" open="(" close=")" item="login" separator=",">
  64. #{login}
  65. </foreach>
  66. and g.organization_uuid=#{organizationUuid,jdbcType=VARCHAR}
  67. </where>
  68. ORDER BY u.login, g.name, g.created_at
  69. </select>
  70. <sql id="userCommonClauses">
  71. FROM users u
  72. LEFT JOIN groups_users gu ON gu.user_id=u.id AND gu.group_id=#{groupId}
  73. INNER JOIN organization_members om ON u.id=om.user_id AND om.organization_uuid=#{organizationUuid}
  74. <where>
  75. <choose>
  76. <when test="query.membership() == 'IN'">
  77. AND gu.group_id IS NOT NULL
  78. </when>
  79. <when test="query.membership() == 'OUT'">
  80. AND gu.group_id IS NULL
  81. </when>
  82. </choose>
  83. <if test="query.memberSearch() != null">
  84. AND (
  85. lower(u.name) like #{query.memberSearchSqlLowercase} ESCAPE '/'
  86. or u.login like #{query.memberSearchSql} ESCAPE '/'
  87. or u.email like #{query.memberSearchSql} ESCAPE '/' )
  88. </if>
  89. AND u.active=${_true}
  90. </where>
  91. </sql>
  92. <select id="selectMembers" parameterType="map" resultType="org.sonar.db.user.UserMembershipDto">
  93. SELECT u.id as id, u.login as login, u.name as name, gu.group_id as groupId
  94. <include refid="userCommonClauses"/>
  95. ORDER BY u.name ASC
  96. </select>
  97. <select id="countMembers" parameterType="map" resultType="int">
  98. SELECT COUNT(u.id)
  99. <include refid="userCommonClauses"/>
  100. </select>
  101. <select id="selectGroupIdsByUserId" parameterType="map" resultType="int">
  102. select group_id
  103. from groups_users
  104. where user_id = #{userId}
  105. </select>
  106. </mapper>