[
https://issues.apache.org/jira/browse/GROOVY-11713?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Paul King updated GROOVY-11713:
-------------------------------
Component/s: groovy-ginq
> Support wildcard like functionality in ginq
> -------------------------------------------
>
> Key: GROOVY-11713
> URL: https://issues.apache.org/jira/browse/GROOVY-11713
> Project: Groovy
> Issue Type: Improvement
> Components: groovy-ginq
> Reporter: Per Nyfelt
> Priority: Major
>
> The select portion of a ginq expression does not have a way to easily express
> "all alltributes" of an object.
> Given this test setup:
> class Employee \{
> String mainSsn
> String coSsn
> String firstName
> BigDecimal salary
> LocalDate startDate
> }
> class Identifier \{
> String customerId
> String lei
> }
> List employees = [
> new Employee(mainSsn: '111', firstName: 'Rick', salary: 623.3,
> startDate: LocalDate.parse('2012-01-01')),
> new Employee(mainSsn: '222', coSsn: '444', firstName: 'Dan', salary:
> 515.2, startDate: LocalDate.parse('2013-09-23')),
> new Employee(mainSsn: '555', coSsn: '555', firstName: 'Michelle',
> salary: 611.0, startDate: LocalDate.parse('2014-11-15')),
> ]
> List identifiers = [
> new Identifier(customerId: '2', lei: '111'),
> new Identifier(customerId: '3', lei: '222'),
> new Identifier(customerId: '4', lei: '333'),
> new Identifier(customerId: '5', lei: '444'),
> new Identifier(customerId: '6', lei: '555'),
> ]
> If this data was represented as tables in a database, i could wite the
> following SQL:
> select e.*, mcid.customerId as mainCustomerId, cocid.customerId as
> coCustomerId
> from e in employees
> left join mcid on e.mainSsn = mcid.lei
> left join cocid on e.coSsn = cocid.lei
>
> In ginq however, there is no support for wildcards or for a method that i can
> override that would expand an object into properties so i must name all
> attributes explicitly i.e.:
> def result = GQ \{
> from e in employees
> leftjoin mcid in identifiers on e.mainSsn == mcid.lei
> leftjoin cocid in identifiers on e.coSsn == cocid.lei
> select e.mainSsn, e.coSsn, e.firstName, e.salary, e.startDate,
> mcid?.customerId as mainCustomerId, cocid?.customerId as coCustomerId
> }
>
> In this example, this is quite easy (not so many fields) but if a i have
> several object with 10+ fields, this becomes quite cumbersome.
> If there was a method (e.g. expand() that returns a certain type, such as a
> list of tuples or a Map, that qinq would understand then i could implement
> that method in the Employees class and write the above ginq expression as:
> def result = GQ \{
> from e in employees
> leftjoin mcid in identifiers on e.mainSsn == mcid.lei
> leftjoin cocid in identifiers on e.coSsn == cocid.lei
> select expand(e), mcid?.customerId as mainCustomerId,
> cocid?.customerId as coCustomerId
> }
> Maybe even the default expand() method could base the attributes to include
> on getProperties() of the object which would probably be good enough for many
> cases.
> Adding support for this with an `expand` method would greatly enhance the
> user experience for these kind of cases.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)