GSOC ReportBuilder Weekly Update

Adam Seskunas adamseskunas at gmail.com
Wed Aug 20 22:09:26 UTC 2025


At the end of last week I worked on getting my
ReportDesign test through code review and ultimately
merged. Unfortunately, it turns out that the test is modifying
the test file in place, thank you Stephan Bergmann for
bringing this to my attention today.

I've been working on fixing the issue, but have not
had any success so far. I've found the cause of the
problem, by using the odiff tool on the test document
I've found that something is modifying the manifest.xml
of the document. Experimenting with the code it looks
like the following lines are the offending parties.

    Reference<sdb::application::XDatabaseDocumentUI> xUI(xController,
UNO_QUERY_THROW);
    xUI->connect();
    Reference<XConnection> xActiveConnection = xUI->getActiveConnection();

I've tried different ways of opening and saving the test
document for instance as read only, with no success. My
next step will be to look into the XDatabaseDocumentUI
class to see if I can find where its modifying the document
and to see if I can find a work around.

Until today, I was working on implementing the second
half of the Grouping functionality in a Report. The ability to
group fields by prefix character, entire field, interval, and various
date functions(i.e. by month, or week). I had been concerned
that if this was implemented in C++ it would involve lots of
text and more concerning, date processing. In my weekly
meeting with my mentors we discussed this and Michael and
Hossein both suggested that if possible, to use SQL statements
to do as much of the work as possible.

So I spent quite a bit of time going over various SQL constructs
for sorting and grouping and ultimately came up with the idea
to use SQL CASE statements to logically determine matching
fields and then add a column to the SQL result that denotes
which Group(s) a field matches. Using the SQL statement to do
the matching offloads the complexities of string and date parsing
to the underlying database.

Currently I'm working on the C++ code that takes the type of
matching determined in the report::GroupOn struct and using
it to build the appropriate SQL CASE statement. So far I have
a limited prefix character function implemented and I'm using it
to test the concept with great results so far.

After finishing the GroupOn to SQL CASE statement
implementations, I will work on how the actual headers and
footers for groups are written to the xml doc, this could be a
little tricky as its currently a recursive call and my new implementation
may or may not break that. When the headers and footers are
being written to the correct places the Grouping functionality will
be finished and it will be time to move on to my TODO list of
smaller singular issues.

That's all for now, thanks for reading and have a good week,
Adam Seskunas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/libreoffice/attachments/20250820/e1f1c26d/attachment.htm>


More information about the LibreOffice mailing list