"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 > > > > >