Apache MetaModel 4.2.0-incubating

 * [METAMODEL-38] - New module 'json' for handling json files (containing JSON arrays of documents or line-delimited JSON documents)
 * [METAMODEL-54] - ColumnType converted from enum to interface to allow for further specialization in modules.
 * [METAMODEL-57] - Changed the column type VARCHAR into STRING for the modules: CSV, Fixedwidth, Excel and XML.
 * [METAMODEL-56] - Made separate column types for converted JDBC LOBs - "CLOB as String" and "BLOB as bytes".
 * [METAMODEL-46] - Improved row-lookup by primary key (ID) in CouchDB
 * [METAMODEL-58] - Fixed a bug related to using CreateTable class and primary keys not getting created.
 * [METAMODEL-3]  - Improved writing of Byte-Order-Mark (BOM) for various encoding spelling variants.
 * [METAMODEL-70] - Made the build compatible with both JDK versions 6 and 7.
 * [METAMODEL-59] - Fixed a bug related to handling of date/time literals in MS SQL Server queries.
 * [METAMODEL-60] - Fixed a bug related to DISTINCT and TOP keywords in MS SQL Server queries.
 * [METAMODEL-45] - Improved and standardized way of handling integration test connection information towards external databases.
 * [METAMODEL-62] - Fixed a bug related to fault-tolerant handling of malformed CSV lines when reading CSVs in single-line mode
 * [METAMODEL-68] - Made it possible to create a CSV table without a header line in the file, if the user configures it.
 * [METAMODEL-67] - Upgraded Jackson (JSON library) dependency from org.codehaus namespace to the newer com.fasterxml namespace.
 * [METAMODEL-69] - Fixed issue with deserialization of ColumnType into the new interface instead of the old enum.

Apache MetaModel 4.1.0-incubating

 * [METAMODEL-13] - Added support for Apache HBase via the new module "MetaModel-hbase"
 * [METAMODEL-41] - Added a parser for SimpleTableDef objects (SimpleTableDefParser). It parses statements similar to CREATE TABLE statements, although without the "CREATE TABLE" prefix. For example: foo (bar INTEGER, baz VARCHAR)
 * [METAMODEL-11] - New module "MetaModel-spring" which adds a convenient FactoryBean to produce various types of DataContext objects based on externalizable parameters, for Spring framework users.
 * [METAMODEL-32] - Fixed thread-safety issue in Excel module when tables (sheets) metadata is updated.
 * [METAMODEL-47] - Fixed issue in Excel of loading schema if query is fired based on metadata from a previous DataContext instance.
 * [METAMODEL-35] - Improved query rewriting for DB2 when paged queries contain ORDER BY clause.
 * [METAMODEL-44] - Added an optional method for QueryPostprocessDataContext implementations to do a row-lookup by primary key value.
 * [METAMODEL-43] - Made CSV datastores skip empty lines in file instead of treating them of rows with null values.
 * [METAMODEL-39] - Added pooling of active/used Connections and PreparedStatements in JDBC compiled queries.
 * [METAMODEL-34] - Updated LICENSE file to not include bundled dependencies' licenses.
 * [METAMODEL-33] - Ensured that Apache Rat plugin for Maven is properly activated.
 * [METAMODEL-37] - Removed old site sources from project.

Apache MetaModel 4.0.0-incubating

 * [METAMODEL-9] - SalesforceDataSet is throwing exception for insert sql of record having date/time.
 * [METAMODEL-4] - Use folder name as schema name for file based DataContexts
 * [METAMODEL-5] - Faster CsvDataContext implementation for single-line values
 * [METAMODEL-26] - Provide endpoint URL with SalesforceDataContext
 * Upgraded Apache POI dependency to v. 3.9
 * Improved fluent Query builder API by adding string parameter based methods for joining tables
 * Added a utility ObjectInputStream for deserializing legacy MetaModel objects
 * Performance improvement to CSV reading when values are only single line based
 * Setting up the project on apache infrastructure
 * [METAMODEL-10] - Exclude Jackcess dependency (Access module) from MetaModel
 * Renaming the package hierarchy from org.eobjects.metamodel to org.apache.metamodel
 * [METAMODEL-29] - Fixed issue in CreateTable builder class, causing it to only support a single column definition
 * [METAMODEL-30] - Fixed issue with count(*) queries on CSV resources that does not provide a byte stream length 