diff --git a/.idea/dictionaries/adrien.xml b/.idea/dictionaries/abricchi.xml similarity index 89% rename from .idea/dictionaries/adrien.xml rename to .idea/dictionaries/abricchi.xml index 16dd0ee89c636e5131b6c73cb7ce6ba13d9cd407..f822eae5c7590d7ec60ca8e27457c292243a6ddd 100644 --- a/.idea/dictionaries/adrien.xml +++ b/.idea/dictionaries/abricchi.xml @@ -1,12 +1,14 @@ <component name="ProjectDictionaryState"> - <dictionary name="adrien"> + <dictionary name="abricchi"> <words> <w>admin's</w> <w>affero</w> <w>apiv</w> + <w>backchannel</w> <w>baos</w> <w>bpmn</w> <w>canonicalized</w> + <w>compose's</w> <w>compta</w> <w>crontab</w> <w>exclusivegateway</w> @@ -14,6 +16,7 @@ <w>filedata</w> <w>flowable</w> <w>franzbecker</w> + <w>gemnasium</w> <w>identitylink</w> <w>idsite</w> <w>intelli</w> @@ -38,10 +41,12 @@ <w>projectlombok</w> <w>psql</w> <w>qrtz</w> + <w>resourceserver</w> <w>resteasy</w> <w>sameorigin</w> <w>scop</w> <w>securit</w> + <w>semgrep</w> <w>simpl</w> <w>sonarqube</w> <w>springfox</w> diff --git a/src/main/java/coop/libriciel/ipcore/services/database/PostgresService.java b/src/main/java/coop/libriciel/ipcore/services/database/PostgresService.java index 19f306261766b82d8f008e1288bd2f07185db840..d1c3f2f0efa246664b0710a7283af6ea9a4a9841 100644 --- a/src/main/java/coop/libriciel/ipcore/services/database/PostgresService.java +++ b/src/main/java/coop/libriciel/ipcore/services/database/PostgresService.java @@ -913,16 +913,15 @@ public class PostgresService implements DatabaseServiceInterface { field(tableRuExecutionRootAlias + ".tenant_id_", String.class).eq(tenantId) )) + .innerJoin(table(tableHistProcInst).as("task_start_proc")) + .on(field("task_start_proc" + ".business_key_", String.class).equal(field("act_ru_exec_root" + ".business_key_", String.class))) + .innerJoin(table(tableHistTaskInst).as(taskStartAlias)) .on(and( + field("task_start_proc" + ".ID_", String.class).equal(field(taskStartAlias + ".PROC_INST_ID_", String.class)), field(taskStartAlias + ".name_", String.class).equal(val("main_start", String.class)), field(taskStartAlias + ".tenant_id_", String.class).eq(tenantId) )) - .innerJoin(table(tableHistProcInst).as("task_start_proc")) - .on(and( - field("task_start_proc" + ".ID_", String.class).equal(field(taskStartAlias + ".PROC_INST_ID_", String.class)), - field("task_start_proc" + ".business_key_", String.class).equal(field("act_ru_exec_root" + ".business_key_", String.class)) - )) .innerJoin(table(tableHiIdentityLink).as("start_identity")) .on(and( @@ -1366,16 +1365,20 @@ public class PostgresService implements DatabaseServiceInterface { try (Connection connection = dataSource.getConnection()) { + SelectForUpdateStep<? extends Record> request = buildColumnedTaskListRequest( + tenantId, + groupIds, + delegations, + currentUserId, + columnedTaskListRequest, + includedMetadata, + pageable + ); + + log.trace("buildColumnedTaskListRequest:\n{}", () -> request.getSQL(INLINED)); + return DSL.using(connection, PSQL_RENDER_SETTINGS) - .fetch(buildColumnedTaskListRequest( - tenantId, - groupIds, - delegations, - currentUserId, - columnedTaskListRequest, - includedMetadata, - pageable - )) + .fetch(request) .stream() .map(IpWorkflowTask::new) .map(IpWorkflowInstance::new) @@ -1398,15 +1401,19 @@ public class PostgresService implements DatabaseServiceInterface { try (Connection connection = dataSource.getConnection()) { + SelectForUpdateStep<Record1<Integer>> request = buildColumnedTaskCountRequest( + tenantId, + groupIds, + delegations, + currentUserId, + columnedTaskListRequest, + includedMetadata + ); + + log.trace("buildColumnedTaskCountRequest:\n{}", () -> request.getSQL(INLINED)); + return DSL.using(connection, PSQL_RENDER_SETTINGS) - .fetchOptional(buildColumnedTaskCountRequest( - tenantId, - groupIds, - delegations, - currentUserId, - columnedTaskListRequest, - includedMetadata - )) + .fetchOptional(request) .map(r -> r.get(0, Integer.class)) .orElse(-1); diff --git a/src/test/java/coop/libriciel/ipcore/services/database/PostgresServiceTest.java b/src/test/java/coop/libriciel/ipcore/services/database/PostgresServiceTest.java index 0dc003f0afc2e0b968bff60941d533ea67ab55c4..c3a15f426d248ae1f478b705881444228325bd6e 100644 --- a/src/test/java/coop/libriciel/ipcore/services/database/PostgresServiceTest.java +++ b/src/test/java/coop/libriciel/ipcore/services/database/PostgresServiceTest.java @@ -533,15 +533,13 @@ class PostgresServiceTest { act_ru_exec_root.ID_ = act_ru_execution.ROOT_PROC_INST_ID_ AND act_ru_exec_root.tenant_id_ = '6c53cbb2-37f5-452a-8620-d771ad05297d' ) - JOIN act_hi_taskinst AS task_start - ON ( - task_start.name_ = 'main_start' - AND task_start.tenant_id_ = '6c53cbb2-37f5-452a-8620-d771ad05297d' - ) JOIN act_hi_procinst AS task_start_proc + ON task_start_proc.business_key_ = act_ru_exec_root.business_key_ + JOIN act_hi_taskinst AS task_start ON ( task_start_proc.ID_ = task_start.PROC_INST_ID_ - AND task_start_proc.business_key_ = act_ru_exec_root.business_key_ + AND task_start.name_ = 'main_start' + AND task_start.tenant_id_ = '6c53cbb2-37f5-452a-8620-d771ad05297d' ) JOIN act_hi_identitylink AS start_identity ON ( @@ -704,15 +702,13 @@ class PostgresServiceTest { act_ru_exec_root.ID_ = act_ru_execution.ROOT_PROC_INST_ID_ AND act_ru_exec_root.tenant_id_ = '29f9b247-431d-42aa-b00b-7df7507e83f7' ) - JOIN act_hi_taskinst AS task_start - ON ( - task_start.name_ = 'main_start' - AND task_start.tenant_id_ = '29f9b247-431d-42aa-b00b-7df7507e83f7' - ) JOIN act_hi_procinst AS task_start_proc + ON task_start_proc.business_key_ = act_ru_exec_root.business_key_ + JOIN act_hi_taskinst AS task_start ON ( task_start_proc.ID_ = task_start.PROC_INST_ID_ - AND task_start_proc.business_key_ = act_ru_exec_root.business_key_ + AND task_start.name_ = 'main_start' + AND task_start.tenant_id_ = '29f9b247-431d-42aa-b00b-7df7507e83f7' ) JOIN act_hi_identitylink AS start_identity ON ( @@ -856,15 +852,13 @@ class PostgresServiceTest { act_ru_exec_root.ID_ = act_ru_execution.ROOT_PROC_INST_ID_ AND act_ru_exec_root.tenant_id_ = '29f9b247-431d-42aa-b00b-7df7507e83f7' ) - JOIN act_hi_taskinst AS task_start - ON ( - task_start.name_ = 'main_start' - AND task_start.tenant_id_ = '29f9b247-431d-42aa-b00b-7df7507e83f7' - ) JOIN act_hi_procinst AS task_start_proc + ON task_start_proc.business_key_ = act_ru_exec_root.business_key_ + JOIN act_hi_taskinst AS task_start ON ( task_start_proc.ID_ = task_start.PROC_INST_ID_ - AND task_start_proc.business_key_ = act_ru_exec_root.business_key_ + AND task_start.name_ = 'main_start' + AND task_start.tenant_id_ = '29f9b247-431d-42aa-b00b-7df7507e83f7' ) JOIN act_hi_identitylink AS start_identity ON ( @@ -1022,15 +1016,13 @@ class PostgresServiceTest { act_ru_exec_root.ID_ = act_ru_execution.ROOT_PROC_INST_ID_ AND act_ru_exec_root.tenant_id_ = '29f9b247-431d-42aa-b00b-7df7507e83f7' ) - JOIN act_hi_taskinst AS task_start - ON ( - task_start.name_ = 'main_start' - AND task_start.tenant_id_ = '29f9b247-431d-42aa-b00b-7df7507e83f7' - ) JOIN act_hi_procinst AS task_start_proc + ON task_start_proc.business_key_ = act_ru_exec_root.business_key_ + JOIN act_hi_taskinst AS task_start ON ( task_start_proc.ID_ = task_start.PROC_INST_ID_ - AND task_start_proc.business_key_ = act_ru_exec_root.business_key_ + AND task_start.name_ = 'main_start' + AND task_start.tenant_id_ = '29f9b247-431d-42aa-b00b-7df7507e83f7' ) JOIN act_hi_identitylink AS start_identity ON ( @@ -1205,15 +1197,13 @@ class PostgresServiceTest { act_ru_exec_root.ID_ = act_ru_execution.ROOT_PROC_INST_ID_ AND act_ru_exec_root.tenant_id_ = '29f9b247-431d-42aa-b00b-7df7507e83f7' ) - JOIN act_hi_taskinst AS task_start - ON ( - task_start.name_ = 'main_start' - AND task_start.tenant_id_ = '29f9b247-431d-42aa-b00b-7df7507e83f7' - ) JOIN act_hi_procinst AS task_start_proc + ON task_start_proc.business_key_ = act_ru_exec_root.business_key_ + JOIN act_hi_taskinst AS task_start ON ( task_start_proc.ID_ = task_start.PROC_INST_ID_ - AND task_start_proc.business_key_ = act_ru_exec_root.business_key_ + AND task_start.name_ = 'main_start' + AND task_start.tenant_id_ = '29f9b247-431d-42aa-b00b-7df7507e83f7' ) JOIN act_hi_identitylink AS start_identity ON (