aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-db/src/main/resources/org/sonar/db/user
diff options
context:
space:
mode:
Diffstat (limited to 'sonar-db/src/main/resources/org/sonar/db/user')
-rw-r--r--sonar-db/src/main/resources/org/sonar/db/user/AuthorMapper.xml33
-rw-r--r--sonar-db/src/main/resources/org/sonar/db/user/AuthorizationMapper.xml210
-rw-r--r--sonar-db/src/main/resources/org/sonar/db/user/GroupMapper.xml77
-rw-r--r--sonar-db/src/main/resources/org/sonar/db/user/GroupMembershipMapper.xml92
-rw-r--r--sonar-db/src/main/resources/org/sonar/db/user/RoleMapper.xml118
-rw-r--r--sonar-db/src/main/resources/org/sonar/db/user/UserGroupMapper.xml26
-rw-r--r--sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml141
7 files changed, 697 insertions, 0 deletions
diff --git a/sonar-db/src/main/resources/org/sonar/db/user/AuthorMapper.xml b/sonar-db/src/main/resources/org/sonar/db/user/AuthorMapper.xml
new file mode 100644
index 00000000000..440d2d74701
--- /dev/null
+++ b/sonar-db/src/main/resources/org/sonar/db/user/AuthorMapper.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="org.sonar.db.user.AuthorMapper">
+
+ <select id="selectByLogin" parameterType="string" resultType="Author">
+ SELECT id, person_id AS personId, login, created_at AS createdAt, updated_at AS updatedAt
+ FROM authors WHERE login=#{id}
+ </select>
+
+ <select id="countDeveloperLogins" parameterType="long" resultType="int">
+ SELECT count(id)
+ FROM authors WHERE person_id=#{id}
+ </select>
+
+ <insert id="insert" parameterType="Author" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
+ INSERT INTO authors (person_id, login, created_at, updated_at)
+ VALUES (#{personId}, #{login},
+ #{createdAt}, #{updatedAt})
+ </insert>
+
+ <select id="selectScmAccountsByDeveloperUuids" parameterType="String" resultType="String">
+ SELECT a.login
+ FROM authors a
+ INNER JOIN projects p ON p.id=a.person_id
+ <where>
+ and p.uuid in
+ <foreach collection="uuids" open="(" close=")" item="uuid" separator=",">
+ #{uuid}
+ </foreach>
+ </where>
+ </select>
+</mapper>
diff --git a/sonar-db/src/main/resources/org/sonar/db/user/AuthorizationMapper.xml b/sonar-db/src/main/resources/org/sonar/db/user/AuthorizationMapper.xml
new file mode 100644
index 00000000000..f33a7ae0640
--- /dev/null
+++ b/sonar-db/src/main/resources/org/sonar/db/user/AuthorizationMapper.xml
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="org.sonar.db.user.AuthorizationMapper">
+
+ <select id="keepAuthorizedComponentKeysForUser" parameterType="map" resultType="string">
+ SELECT p.kee
+ FROM group_roles gr, projects p
+ WHERE
+ gr.role=#{role}
+ and (gr.group_id is null or gr.group_id in (select gu.group_id from groups_users gu where gu.user_id=#{userId}))
+ and (gr.resource_id = p.root_id or gr.resource_id = p.id) and
+ <foreach collection="componentKeys" open="(" close=")" item="element" index="index" separator=" or ">
+ p.kee=#{element}
+ </foreach>
+ UNION
+ SELECT p.kee
+ FROM user_roles ur
+ INNER JOIN projects p on p.id = ur.resource_id
+ WHERE
+ ur.role=#{role}
+ and ur.user_id=#{userId} and
+ <foreach collection="componentKeys" open="(" close=")" item="element" index="index" separator=" or ">
+ p.kee=#{element}
+ </foreach>
+ </select>
+
+ <select id="keepAuthorizedComponentKeysForAnonymous" parameterType="map" resultType="string">
+ SELECT p.kee
+ FROM group_roles gr, projects p
+ WHERE
+ gr.role=#{role}
+ and gr.group_id is null
+ and (gr.resource_id = p.root_id or gr.resource_id = p.id) and
+ <foreach collection="componentKeys" open="(" close=")" item="element" index="index" separator=" or ">
+ p.kee=#{element}
+ </foreach>
+ </select>
+
+ <select id="keepAuthorizedProjectIdsForUser" parameterType="map" resultType="long">
+ SELECT gr.resource_id
+ FROM group_roles gr
+ WHERE
+ gr.role=#{role}
+ and (gr.group_id is null or gr.group_id in (select gu.group_id from groups_users gu where gu.user_id=#{userId}))
+ and
+ <foreach collection="componentIds" open="(" close=")" item="element" index="index" separator=" or ">
+ gr.resource_id=#{element}
+ </foreach>
+ UNION
+ SELECT p.id
+ FROM user_roles ur
+ INNER JOIN projects p on p.id = ur.resource_id
+ WHERE
+ ur.role=#{role}
+ and ur.user_id=#{userId} and
+ <foreach collection="componentIds" open="(" close=")" item="element" index="index" separator=" or ">
+ p.id=#{element}
+ </foreach>
+ </select>
+
+ <select id="keepAuthorizedProjectIdsForAnonymous" parameterType="map" resultType="long">
+ SELECT gr.resource_id
+ FROM group_roles gr
+ WHERE
+ gr.role=#{role}
+ and gr.group_id is null
+ and
+ <foreach collection="componentIds" open="(" close=")" item="element" index="index" separator=" or ">
+ gr.resource_id=#{element}
+ </foreach>
+ </select>
+
+ <select id="selectAuthorizedRootProjectsKeys" parameterType="map" resultType="string">
+ <include refid="selectAuthorizedRootProjectsKeysQuery"/>
+ </select>
+
+ <sql id="selectAuthorizedRootProjectsKeysQuery">
+ <choose>
+ <when test="userId != null">
+ SELECT p.kee as root_project_kee
+ FROM group_roles gr
+ INNER JOIN projects p on p.id = gr.resource_id AND p.module_uuid IS NULL
+ <where>
+ and gr.role=#{role}
+ and (gr.group_id is null or gr.group_id in (select gu.group_id from groups_users gu where
+ gu.user_id=#{userId}))
+ </where>
+ UNION
+ SELECT p.kee as root_project_kee
+ FROM user_roles ur
+ INNER JOIN projects p on p.id = ur.resource_id AND p.module_uuid IS NULL
+ <where>
+ and ur.role=#{role}
+ and ur.user_id = #{userId}
+ </where>
+ </when>
+ <otherwise>
+ SELECT p.kee as root_project_kee
+ FROM group_roles gr
+ INNER JOIN projects p on p.id = gr.resource_id AND p.module_uuid IS NULL
+ <where>
+ and gr.role=#{role}
+ and gr.group_id is null
+ </where>
+ </otherwise>
+ </choose>
+ </sql>
+
+ <select id="selectAuthorizedRootProjectsUuids" parameterType="map" resultType="string">
+ <choose>
+ <when test="userId != null">
+ SELECT p.uuid as root_project_uuid
+ FROM group_roles gr
+ INNER JOIN projects p on p.id = gr.resource_id AND p.module_uuid IS NULL
+ <where>
+ and gr.role=#{role}
+ and (gr.group_id is null or gr.group_id in (select gu.group_id from groups_users gu where
+ gu.user_id=#{userId}))
+ </where>
+ UNION
+ SELECT p.uuid as root_project_uuid
+ FROM user_roles ur
+ INNER JOIN projects p on p.id = ur.resource_id AND p.module_uuid IS NULL
+ <where>
+ and ur.role=#{role}
+ and ur.user_id = #{userId}
+ </where>
+ </when>
+ <otherwise>
+ SELECT p.uuid as root_project_uuid
+ FROM group_roles gr
+ INNER JOIN projects p on p.id = gr.resource_id AND p.module_uuid IS NULL
+ <where>
+ and gr.role=#{role}
+ and gr.group_id is null
+ </where>
+ </otherwise>
+ </choose>
+ </select>
+
+ <!-- same as selectAuthorizedRootProjectsKeysQuery but returns ids instead of keys -->
+ <sql id="selectAuthorizedRootProjectIdsQuery">
+ <choose>
+ <when test="userId != null">
+ SELECT p.id as root_project_id
+ FROM group_roles gr
+ INNER JOIN projects p on p.id = gr.resource_id AND p.module_uuid IS NULL
+ <where>
+ and gr.role=#{role}
+ and (gr.group_id is null or gr.group_id in (select gu.group_id from groups_users gu where
+ gu.user_id=#{userId}))
+ </where>
+ UNION
+ SELECT p.id as root_project_id
+ FROM user_roles ur
+ INNER JOIN projects p on p.id = ur.resource_id AND p.module_uuid IS NULL
+ <where>
+ and ur.role=#{role}
+ and ur.user_id = #{userId}
+ </where>
+ </when>
+ <otherwise>
+ SELECT p.id as root_project_id
+ FROM group_roles gr
+ INNER JOIN projects p on p.id = gr.resource_id AND p.module_uuid IS NULL
+ <where>
+ and gr.role=#{role}
+ and gr.group_id is null
+ </where>
+ </otherwise>
+ </choose>
+ </sql>
+
+ <select id="selectGlobalPermissions" parameterType="map" resultType="String">
+ <choose>
+ <when test="userLogin != null">
+ SELECT gr.role
+ FROM group_roles gr
+ INNER JOIN groups_users gu on gu.group_id=gr.group_id
+ INNER JOIN users u on u.id=gu.user_id
+ <where>
+ and u.login=#{userLogin}
+ and gr.resource_id is null
+ </where>
+ UNION
+ SELECT gr.role
+ FROM group_roles gr
+ WHERE gr.group_id IS NULL AND gr.resource_id IS NULL
+ UNION
+ SELECT ur.role
+ FROM user_roles ur
+ INNER JOIN users u on u.id=ur.user_id
+ <where>
+ and u.login=#{userLogin}
+ and ur.resource_id is null
+ </where>
+ </when>
+ <otherwise>
+ SELECT gr.role
+ FROM group_roles gr
+ <where>
+ and gr.resource_id is null
+ and gr.group_id is null
+ </where>
+ </otherwise>
+ </choose>
+ </select>
+
+</mapper>
diff --git a/sonar-db/src/main/resources/org/sonar/db/user/GroupMapper.xml b/sonar-db/src/main/resources/org/sonar/db/user/GroupMapper.xml
new file mode 100644
index 00000000000..0991bcffc0b
--- /dev/null
+++ b/sonar-db/src/main/resources/org/sonar/db/user/GroupMapper.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="org.sonar.db.user.GroupMapper">
+
+ <sql id="groupColumns">
+ g.id as id,
+ g.name as name,
+ g.description as description,
+ g.created_at as "createdAt",
+ g.updated_at as "updatedAt"
+ </sql>
+
+ <select id="selectByKey" parameterType="string" resultType="Group">
+ SELECT
+ <include refid="groupColumns"/>
+ FROM groups g
+ <where>
+ g.name=#{id}
+ </where>
+ </select>
+
+ <select id="selectById" parameterType="long" resultType="Group">
+ SELECT
+ <include refid="groupColumns"/>
+ FROM groups g
+ <where>
+ g.id=#{id}
+ </where>
+ </select>
+
+ <delete id="deleteById" parameterType="long">
+ DELETE FROM groups
+ <where>
+ id=#{id}
+ </where>
+ </delete>
+
+ <select id="selectByUserLogin" parameterType="string" resultType="Group">
+ SELECT
+ <include refid="groupColumns"/>
+ FROM groups g
+ INNER JOIN groups_users gu on gu.group_id=g.id
+ INNER JOIN users u on u.id=gu.user_id
+ <where>
+ u.login=#{login}
+ </where>
+ </select>
+
+ <insert id="insert" parameterType="Group" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
+ INSERT INTO groups (name, description, created_at, updated_at)
+ VALUES (#{name}, #{description}, #{createdAt}, #{updatedAt})
+ </insert>
+
+ <update id="update" parameterType="Group">
+ UPDATE groups SET
+ name=#{name},
+ description=#{description},
+ updated_at=#{updatedAt}
+ WHERE id=#{id}
+ </update>
+
+ <select id="selectByQuery" parameterType="map" resultType="Group">
+ SELECT
+ <include refid="groupColumns"/>
+ FROM groups g
+ WHERE UPPER(g.name) LIKE #{query}
+ ORDER BY UPPER(g.name)
+ </select>
+
+ <select id="countByQuery" parameterType="map" resultType="int">
+ SELECT count(g.id)
+ FROM groups g
+ WHERE UPPER(g.name) LIKE #{query}
+ </select>
+</mapper>
diff --git a/sonar-db/src/main/resources/org/sonar/db/user/GroupMembershipMapper.xml b/sonar-db/src/main/resources/org/sonar/db/user/GroupMembershipMapper.xml
new file mode 100644
index 00000000000..36591ceea05
--- /dev/null
+++ b/sonar-db/src/main/resources/org/sonar/db/user/GroupMembershipMapper.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/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>
+ <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="long" 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>
+ </select>
+
+ <sql id="userCommonClauses">
+ FROM users u
+ LEFT JOIN groups_users gu ON gu.user_id=u.id AND gu.group_id=#{groupId}
+ <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 ((UPPER(u.login) LIKE #{query.memberSearchSql} ESCAPE '/') OR (UPPER(u.name) 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>
+
+</mapper>
diff --git a/sonar-db/src/main/resources/org/sonar/db/user/RoleMapper.xml b/sonar-db/src/main/resources/org/sonar/db/user/RoleMapper.xml
new file mode 100644
index 00000000000..41303206013
--- /dev/null
+++ b/sonar-db/src/main/resources/org/sonar/db/user/RoleMapper.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="org.sonar.db.user.RoleMapper">
+
+ <select id="selectUserPermissions" parameterType="map" resultType="String">
+ SELECT ur.role
+ FROM user_roles ur
+ INNER JOIN users u ON u.id=ur.user_id AND u.active=${_true}
+ <where>
+ AND u.login = #{userLogin}
+ <choose>
+ <when test="resourceId != null">
+ AND resource_id=#{resourceId}
+ </when>
+ <otherwise>
+ AND resource_id IS NULL
+ </otherwise>
+ </choose>
+ </where>
+ </select>
+
+ <select id="selectGroupPermissions" parameterType="map" resultType="String">
+ SELECT gr.role
+ FROM group_roles gr
+ <if test="isAnyOneGroup != true">
+ INNER JOIN groups g ON g.id = gr.group_id
+ </if>
+ <where>
+ <choose>
+ <when test="isAnyOneGroup != true">
+ AND g.name = #{groupName}
+ </when>
+ <otherwise>
+ AND gr.group_id IS NULL
+ </otherwise>
+ </choose>
+ <choose>
+ <when test="resourceId != null">
+ AND resource_id=#{resourceId}
+ </when>
+ <otherwise>
+ AND resource_id IS NULL
+ </otherwise>
+ </choose>
+ </where>
+ </select>
+
+ <insert id="insertGroupRole" parameterType="GroupRole" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
+ INSERT INTO group_roles (group_id, resource_id, role)
+ VALUES (#{groupId}, #{resourceId}, #{role})
+ </insert>
+
+ <insert id="insertUserRole" parameterType="UserRole" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
+ INSERT INTO user_roles (user_id, resource_id, role)
+ VALUES (#{userId}, #{resourceId}, #{role})
+ </insert>
+
+ <delete id="deleteGroupRole" parameterType="map">
+ DELETE FROM group_roles
+ WHERE role=#{role}
+ AND
+ <choose>
+ <when test="resourceId != null">
+ resource_id=#{resourceId}
+ </when>
+ <otherwise>
+ resource_id IS NULL
+ </otherwise>
+ </choose>
+ AND
+ <choose>
+ <when test="groupId != null">
+ group_id=#{groupId}
+ </when>
+ <otherwise>
+ group_id IS NULL
+ </otherwise>
+ </choose>
+ </delete>
+
+ <delete id="deleteUserRole" parameterType="map">
+ DELETE FROM user_roles
+ WHERE user_id=#{userId}
+ AND role=#{role}
+ AND
+ <choose>
+ <when test="resourceId != null">
+ resource_id=#{resourceId}
+ </when>
+ <otherwise>
+ resource_id IS NULL
+ </otherwise>
+ </choose>
+ </delete>
+
+ <delete id="deleteGroupRolesByResourceId" parameterType="long">
+ delete from group_roles where resource_id=#{id}
+ </delete>
+
+ <delete id="deleteUserRolesByResourceId" parameterType="long">
+ delete from user_roles where resource_id=#{id}
+ </delete>
+
+ <select id="countResourceUserRoles" parameterType="long" resultType="int">
+ SELECT count(id)
+ FROM user_roles WHERE resource_id=#{id}
+ </select>
+
+ <select id="countResourceGroupRoles" parameterType="long" resultType="int">
+ SELECT count(id)
+ FROM group_roles WHERE resource_id=#{id}
+ </select>
+
+ <delete id="deleteGroupRolesByGroupId" parameterType="long">
+ delete from group_roles where group_id=#{id}
+ </delete>
+</mapper>
diff --git a/sonar-db/src/main/resources/org/sonar/db/user/UserGroupMapper.xml b/sonar-db/src/main/resources/org/sonar/db/user/UserGroupMapper.xml
new file mode 100644
index 00000000000..d2177b452c0
--- /dev/null
+++ b/sonar-db/src/main/resources/org/sonar/db/user/UserGroupMapper.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="org.sonar.db.user.UserGroupMapper">
+
+ <insert id="insert" parameterType="UserGroup" useGeneratedKeys="false">
+ INSERT INTO groups_users (user_id, group_id)
+ VALUES (#{userId}, #{groupId})
+ </insert>
+
+ <delete id="delete" parameterType="UserGroup">
+ DELETE FROM groups_users
+ <where>
+ AND user_id = #{userId}
+ AND group_id = #{groupId}
+ </where>
+ </delete>
+
+ <delete id="deleteMembersByGroup" parameterType="long">
+ DELETE FROM groups_users
+ <where>
+ AND group_id = #{groupId}
+ </where>
+ </delete>
+
+</mapper>
diff --git a/sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml b/sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml
new file mode 100644
index 00000000000..d46d44f2eaa
--- /dev/null
+++ b/sonar-db/src/main/resources/org/sonar/db/user/UserMapper.xml
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="org.sonar.db.user.UserMapper">
+
+ <sql id="userColumns">
+ u.id as id,
+ u.login as login,
+ u.name as name,
+ u.email as email,
+ u.active as "active",
+ u.scm_accounts as "scmAccounts",
+ u.salt as "salt",
+ u.crypted_password as "cryptedPassword",
+ u.created_at as "createdAt",
+ u.updated_at as "updatedAt"
+ </sql>
+
+ <select id="selectByLogin" parameterType="String" resultType="User">
+ SELECT
+ <include refid="userColumns"/>
+ FROM users u
+ WHERE u.login=#{login}
+ </select>
+
+ <select id="selectNullableByScmAccountOrLoginOrEmail" parameterType="map" resultType="User">
+ SELECT
+ <include refid="userColumns"/>
+ FROM users u
+ WHERE
+ u.login=#{scmAccount}
+ OR u.email=#{scmAccount}
+ OR u.scm_accounts like #{likeScmAccount}
+ </select>
+
+ <select id="selectUser" parameterType="long" resultType="User">
+ SELECT
+ <include refid="userColumns"/>
+ FROM users u
+ WHERE u.id=#{id}
+ </select>
+
+ <select id="selectUserByLogin" parameterType="string" resultType="User">
+ SELECT
+ <include refid="userColumns"/>
+ FROM users u
+ WHERE u.login=#{id} AND u.active=${_true}
+ </select>
+
+ <select id="selectUsersByLogins" parameterType="map" resultType="User">
+ SELECT
+ <include refid="userColumns"/>
+ FROM users u WHERE
+ (<foreach item="login" index="index" collection="logins" open="(" separator=" or " close=")">
+ u.login=#{login}
+ </foreach>)
+ </select>
+
+ <select id="selectUsers" parameterType="map" resultType="User">
+ SELECT
+ <include refid="userColumns"/>
+ FROM users u
+ <where>
+ <if test="logins != null and logins.size() > 0">
+ u.login IN
+ <foreach item="login" index="index" collection="logins" open="(" separator="," close=")">
+ #{login}
+ </foreach>
+ </if>
+ <if test="includeDeactivated==false">
+ AND u.active=${_true}
+ </if>
+ <if test="searchText != null">
+ AND (u.login LIKE #{searchTextSql} ESCAPE '/' OR u.name LIKE #{searchTextSql} ESCAPE '/')
+ </if>
+ </where>
+ ORDER BY u.name
+ </select>
+
+ <select id="selectGroupByName" parameterType="string" resultType="Group">
+ SELECT id, name, description, created_at AS "createdAt", updated_at AS "updatedAt"
+ FROM groups WHERE name=#{id}
+ </select>
+
+ <delete id="removeUserFromGroups" parameterType="long">
+ DELETE FROM groups_users WHERE user_id=#{id}
+ </delete>
+
+ <delete id="deleteUserRoles" parameterType="long">
+ DELETE FROM user_roles WHERE user_id=#{id}
+ </delete>
+
+ <delete id="deleteUserProperties" parameterType="long">
+ DELETE FROM properties WHERE user_id=#{id}
+ </delete>
+
+ <delete id="deleteUnsharedUserDashboards" parameterType="long">
+ DELETE FROM dashboards WHERE user_id=#{id} and shared &lt;&gt; ${_true}
+ </delete>
+
+ <delete id="deleteUserActiveDashboards" parameterType="long">
+ DELETE FROM active_dashboards WHERE user_id=#{id}
+ </delete>
+
+ <delete id="deleteUnsharedUserMeasureFilters" parameterType="long">
+ DELETE FROM measure_filters WHERE user_id=#{id} and shared &lt;&gt; ${_true}
+ </delete>
+
+ <delete id="deleteUserMeasureFilterFavourites" parameterType="long">
+ DELETE FROM measure_filter_favourites WHERE user_id=#{id}
+ </delete>
+
+ <delete id="deleteUnsharedUserIssueFilters" parameterType="String">
+ DELETE FROM issue_filters WHERE user_login=#{id} and shared &lt;&gt; ${_true}
+ </delete>
+
+ <delete id="deleteUserIssueFilterFavourites" parameterType="String">
+ DELETE FROM issue_filter_favourites WHERE user_login=#{id}
+ </delete>
+
+ <update id="deactivateUser" parameterType="long">
+ UPDATE users SET active=${_false}, updated_at=#{now,jdbcType=BIGINT} WHERE id=#{id}
+ </update>
+
+ <insert id="insert" parameterType="User" keyColumn="id" useGeneratedKeys="true" keyProperty="id">
+ INSERT INTO users (login, name, email, active, scm_accounts, salt, crypted_password, created_at, updated_at)
+ VALUES (#{login,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{active,jdbcType=BOOLEAN},
+ #{scmAccounts,jdbcType=VARCHAR},
+ #{salt,jdbcType=VARCHAR}, #{cryptedPassword,jdbcType=VARCHAR}, #{createdAt,jdbcType=BIGINT},
+ #{updatedAt,jdbcType=BIGINT})
+ </insert>
+
+ <insert id="update" parameterType="User" useGeneratedKeys="false">
+ UPDATE users set name=#{name,jdbcType=VARCHAR}, email=#{email,jdbcType=VARCHAR}, active=#{active,jdbcType=BOOLEAN},
+ scm_accounts=#{scmAccounts,jdbcType=VARCHAR},
+ salt=#{salt,jdbcType=VARCHAR}, crypted_password=#{cryptedPassword,jdbcType=BIGINT},
+ updated_at=#{updatedAt,jdbcType=BIGINT}
+ WHERE login = #{login}
+ </insert>
+
+</mapper>