Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
/ linq4j Public
forked from julianhyde/linq4j

A port of LINQ (Language-Integrated Query) to Java

License

Notifications You must be signed in to change notification settings

upson/linq4j

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

205 Commits

Repository files navigation

Build Status

linq4j

A port of LINQ (Language-Integrated Query) to Java.

Download

$ git clone git://github.com/julianhyde/linq4j.git linq4j

Build and test

$ mvn package

Backlog

If you would like to contribute, here are some of the tasks we have planned. Please let us know if you are starting one.

  • Implement and test the methods allowing queries on Enumerables. The methods are specified in ExtendedEnumerable, DefaultEnumerable calls the implementations in Extensions. We'll do these in tranches. Each time you implement a method, add a test similar to Linq4jTest.testWhere. Try to refactor out some helper (named inner) classes, rather than creating 2 or 3 anonymous classes per method.

  • Third tranche: implement groupBy for Enumerable.

  • Fourth tranche: implement any, all, aggregate, sum, min, max, average for Enumerable.

  • Sixth tranche: implement union, intersect, except, distinct methods for Enumerable.

  • Seventh tranche: first, last, defaultIfEmpty, elementAtOrDefault, firstOrDefault, lastOrDefault for Enumerable. May need to add a class parameter so that we can generate the right default value.

  • Eighth tranche: implement orderBy, reverse for Enumerable.

  • Ninth tranche: implement methods that require EqualityComparer.

  • Last tranche: all remaining methods for Enumerable.

  • Parser support. Either modify a Java parser (e.g. OpenJDK), or write a pre-processor. Generate Java code that includes expression trees.

  • Port Enumerable and Queryable to Scala. Change classes (in particular, collections and function types) so that user code is looks like concise, native Scala. Share as much of the back-end as possible with linq4j, but don't compromise the Scala look-and-feel of the front-end. Use adapters (and sacrifice a bit of performance) if it helps.

  • Write a simple LINQ-to-SQL provider. This would generate SQL and get data from JDBC. It's a prototype, demonstrating that we can connect the dots. Plan to throw it away.

  • In the prototype LINQ-to-SQL provider, write a simple rule to recognize a select list and where clause and push them down to SQL.

  • Test Scala front-end against LINQ-to-SQL provider.

  • A better provider using a planner framework.

  • JDBC driver on top of linq4j (not necessarily on top of the Queryable/Expression object model; more likely on the query model that this translates to).

  • Use planner framework to build back-ends to non-SQL data sources (e.g. MongoDB, Hadoop, text files).

Already implemented

Methods on Enumerable:

  • select, selectMany, where, groupJoin, join;
  • count, longCount;
  • cast, ofType;
  • toMap, toLookup, skip, skipWhile, take, takeWhile.

Methods on Queryable:

  • where, whereN
  • skip, skipWhile, skipWhileN, take, takeWhile, takeWhileN.

(Except methods that involve EqualityComparer.)

More information

About

A port of LINQ (Language-Integrated Query) to Java

Resources

License

Stars

Watchers

Forks

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /