[
https://issues.apache.org/jira/browse/GROOVY-8258?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17208403#comment-17208403
]
mgroovy commented on GROOVY-8258:
---------------------------------
@[~daniel_sun]: Hi Daniel
* First congrats since it seems like you found the time to get this
dear-to-your-heart project started :)
* Second I would like to say that in C# I personally typically preferred to
use the stream API underlying LINQ directly over using the LINQ syntax. To me
using a call chain always seemed much clearer & cleaner than using a SQL-like
language that is mapped to said call chain. The sole exception to this was
group-by expressions, which I felt were complex enough to give a clear
advantage when using the DSL syntax.
* So, if I have not completely misunderstood what you are saying, my question
would be why you feel it is necessary for the "backend" stream API to be purely
an implementation detail, and if you plan for it to stay that way indefinitely
or only during an initial implementation phase ?
* Last I was wondering how much static compilation / type safety, and as a
result out-of-the-box IDE Intellisense support the planned LINQ DSL (GINQ) will
have ?-)
> [GEP] Create a LINQ-like DSL
> ----------------------------
>
> Key: GROOVY-8258
> URL: https://issues.apache.org/jira/browse/GROOVY-8258
> Project: Groovy
> Issue Type: New Feature
> Reporter: Daniel Sun
> Assignee: Daniel Sun
> Priority: Major
> Fix For: 4.x
>
>
> h2. *Ⅰ. Introduction*
> GINQ DSL is an alternative solution of GINQ, it is a simplified version of
> GINQ(GROOVY-9159) and will be implemented as a module "groovy-linq".
> GINQ DSL is wrapped with:
> {code:java}
> GINQ {
> // GINQ code
> }
> {code}
> h2. *Ⅱ. Sample code related to GROOVY-9159*
> h3. 1. Filtering
> h4. 1.1
> {code:java}
> from p in persons
> where p.age > 15 && p.age <= 35
> select p.name
> {code}
> h4. 1.2
> {code:java}
> from p in persons
> where p.age > 15 && p.age <= 35
> select p
> {code}
> h4. 1.3
> {code:java}
> from t in numbers
> where t <= 2
> select t
> {code}
> h3. 2. Joining
> h4. 2.1
> {code:java}
> from p in persons
> innerjoin c in cities
> on p.city.name == c.name
> select p.name, c.name
> {code}
> h4. 2.2
> {code:java}
> from p in persons
> from c in cities
> where p.city.name == c.name
> select p.name, c.name
> {code}
> h4. 2.3
> {code:java}
> from p in persons
> from c in cities
> where p.city == c
> select p.name
> {code}
> h4. 2.4
> {code:java}
> from p in persons
> leftjoin c in cities
> on p.city.name == c.name // same with left outer join
> select p.name, c.name
> {code}
> h4. 2.5
> {code:java}
> from p in persons
> rightjoin c in cities
> on p.city.name == c.name // same with right outer join
> select p.name, c.name
> {code}
> h3. 3. Projection
> h4. 3.1
> {code:java}
> from p in persons
> select p.name
> {code}
> h4. 3.2
> {code:java}
> from p in persons
> select p.name, p.age
> {code}
> h4. 3.3
> {code:java}
> from p in persons
> select [name: p.name, age: p.age]
> {code}
> h4. 3.4
> {code:java}
> from p in persons
> select new Person(name: p.name, age: p.age)
> {code}
> h4. 3.5
> {code:java}
> from p in persons
> select p
> {code}
> h3. 4. Grouping
> h4. 4.1
> {code:java}
> from p in persons
> groupby p.gender
> select p.gender, max(p.age)
> {code}
> h3. 5. Having
> h4. 5.1
> {code:java}
> from p in persons
> groupby p.gender
> having p.gender == 'Male'
> select p.gender, max(p.age)
> {code}
> h3. 6. Sorting
> h4. 6.1
> {code:java}
> from p in persons
> orderby p.age
> select p.name
> {code}
> h4. 6.2
> {code:java}
> from p in persons
> orderby p.age desc
> select p.name
> {code}
> h4. 6.3
> {code:java}
> from p in persons
> orderby p.age desc
> thenby p.name asc // asc is optional
> select p.name
> {code}
> h3. 7. Pagination
> h4. 7.1
> {code:java}
> from n in numbers
> limit 2, 5
> select n
> {code}
> h4. 7.2
> {code:java}
> from n in numbers
> limit 5
> select n
> {code}
> h3. 8. Nested Queries
> h4. 8.1
> {code:java}
> from v in (
> from n in numbers
> where n <= 5
> select n
> )
> limit 2, 5
> select v
> {code}
> h3. 9. WITH-Clause
> h4. 9.1
> {code:java}
> with v as (
> from n in numbers
> where n <= 5
> select n
> )
> from v
> limit 2, 5
> select v
> {code}
> h3. 10. Union
> h4. 10.1
> {code:java}
> from n in numbers1
> select n
> unionall
> from n in numbers2
> select n
> {code}
> h4. 10.2
> {code:java}
> from n in numbers1
> select n
> union
> from n in numbers2
> select n
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)