]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-20315 update PermissionTemplateDao queries
authorPierre <pierre.guillot@sonarsource.com>
Mon, 25 Sep 2023 15:18:01 +0000 (17:18 +0200)
committersonartech <sonartech@sonarsource.com>
Thu, 28 Sep 2023 20:03:12 +0000 (20:03 +0000)
server/sonar-db-dao/src/main/java/org/sonar/db/permission/PermissionQuery.java
server/sonar-db-dao/src/main/java/org/sonar/db/permission/template/PermissionTemplateDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/permission/template/PermissionTemplateMapper.java
server/sonar-db-dao/src/main/resources/org/sonar/db/permission/template/PermissionTemplateMapper.xml

index af8780c1a4c06eea3c438aca98900e0eae1f75af..c12ea9fdb0448f048ebaf4ef8aec4d1490f5bfe7 100644 (file)
@@ -58,6 +58,7 @@ public class PermissionQuery {
   private final boolean withAtLeastOnePermission;
 
   private final int pageSize;
+  private final int pageIndex;
   private final int pageOffset;
 
   private PermissionQuery(Builder builder) {
@@ -68,6 +69,7 @@ public class PermissionQuery {
     this.searchQueryToSql = builder.searchQuery == null ? null : buildLikeValue(builder.searchQuery, WildcardPosition.BEFORE_AND_AFTER);
     this.searchQueryToSqlLowercase = searchQueryToSql == null ? null : searchQueryToSql.toLowerCase(Locale.ENGLISH);
     this.pageSize = builder.pageSize;
+    this.pageIndex = builder.pageIndex;
     this.pageOffset = offset(builder.pageIndex, builder.pageSize);
   }
 
@@ -104,6 +106,10 @@ public class PermissionQuery {
     return pageSize;
   }
 
+  public int getPageIndex() {
+    return pageIndex;
+  }
+
   public int getPageOffset() {
     return pageOffset;
   }
index 3e63318ea059649a2873545207a388ff614f650c..e0731b895e8b56a80a7febe963f687731e658b9d 100644 (file)
@@ -28,11 +28,11 @@ import java.util.Map;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
 import org.apache.ibatis.session.ResultHandler;
-import org.apache.ibatis.session.RowBounds;
 import org.sonar.api.utils.System2;
 import org.sonar.core.util.UuidFactory;
 import org.sonar.db.Dao;
 import org.sonar.db.DbSession;
+import org.sonar.db.Pagination;
 import org.sonar.db.audit.AuditPersister;
 import org.sonar.db.audit.model.PermissionTemplateNewValue;
 import org.sonar.db.permission.CountPerEntityPermission;
@@ -61,7 +61,7 @@ public class PermissionTemplateDao implements Dao {
    * @return a paginated list of user logins.
    */
   public List<String> selectUserLoginsByQueryAndTemplate(DbSession session, PermissionQuery query, String templateUuid) {
-    return mapper(session).selectUserLoginsByQueryAndTemplate(query, templateUuid, new RowBounds(query.getPageOffset(), query.getPageSize()));
+    return mapper(session).selectUserLoginsByQueryAndTemplate(query, templateUuid, Pagination.forPage(query.getPageIndex()).andSize(query.getPageSize()));
   }
 
   public int countUserLoginsByQueryAndTemplate(DbSession session, PermissionQuery query, String templateUuid) {
@@ -77,7 +77,7 @@ public class PermissionTemplateDao implements Dao {
   }
 
   public List<String> selectGroupNamesByQueryAndTemplate(DbSession session, PermissionQuery query, String templateUuid) {
-    return mapper(session).selectGroupNamesByQueryAndTemplate(templateUuid, query, new RowBounds(query.getPageOffset(), query.getPageSize()));
+    return mapper(session).selectGroupNamesByQueryAndTemplate(templateUuid, query, Pagination.forPage(query.getPageIndex()).andSize(query.getPageSize()));
   }
 
   public int countGroupNamesByQueryAndTemplate(DbSession session, PermissionQuery query, String templateUuid) {
index 35465a64fb62242d64a99495f2bea0dff5fd4c97..420d14eda8eeee7e55cf80782262b44628f5981f 100644 (file)
@@ -24,7 +24,7 @@ import java.util.Map;
 import javax.annotation.Nullable;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.session.ResultHandler;
-import org.apache.ibatis.session.RowBounds;
+import org.sonar.db.Pagination;
 import org.sonar.db.permission.PermissionQuery;
 
 /**
@@ -62,11 +62,11 @@ public interface PermissionTemplateMapper {
 
   PermissionTemplateDto selectByName(@Param("name") String name);
 
-  List<String> selectUserLoginsByQueryAndTemplate(@Param("query") PermissionQuery query, @Param("templateUuid") String templateUuid, RowBounds rowBounds);
+  List<String> selectUserLoginsByQueryAndTemplate(@Param("query") PermissionQuery query, @Param("templateUuid") String templateUuid, @Param("pagination") Pagination pagination);
 
   int countUserLoginsByQueryAndTemplate(@Param("query") PermissionQuery query, @Param("templateUuid") String templateUuid);
 
-  List<String> selectGroupNamesByQueryAndTemplate(@Param("templateUuid") String templateUuid, @Param("query") PermissionQuery query, RowBounds rowBounds);
+  List<String> selectGroupNamesByQueryAndTemplate(@Param("templateUuid") String templateUuid, @Param("query") PermissionQuery query, @Param("pagination") Pagination pagination);
 
   int countGroupNamesByQueryAndTemplate(@Param("query") PermissionQuery query, @Param("templateUuid") String templateUuid);
 
index 0ced621cbd782ca9be95177ba612b89958d97687..73520e48809d0be86d8690a1df78ad1380a2c8e8 100644 (file)
     where group_uuid = #{groupUuid,jdbcType=VARCHAR}
   </delete>
 
-  <select id="selectUserLoginsByQueryAndTemplate" parameterType="map" resultType="string">
+  <select id="selectUserLoginsByQueryAndTemplate" resultType="string">
     select u.login as login
       <include refid="userLoginsByQueryAndTemplate"/>
     group by u.login, u.name
     order by case when (count(ptu.permission_reference) > 0) then 1 else 2 end asc, u.name
+    <include refid="pagination"/>
   </select>
 
   <select id="countUserLoginsByQueryAndTemplate" parameterType="map" resultType="int">
     </where>
   </sql>
 
-  <select id="selectGroupNamesByQueryAndTemplate" parameterType="map" resultType="string">
+  <select id="selectGroupNamesByQueryAndTemplate" resultType="string">
     select groups.name, lower(groups.name), groups.group_uuid
     <include refid="groupNamesByQueryAndTemplate"/>
     group by groups.name, lower(groups.name), groups.group_uuid
     order by case when (count(groups.permission) > 0) then 1 else 2 end asc, lower(groups.name), groups.name, groups.group_uuid
+    <include refid="pagination"/>
   </select>
 
   <select id="countGroupNamesByQueryAndTemplate" parameterType="map" resultType="int">
       <include refid="groupNamesByQueryAndTemplate"/>) g
   </select>
 
+  <sql id="pagination">
+    offset (#{pagination.startRowNumber,jdbcType=INTEGER}-1) rows fetch next #{pagination.pageSize,jdbcType=INTEGER} rows only
+  </sql>
+
   <sql id="groupNamesByQueryAndTemplate">
     FROM
     (SELECT