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

Reply via email to