Well done! El sáb, 12 oct 2024, 18:14, Per Nyfelt <p...@alipsa.se> escribió:
> Wonderful news! > > On 10/12/24 17:39, Daniel Sun wrote: > > "GROOVY-11491: Add support for join and group by in ginq" is fixed in > 4.0.24 and 5.0.0-alpha-11. > > > > > https://github.com/apache/groovy/commit/6371ceaeea0fee1a9760e9b81d293f487ceff429 > > > > Cheers, > > Daniel Sun > > > > On 2024/10/09 04:25:31 Daniel Sun wrote: > >> I will look into the issue later. > >> > >> Could you submit a JIRA ticket to track the issue? > >> > >> Here is the similar example, but its works, I am curious about the > difference between them. > >> > >> > https://github.com/apache/groovy/blob/02ac82f92760357c0eb653ed2f1fa2f0a6dd65cc/subprojects/groovy-ginq/src/spec/test/org/apache/groovy/ginq/GinqTest.groovy#L4789 > >> > >> Cheers, > >> Daniel Sun > >> > >> On 2024/10/05 17:16:02 Per Nyfelt wrote: > >>> Hi, I am trying to learn Ginq and are having problems with joining an > >>> aggregation functions. > >>> > >>> The following example illustrates the issue: > >>> > >>> import java.time.LocalDate > >>> > >>> class Warehouse { > >>> int id > >>> String name > >>> Double price > >>> int stock > >>> > >>> Warehouse(int id, String name, Double price, int stock) { > >>> this.id = id > >>> this.name = name > >>> this.price = price > >>> this.stock = stock > >>> } > >>> } > >>> > >>> class Sales { > >>> LocalDate date > >>> int item > >>> > >>> Sales(LocalDate date, int item) { > >>> this.date = date > >>> this.item = item > >>> } > >>> } > >>> > >>> > >>> List<Warehouse> warehouse = [ > >>> new Warehouse(1, 'Orange', 11, 2), > >>> new Warehouse(2, 'Apple', 6, 3), > >>> new Warehouse(3, 'Banana', 4, 1), > >>> new Warehouse(4, 'Mango', 29, 10) > >>> ] > >>> List<Sales> sales = [ > >>> new Sales(LocalDate.of(2024, 5, 1), 1), > >>> new Sales(LocalDate.of(2024, 5, 2), 1), > >>> new Sales(LocalDate.of(2024, 5, 3), 3) > >>> ] > >>> def q = GQ { > >>> from s in sales > >>> join w in warehouse on w.id == s.item > >>> select w.name, w.price > >>> } > >>> // so far so good, the following works: > >>> assert [['Orange', 11.0], ['Orange', 11.0], ['Banana', 4.0]] == > q.toList() > >>> > >>> // now try to summarize by name > >>> def qSum = GQ { > >>> from s in sales > >>> join w in warehouse on w.id == s.item > >>> groupby w.name > >>> select w.name, sum(w.price) > >>> } > >>> // Fails with Exception evaluating property 'price' for > groovy.lang.Tuple2, > >>> // Reason: groovy.lang.MissingPropertyException: No such property: > price > >>> for class: Sales > >>> assert [['Orange', 22.0], ['Banana', 4.0]] == qSum.toList() > >>> > >>> So for some reason ginq thinks it will find the price property in the > >>> Sales class instead of in the Warehouse class so w.price here is not > >>> understood. What is the right way to write it? > >>> > >>> Regards, > >>> > >>> Per > >>> > >>> >