Daniel Sun created GROOVY-12724:
-----------------------------------

             Summary: GINQ: support static compilation and a fluent query API
                 Key: GROOVY-12724
                 URL: https://issues.apache.org/jira/browse/GROOVY-12724
             Project: Groovy
          Issue Type: Improvement
          Components: GINQ
            Reporter: Daniel Sun


Under @CompileStatic / @TypeChecked, GQ, GQL, and @GQ currently rely on dynamic 
lowering. This improvement makes those entry points usable from a statically 
checked scope while keeping the SQL-like syntax lowered to the in-memory 
collection runtime.

h3. Goals
* Allow GQ / GQL / @GQ from @CompileStatic and @TypeChecked without forcing the 
lowered tree through static checking at the expression site.
* Defer pipeline construction with LazyQueryable until a terminal read (toList, 
count, etc.), copying locals at the expression site (same binding as dynamic 
GQ).
* Add Ginq.from(...) as a deferred, generic fluent chain on the same runtime, 
with @ClosureParams so where/select/join/aggregate closures can infer element 
types where inference is sound.
* Preserve default lazy/deferred evaluation and dynamic GQ behavior for map 
rows and other intentionally dynamic cases.

h3. Non-goals / known limits
* Stored untyped Closure variables still need a SAM target type for parameter 
inference (same as Java/C#).
* Raw Query parameters/fields cannot recover a safe element type.
* Names bound by from inside GQ / GQL / @GQ stay dynamic by design; callers 
that need checked element types use Ginq.from.

h3. Related work
GitHub PR: https://github.com/apache/groovy/pull/3259
Stacked on GEP-26 SQL window work (PR #3167 / gep26-sql-window).



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to