Foo Developer created FINERACT-2872:
---------------------------------------
Summary: 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
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)