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

Reply via email to