GithubHelp home page GithubHelp logo

linq4j's Introduction

linq4j

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

Download

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

Build and test

$ mvn compile
$ mvn test

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

linq4j's People

Contributors

julianhyde avatar jganoff avatar cwensel avatar pstoellberger avatar

Watchers

James Cloos avatar baeeq avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.