TSK-1618: fixed count of tasks for query with wildcard filter

This commit is contained in:
Mustapha Zorgati 2021-04-14 12:53:36 +02:00
parent 61d8ef65c8
commit 8a7b4f500d
2 changed files with 27 additions and 14 deletions

View File

@ -593,6 +593,7 @@ public interface TaskQueryMapper {
+ "<if test='attachmentReferenceIn != null'>AND a.REF_VALUE IN(<foreach item='item' collection='attachmentReferenceIn' separator=',' >#{item}</foreach>)</if> " + "<if test='attachmentReferenceIn != null'>AND a.REF_VALUE IN(<foreach item='item' collection='attachmentReferenceIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='attachmentReferenceLike != null'>AND (<foreach item='item' collection='attachmentReferenceLike' separator=' OR '>UPPER(a.REF_VALUE) LIKE #{item}</foreach>)</if> " + "<if test='attachmentReferenceLike != null'>AND (<foreach item='item' collection='attachmentReferenceLike' separator=' OR '>UPPER(a.REF_VALUE) LIKE #{item}</foreach>)</if> "
+ "<if test='attachmentReceivedIn !=null'> AND ( <foreach item='item' collection='attachmentReceivedIn' separator=' OR ' > ( <if test='item.begin!=null'> a.RECEIVED &gt;= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> a.RECEIVED &lt;=#{item.end} </if>)</foreach>)</if> " + "<if test='attachmentReceivedIn !=null'> AND ( <foreach item='item' collection='attachmentReceivedIn' separator=' OR ' > ( <if test='item.begin!=null'> a.RECEIVED &gt;= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> a.RECEIVED &lt;=#{item.end} </if>)</foreach>)</if> "
+ "<if test='wildcardSearchValueLike != null and wildcardSearchFieldIn != null'>AND (<foreach item='item' collection='wildcardSearchFieldIn' separator=' OR '>UPPER(t.${item}) LIKE #{wildcardSearchValueLike}</foreach>)</if> "
+ "</where>" + "</where>"
+ "</script>") + "</script>")
Long countQueryTasks(TaskQueryImpl taskQuery); Long countQueryTasks(TaskQueryImpl taskQuery);
@ -699,6 +700,7 @@ public interface TaskQueryMapper {
+ "<if test='attachmentReferenceIn != null'>AND a.REF_VALUE IN(<foreach item='item' collection='attachmentReferenceIn' separator=',' >#{item}</foreach>)</if> " + "<if test='attachmentReferenceIn != null'>AND a.REF_VALUE IN(<foreach item='item' collection='attachmentReferenceIn' separator=',' >#{item}</foreach>)</if> "
+ "<if test='attachmentReferenceLike != null'>AND (<foreach item='item' collection='attachmentReferenceLike' separator=' OR '>UPPER(a.REF_VALUE) LIKE #{item}</foreach>)</if> " + "<if test='attachmentReferenceLike != null'>AND (<foreach item='item' collection='attachmentReferenceLike' separator=' OR '>UPPER(a.REF_VALUE) LIKE #{item}</foreach>)</if> "
+ "<if test='attachmentReceivedIn !=null'> AND ( <foreach item='item' collection='attachmentReceivedIn' separator=' OR ' > ( <if test='item.begin!=null'> a.RECEIVED &gt;= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> a.RECEIVED &lt;=#{item.end} </if>)</foreach>)</if> " + "<if test='attachmentReceivedIn !=null'> AND ( <foreach item='item' collection='attachmentReceivedIn' separator=' OR ' > ( <if test='item.begin!=null'> a.RECEIVED &gt;= #{item.begin} </if> <if test='item.begin!=null and item.end!=null'> AND </if><if test='item.end!=null'> a.RECEIVED &lt;=#{item.end} </if>)</foreach>)</if> "
+ "<if test='wildcardSearchValueLike != null and wildcardSearchFieldIn != null'>AND (<foreach item='item' collection='wildcardSearchFieldIn' separator=' OR '>UPPER(t.${item}) LIKE #{wildcardSearchValueLike}</foreach>)</if> "
+ "</where> " + "</where> "
+ "), Y (ID, FLAG) AS " + "), Y (ID, FLAG) AS "
+ "(SELECT ID, (SELECT 1 FROM WORKBASKET_ACCESS_LIST s WHERE " + "(SELECT ID, (SELECT 1 FROM WORKBASKET_ACCESS_LIST s WHERE "

View File

@ -18,18 +18,17 @@ import pro.taskana.task.api.models.TaskSummary;
@ExtendWith(JaasExtension.class) @ExtendWith(JaasExtension.class)
class QueryTasksByWildcardSearchAccTest extends AbstractAccTest { class QueryTasksByWildcardSearchAccTest extends AbstractAccTest {
private static final TaskService TASK_SERVICE = taskanaEngine.getTaskService();
@WithAccessId(user = "admin") @WithAccessId(user = "admin")
@Test @Test
void should_ReturnAllTasksByWildcardSearch_For_ProvidedSearchValue() { void should_ReturnAllTasksByWildcardSearch_For_ProvidedSearchValue() {
TaskService taskService = taskanaEngine.getTaskService();
WildcardSearchField[] wildcards = { WildcardSearchField[] wildcards = {
WildcardSearchField.CUSTOM_3, WildcardSearchField.CUSTOM_4, WildcardSearchField.NAME WildcardSearchField.CUSTOM_3, WildcardSearchField.CUSTOM_4, WildcardSearchField.NAME
}; };
List<TaskSummary> foundTasks = List<TaskSummary> foundTasks =
taskService TASK_SERVICE
.createTaskQuery() .createTaskQuery()
.wildcardSearchFieldsIn(wildcards) .wildcardSearchFieldsIn(wildcards)
.wildcardSearchValueLike("%99%") .wildcardSearchValueLike("%99%")
@ -41,15 +40,31 @@ class QueryTasksByWildcardSearchAccTest extends AbstractAccTest {
@WithAccessId(user = "admin") @WithAccessId(user = "admin")
@Test @Test
void should_ReturnAllTasks_For_ProvidedSearchValueAndAdditionalParameters() { void should_CountAllTasksByWildcardSearch_For_ProvidedSearchValue() {
TaskService taskService = taskanaEngine.getTaskService(); WildcardSearchField[] wildcards = {
WildcardSearchField.CUSTOM_3, WildcardSearchField.CUSTOM_4, WildcardSearchField.NAME
};
long foundTasks =
TASK_SERVICE
.createTaskQuery()
.wildcardSearchFieldsIn(wildcards)
.wildcardSearchValueLike("%99%")
.orderByName(SortDirection.ASCENDING)
.count();
assertThat(foundTasks).isEqualTo(4);
}
@WithAccessId(user = "admin")
@Test
void should_ReturnAllTasks_For_ProvidedSearchValueAndAdditionalParameters() {
WildcardSearchField[] wildcards = { WildcardSearchField[] wildcards = {
WildcardSearchField.CUSTOM_3, WildcardSearchField.CUSTOM_4, WildcardSearchField.NAME WildcardSearchField.CUSTOM_3, WildcardSearchField.CUSTOM_4, WildcardSearchField.NAME
}; };
List<TaskSummary> foundTasks = List<TaskSummary> foundTasks =
taskService TASK_SERVICE
.createTaskQuery() .createTaskQuery()
.wildcardSearchFieldsIn(wildcards) .wildcardSearchFieldsIn(wildcards)
.wildcardSearchValueLike("%99%") .wildcardSearchValueLike("%99%")
@ -64,19 +79,17 @@ class QueryTasksByWildcardSearchAccTest extends AbstractAccTest {
@WithAccessId(user = "admin") @WithAccessId(user = "admin")
@Test @Test
void should_ReturnAllTasksCaseInsensitive_When_PerformingWildcardQuery() { void should_ReturnAllTasksCaseInsensitive_When_PerformingWildcardQuery() {
TaskService taskService = taskanaEngine.getTaskService();
WildcardSearchField[] wildcards = {WildcardSearchField.NAME}; WildcardSearchField[] wildcards = {WildcardSearchField.NAME};
List<TaskSummary> foundTasksCaseSensitive = List<TaskSummary> foundTasksCaseSensitive =
taskService TASK_SERVICE
.createTaskQuery() .createTaskQuery()
.wildcardSearchFieldsIn(wildcards) .wildcardSearchFieldsIn(wildcards)
.wildcardSearchValueLike("%Wid%") .wildcardSearchValueLike("%Wid%")
.list(); .list();
List<TaskSummary> foundTasksCaseInsensitive = List<TaskSummary> foundTasksCaseInsensitive =
taskService TASK_SERVICE
.createTaskQuery() .createTaskQuery()
.wildcardSearchFieldsIn(wildcards) .wildcardSearchFieldsIn(wildcards)
.wildcardSearchValueLike("%wid%") .wildcardSearchValueLike("%wid%")
@ -90,11 +103,9 @@ class QueryTasksByWildcardSearchAccTest extends AbstractAccTest {
@Test @Test
void should_ThrowException_When_NotUsingSearchFieldsAndValueParamsTogether() { void should_ThrowException_When_NotUsingSearchFieldsAndValueParamsTogether() {
TaskService taskService = taskanaEngine.getTaskService();
ThrowingCallable queryAttempt = ThrowingCallable queryAttempt =
() -> () ->
taskService TASK_SERVICE
.createTaskQuery() .createTaskQuery()
.wildcardSearchValueLike("%99%") .wildcardSearchValueLike("%99%")
.orderByName(SortDirection.ASCENDING) .orderByName(SortDirection.ASCENDING)
@ -104,7 +115,7 @@ class QueryTasksByWildcardSearchAccTest extends AbstractAccTest {
queryAttempt = queryAttempt =
() -> () ->
taskService TASK_SERVICE
.createTaskQuery() .createTaskQuery()
.wildcardSearchFieldsIn( .wildcardSearchFieldsIn(
WildcardSearchField.CUSTOM_1, WildcardSearchField.DESCRIPTION) WildcardSearchField.CUSTOM_1, WildcardSearchField.DESCRIPTION)