-
Bug Report
-
Resolution: Fixed
-
L3 - Default
-
7.14.0
-
None
Given a query like this:
List<HistoricTaskInstance> tasks = execution .getProcessEngineServices() .getHistoryService() .createHistoricTaskInstanceQuery() .tenantIdIn("Test_Tenant") .or() .taskHadCandidateGroup("GROUP_TEST") .taskHadCandidateUser("USER_TEST") .endOr() .orderByHistoricTaskInstanceEndTime() .desc() .list();
the resulting SQL is
SELECT DISTINCT RES.* FROM act_hi_taskinst RES WHERE ( 1 = 1 AND RES.tenant_id_ IN ( ? ) ) AND ( 1 = 1 AND RES.id_ IN (SELECT task_id_ FROM act_hi_identitylink HIL WHERE HIL.type_ = 'candidate' AND HIL.user_id_ = ? AND HIL.type_ = 'candidate' AND HIL.group_id_ = ?) ) AND ( RES.tenant_id_ IS NULL ) ORDER BY RES.end_time_ DESC LIMIT ? offset ?
Note that the query criteria inside the or query are concatenated with AND instead of OR.
Root Cause:
The AND is hardcoded into the SQL statement: https://github.com/camunda/camunda-bpm-platform/blob/master/engine/src/main/resources/org/camunda/bpm/engine/impl/mapping/entity/HistoricTaskInstance.xml#L321-L330
It should use the dynamic queryType like here: https://github.com/camunda/camunda-bpm-platform/blob/master/engine/src/main/resources/org/camunda/bpm/engine/impl/mapping/entity/Task.xml#L351
This is confirmed with 7.14.0 but should also affect older versions since the relevant code was introduced with CAM-4911 (7.5) and probably missed when introducing the or query support with CAM-9676 (7.12).