.. # @@@ START COPYRIGHT @@@
   #
   # 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.
   #
   # @@@ END COPYRIGHT @@@

=============================
Trafodion Core README
=============================

Trafodion provides a transactional SQL-on-HBase engine. "Trafodion" is the Welsh word for transactions. Trafodion builds on the scalability, elasticity, and flexibility of Hadoop. It extends it to handle enterprise-class operational workloads such as online transaction processing.

Trafodion is distributed under the terms of the Apache License, Version 2.0.

To learn about Trafodion visit:
   http://trafodion.org

For more information about how to contribute to Trafodion visit the wiki:
   https://wiki.trafodion.org

