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.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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_uuid=g.uuid AND gu.user_uuid=#{userUuid}
  7. <where>
  8. <choose>
  9. <when test="query.membership() == 'IN'">
  10. AND gu.user_uuid IS NOT NULL
  11. </when>
  12. <when test="query.membership() == 'OUT'">
  13. AND gu.user_uuid IS NULL
  14. </when>
  15. </choose>
  16. <if test="query.groupSearch() != null">
  17. AND (UPPER(g.name) LIKE #{query.groupSearchSql} ESCAPE '/')
  18. </if>
  19. </where>
  20. </sql>
  21. <select id="selectGroups" parameterType="map" resultType="GroupMembership">
  22. SELECT g.uuid as uuid, g.name as name, g.description as description, gu.user_uuid as userUuid
  23. <include refid="commonClauses"/>
  24. ORDER BY g.name
  25. </select>
  26. <select id="countGroups" parameterType="map" resultType="int">
  27. SELECT COUNT(g.uuid)
  28. <include refid="commonClauses"/>
  29. </select>
  30. <select id="countUsersByGroup" parameterType="int" resultType="org.sonar.db.user.GroupUserCount">
  31. SELECT g.name as groupName, count(gu.user_uuid) as userCount
  32. FROM groups g
  33. LEFT JOIN groups_users gu ON gu.group_uuid=g.uuid
  34. <where>
  35. g.uuid in
  36. <foreach collection="groupUuids" open="(" close=")" item="uuid" separator=",">
  37. #{uuid}
  38. </foreach>
  39. </where>
  40. GROUP BY g.name
  41. </select>
  42. <select id="selectGroupsByLogins" parameterType="string" resultType="org.sonar.db.user.LoginGroup">
  43. SELECT u.login as login, g.name as groupName
  44. FROM users u
  45. LEFT JOIN groups_users gu ON gu.user_uuid=u.uuid
  46. INNER JOIN groups g ON gu.group_uuid=g.uuid
  47. <where>
  48. u.login in
  49. <foreach collection="logins" open="(" close=")" item="login" separator=",">
  50. #{login}
  51. </foreach>
  52. </where>
  53. ORDER BY u.login, g.name, g.created_at
  54. </select>
  55. <select id="countGroupsByLogins" parameterType="string" resultType="org.sonar.db.user.LoginGroupCount">
  56. SELECT u.login as login, count(gu.group_uuid) as groupCount
  57. FROM users u
  58. LEFT JOIN groups_users gu ON gu.user_uuid=u.uuid
  59. <where>
  60. u.login in
  61. <foreach collection="logins" open="(" close=")" item="login" separator=",">
  62. #{login}
  63. </foreach>
  64. </where>
  65. group by g.uuid
  66. </select>
  67. <sql id="userCommonClauses">
  68. FROM users u
  69. LEFT JOIN groups_users gu ON gu.user_uuid=u.uuid AND gu.group_uuid=#{groupUuid}
  70. <where>
  71. <choose>
  72. <when test="query.membership() == 'IN'">
  73. AND gu.group_uuid IS NOT NULL
  74. </when>
  75. <when test="query.membership() == 'OUT'">
  76. AND gu.group_uuid IS NULL
  77. </when>
  78. </choose>
  79. <if test="query.memberSearch() != null">
  80. AND (
  81. lower(u.name) like #{query.memberSearchSqlLowercase} ESCAPE '/'
  82. or u.login like #{query.memberSearchSql} ESCAPE '/'
  83. or u.email like #{query.memberSearchSql} ESCAPE '/' )
  84. </if>
  85. AND u.active=${_true}
  86. </where>
  87. </sql>
  88. <select id="selectMembers" parameterType="map" resultType="org.sonar.db.user.UserMembershipDto">
  89. SELECT u.uuid as uuid, u.login as login, u.name as name, gu.group_uuid as groupUuid
  90. <include refid="userCommonClauses"/>
  91. ORDER BY u.name ASC
  92. </select>
  93. <select id="countMembers" parameterType="map" resultType="int">
  94. SELECT COUNT(u.uuid)
  95. <include refid="userCommonClauses"/>
  96. </select>
  97. <select id="selectGroupUuidsByUserUuid" parameterType="map" resultType="string">
  98. select group_uuid
  99. from groups_users
  100. where user_uuid = #{userUuid}
  101. </select>
  102. </mapper>