{"id":17372719,"url":"https://github.com/julianhyde/linq4j","last_synced_at":"2025-04-05T06:06:36.955Z","repository":{"id":3060635,"uuid":"4082827","full_name":"julianhyde/linq4j","owner":"julianhyde","description":"A port of LINQ (Language-Integrated Query) to Java","archived":false,"fork":false,"pushed_at":"2023-12-17T03:40:39.000Z","size":2270,"stargazers_count":374,"open_issues_count":3,"forks_count":109,"subscribers_count":40,"default_branch":"master","last_synced_at":"2025-03-29T05:05:52.998Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/julianhyde.png","metadata":{"files":{"readme":"README.md","changelog":"HISTORY.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2012-04-20T03:40:33.000Z","updated_at":"2025-03-11T02:52:24.000Z","dependencies_parsed_at":"2024-01-12T00:28:03.302Z","dependency_job_id":"5814ef71-d127-460e-beb6-64cd113be56e","html_url":"https://github.com/julianhyde/linq4j","commit_stats":{"total_commits":193,"total_committers":10,"mean_commits":19.3,"dds":"0.13471502590673579","last_synced_commit":"6cac5e4fedb90cd98198f365665fcb9342f49c21"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianhyde%2Flinq4j","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianhyde%2Flinq4j/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianhyde%2Flinq4j/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/julianhyde%2Flinq4j/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/julianhyde","download_url":"https://codeload.github.com/julianhyde/linq4j/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247294536,"owners_count":20915340,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-16T02:03:37.982Z","updated_at":"2025-04-05T06:06:36.934Z","avatar_url":"https://github.com/julianhyde.png","language":"Java","funding_links":[],"categories":["Libraries","Implementations"],"sub_categories":["[Java](http://www.oracle.com/technetwork/java/index.html)","Miscs"],"readme":"[![Build Status](https://travis-ci.org/julianhyde/linq4j.png)](https://travis-ci.org/julianhyde/linq4j)\n\nlinq4j\n======\n\nA port of LINQ (Language-Integrated Query) to Java.\n\nDownload\n========\n\n    $ git clone git://github.com/julianhyde/linq4j.git linq4j\n\nBuild and test\n==============\n\n    $ mvn package\n\nBacklog\n=======\n\nIf you would like to contribute, here are some of the tasks we have planned.\nPlease let us know if you are starting one.\n\n* Implement and test the methods allowing queries on Enumerables. The methods\n  are specified in ExtendedEnumerable, DefaultEnumerable calls the\n  implementations in Extensions. We'll do these in tranches. Each time you\n  implement a method, add a test similar to Linq4jTest.testWhere.\n  Try to refactor out some helper (named inner) classes, rather than creating\n  2 or 3 anonymous classes per method.\n\n* Third tranche: implement groupBy for Enumerable.\n\n* Fourth tranche: implement any, all, aggregate, sum, min, max, average\n  for Enumerable.\n\n* Sixth tranche: implement union, intersect, except, distinct methods\n  for Enumerable.\n\n* Seventh tranche: first, last, defaultIfEmpty, elementAtOrDefault,\n  firstOrDefault, lastOrDefault for Enumerable. May need to add a class\n  parameter so that we can generate the right default value.\n\n* Eighth tranche: implement orderBy, reverse for Enumerable.\n\n* Ninth tranche: implement methods that require EqualityComparer.\n\n* Last tranche: all remaining methods for Enumerable.\n\n* Parser support. Either modify a Java parser (e.g. OpenJDK), or write a\n  pre-processor. Generate Java code that includes expression trees.\n\n* Port Enumerable and Queryable to Scala. Change classes (in particular,\n  collections and function types) so that user code is looks like concise,\n  native Scala. Share as much of the back-end as possible with linq4j, but\n  don't compromise the Scala look-and-feel of the front-end. Use adapters\n  (and sacrifice a bit of performance) if it helps.\n\n* Write a simple LINQ-to-SQL provider. This would generate SQL and get data\n  from JDBC. It's a prototype, demonstrating that we can connect the dots.\n  Plan to throw it away.\n\n* In the prototype LINQ-to-SQL provider, write a simple rule to recognize a\n  select list and where clause and push them down to SQL.\n\n* Test Scala front-end against LINQ-to-SQL provider.\n\n* A better provider using a planner framework.\n\n* JDBC driver on top of linq4j (not necessarily on top of the\n  Queryable/Expression object model; more likely on the query model that this\n  translates to).\n\n* Use planner framework to build back-ends to non-SQL data sources (e.g.\n  MongoDB, Hadoop, text files).\n\nAlready implemented\n===================\n\nMethods on Enumerable:\n* select, selectMany, where, groupJoin, join;\n* count, longCount;\n* cast, ofType;\n* toMap, toLookup, skip, skipWhile, take, takeWhile.\n\nMethods on Queryable:\n* where, whereN\n* skip, skipWhile, skipWhileN, take, takeWhile, takeWhileN.\n\n(Except methods that involve EqualityComparer.)\n\nMore information\n================\n\n* License: Apache License, Version 2.0.\n* Author: Julian Hyde\n* Blog: http://julianhyde.blogspot.com\n* Project page: http://www.hydromatic.net/linq4j\n* Source code: http://github.com/julianhyde/linq4j\n* Developers list: http://groups.google.com/group/linq4j-dev\n* \u003ca href=\"HISTORY.md\"\u003eRelease notes and history\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulianhyde%2Flinq4j","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjulianhyde%2Flinq4j","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjulianhyde%2Flinq4j/lists"}