[ 
https://issues.apache.org/jira/browse/FINERACT-2872?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Aman Mittal closed FINERACT-2872.
---------------------------------
    Resolution: Fixed

>  GET /centers by meeting date GROUP BY fails on PostgreSQL
> ----------------------------------------------------------
>
>                 Key: FINERACT-2872
>                 URL: https://issues.apache.org/jira/browse/FINERACT-2872
>             Project: Apache Fineract
>          Issue Type: Bug
>          Components: Groups
>            Reporter: Foo Developer
>            Assignee: Foo Developer
>            Priority: Major
>              Labels: beginner, beginner-friendly
>             Fix For: 1.16.0
>
>
> h3. Summary
> On PostgreSQL, listing the centers that have a meeting on a given date (the 
> lookup behind the productive collection sheet) fails with HTTP 500. The query 
> built by {{CenterReadPlatformServiceImpl.retriveAllCentersByMeetingDate}} 
> groups by columns that don't determine the selected ones, which MySQL/MariaDB 
> tolerate and PostgreSQL rejects.
> h3. Steps to reproduce (stock Fineract, PostgreSQL)
> {noformat}
> GET 
> /fineract-provider/api/v1/centers?officeId=1&staffId=1&meetingDate=22%20September%202026&dateFormat=dd%20MMMM%20yyyy&locale=en
> {noformat}
> No particular data is needed: PostgreSQL rejects the statement when it is 
> parsed.
> h3. Expected
> HTTP 200 with the list of centers (empty when none meet on that date).
> h3. Actual
> HTTP 500:
> {noformat}
> ERROR: column "ce.id" must appear in the GROUP BY clause or be used in an 
> aggregate function
> {noformat}
> h3. Root cause
> {{CenterCalendarDataMapper}} selects the center ({{ce.id}}, 
> {{ce.display_name}}), the child group ({{g.office_id}}, {{g.staff_id}}, ...) 
> and the staff name ({{s.display_name}}) next to {{sum(...)}} aggregates. The 
> {{staffId}} branch of {{retriveAllCentersByMeetingDate}} groups by {{c.id, 
> ci.id, g.account_no, g.external_id, g.status_enum, g.activation_date, 
> g.hierarchy}}. None of {{ce.id}}, {{ce.display_name}}, {{g.office_id}}, 
> {{g.staff_id}} or {{s.display_name}} is in that list or functionally 
> dependent on it: PostgreSQL only infers dependency from a table's own primary 
> key in the {{GROUP BY}}. The branch without {{staffId}} has no {{GROUP BY}} 
> at all. That branch is currently unreachable, because 
> {{validateForGenerateCollectionSheet}} requires {{staffId}}.
> h3. Proposed fix
> Add {{ce.id, ce.display_name, g.office_id, g.staff_id, s.display_name}} to 
> the {{GROUP BY}} of the {{staffId}} branch, and give the other branch the 
> same {{GROUP BY}}. The result rows don't change: the existing grouping is 
> already one row per child group ({{g.hierarchy}} contains the group's own 
> id), and each added column has a single value per child group (its center, 
> office, staff).
> h3. Tests
> The fix adds an integration test calling {{GET /v1/centers}} with 
> {{officeId}}, {{staffId}} and {{meetingDate}}. It expects a 200 and fails on 
> {{develop}} against PostgreSQL.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to