Want to help add a feature or fix a bug?
You can get the source code by [downloading a release]({{ site.baseurl }}/downloads) or from source control.
Calcite uses git for version control. The canonical source is in Apache, but most people find the GitHub mirror more user-friendly.
Prerequisites are git, maven (3.2.1 or later) and Java (JDK 1.8 or later, 1.9 preferred) on your path.
Create a local copy of the git repository, cd
to its root directory, then build using maven:
{% highlight bash %} $ git clone git://github.com/apache/calcite-avatica.git avatica $ cd avatica $ ./mvnw install {% endhighlight %}
The HOWTO describes how to [build from a source distribution]({{ site.baseurl }}/docs/howto.html#building-from-a-source-distribution), [run more or fewer tests]({{ site.baseurl }}/docs/howto.html#running-tests) and [run integration tests]({{ site.baseurl }}/docs/howto.html#running-integration-tests).
On older operating systems, developers trying to build Avatica may experience issues with the Xolstice maven-protobuf-plugin, similar to the following:
[INFO] Compiling 3 proto file(s) to /avatica/core/src/main/java [ERROR] PROTOC FAILED: /avatica/core/target/protoc-plugins/protoc-3.1.0-linux-x86_64.exe: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /avatica/core/target/protoc-plugins/protoc-3.1.0-linux-x86_64.exe) [ERROR] /avatica/core/src/main/protobuf/common.proto [0:0]: /avatica/core/target/protoc-plugins/protoc-3.1.0-linux-x86_64.exe: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /avatica/core/target/protoc-plugins/protoc-3.1.0-linux-x86_64.exe) [ERROR] /avatica/core/src/main/protobuf/responses.proto [0:0]: /avatica/core/target/protoc-plugins/protoc-3.1.0-linux-x86_64.exe: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /avatica/core/target/protoc-plugins/protoc-3.1.0-linux-x86_64.exe) [ERROR] /avatica/core/src/main/protobuf/requests.proto [0:0]: /avatica/core/target/protoc-plugins/protoc-3.1.0-linux-x86_64.exe: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /avatica/core/target/protoc-plugins/protoc-3.1.0-linux-x86_64.exe)
In most cases, it is unnecessary to re-generate the Protobuf messages into Java code. Developers can side-step this issue by disabling the compile-protobuf
profile in their Maven execution.
{% highlight bash %} $ ./mvnw package -P!compile-protobuf {% endhighlight %}
We welcome contributions.
If you are planning to make a large contribution, talk to us first! It helps to agree on the general approach. Log a JIRA case for your proposed feature or start a discussion on the dev list.
Fork the github repository, and create a branch for your feature.
Develop your feature and test cases, and make sure that ./mvnw install
succeeds. (Run extra tests if your change warrants it.)
Commit your change to your branch, and use a comment that starts with the JIRA case number, like this:
{% highlight text %} [CALCITE-345] AssertionError in RexToLixTranslator comparing to date literal {% endhighlight %}
If your change had multiple commits, use git rebase -i master
to squash them into a single commit, and to bring your code up to date with the latest on the main line.
Then push your commit(s) to github, and create a pull request from your branch to the calcite master branch. Update the JIRA case to reference your pull request, and a committer will review your changes.
Calcite has a collection of Jenkins jobs on ASF-hosted infrastructure. They are all organized in a single view and available at https://builds.apache.org/view/A-D/view/Calcite/job/Calcite-Avatica-Master/.
Calcite is a community, so the first step to joining the project is to introduce yourself. Join the developers list and send an email.
If you have the chance to attend a meetup, or meet members of the community at a conference, that's also great.
Choose an initial task to work on. It should be something really simple, such as a bug fix or a Jira task that we have labeled “newbie”. Follow the contributing guidelines to get your change committed.
After you have made several useful contributions we may invite you to become a committer. We value all contributions that help to build a vibrant community, not just code. You can contribute by testing the code, helping verify a release, writing documentation or the web site, or just by answering questions on the list.