***************************************************************************
 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
***************************************************************************

Release Notes - Apache MRQL 0.9.0

New Features

[MRQL-1] New MRQL website
[MRQL-4] Create a testbed for MRQL queries using JUnit

Bugs

[MRQL-2] Mavenize MRQL
[MRQL-5] JSON parser has a null scanner
[MRQL-7] Refactor directory layout to be more Maven compliant
[MRQL-9] Make BSP mode compatible with Hama 0.7.0
[MRQL-10] Add dist module to generate release tarball

Improvements

[MRQL-3] some trivial code improvements
[MRQL-6] Add developers guide to the website
[MRQL-8] Overload projections to work on JSON data
[MRQL-12] Support query evaluation in Spark mode

Tasks

[MRQL-11] Establish whether "Apache MRQL" is a suitable name
[MRQL-13] Umbrella task for first Apache MRQL release
[MRQL-14] Add the "-SNAPSHOT" suffix
[MRQL-15] Setup svnpubsub for the MRQL dist directory
[MRQL-16] correct source files. ASF licenses, and POMs for release
[MRQL-17] Update the MRQL status page
[MRQL-18] correct NOTICE, DISCLAIMER, xdoc
[MRQL-19] Fix license issues to prepare a new release candidate
