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