MetaModel Changelog

New in version 3.3

February 28th, 2013
  • With the 3.3 release we're opening a couple of new modules to fully-fledged business applications, namely Salesforce and SugarCRM. This means that you can now interact with these business applications just as if they where a regular database or data file. For our typical use-cases in the Information Management area, these additions make interactions a lot easier and unified with database interactions.
  • Additionally the 3.3 release contains the regular round of bugfixes and improvements, specifically the IBM DB2 support has been further optimized.

New in version 3.2.5 (December 29th, 2012)

  • Version 3.2.5 improves existing features on a number of areas, primarily on query parsing capabilities and on improved support for DB2 and MS SQL server. Totaling up to 10 significant improvements.

New in version 3.2.3 (November 27th, 2012)

  • This version fixes timestamp literals on DB2's SQL-dialect.

New in version 3.2.1 (October 19th, 2012)

  • We've drastically improved the performance of "DELETE FROM" statements on CSV files.
  • We've added mapping of unavailable-to-available data types when issuing "CREATE TABLE" statements containing unavailable data types on eg. DB2 or PostgreSQL. In these cases a proper data type will be automatically applied, eg. to use SMALLINT instead of BOOLEAN on DB2, or use BYTEA instead of BLOB on PostgreSQL.
  • A bug pertaining to multithreaded execution of compiled JDBC queries was fixed. We've created a pool of prepared statements to ensure parallel execution of compiled queries.
  • A bug pertaining to proper quoting of HAVING clause operands was fixed. When the data type of an aggregate function is different from data type of the functions argument, the quoting would not be correct under given circumstances.

New in version 3.2 (October 10th, 2012)

  • Queries can now be compiled, preparing them for execution with varying parameter values. For JDBC databases, this will provide prepared statement-like functionality.
  • For other datastores, it will simply make query reuse simpler.
  • DataSet index caching has been implemented, making lookup by column or by "select item" faster and constant-time.

New in version 3.0 (July 10th, 2012)

  • New features:
  • Execute UPDATE and DELETE operations
  • With MetaModel 3.0 we now offer a full set of CRUD operations on your datastores! This means that in addition to querying and inserting records, you can now also update records and delete them.
  • The UPDATE and DELETE operations can be fired on all UpdateableDataContext implementations, which currently include:
  • JDBC databases
  • CSV files
  • Excel spreadsheets
  • MongoDB databases
  • CouchDB databases
  • Execute CREATE TABLE and DROP TABLE operations
  • In MetaModel 3.0 you're also now able to create and drop tables at runtime. For instance, you can use it to create temporary, but persistent tables, or dynamically fit your data model at runtime. Doing so is done using the executeUpdate(...) method on any of the UpdateableDataContext implementations, which currently include:
  • JDBC databases
  • CSV files
  • Excel spreadsheets
  • MongoDB databases
  • CouchDB databases
  • The notion of a 'table' differs a bit in these datastores, so take a look at the Schema and table semantics page for a full overview.
  • CouchDB support
  • We have a brand new module in MetaModel 3.0 which offers CouchDB support! Now you can query and update your CouchDB database just like you would query any regular database.
  • A Java object based datastore
  • Another new module in MetaModel 3.0: Java object support (aka. the POJO module). While this might not seem so impressive at first, it is actually quite useful. You can use for instance for unittesting purposes or to allow users to test-drive your data flows using simple in-memory data.
  • Primary key awareness
  • MetaModel is now aware of primary keys. Obviously this is extremely important when dealing with UPDATE and DELETE operations. Therefore you will find two new methods: Table.getPrimaryKeys() and Column.isPrimaryKey().
  • Changes to the existing API:
  • New column types: List and Map
  • With the widening of the support for NoSQL datastores like MongoDB and CouchDB, we've seen a need for new column types. We've introduced LIST and MAP for this purpose. They map to java.util.List and java.util.Map and allow for these datastore types to represent the full documents contained within them.
  • Semantics of "row number" changed from 0-based to 1-based.
  • An important API change for MetaModel in order to improve consistency with other similar libraries: We've changed the row number concept from a 0-based index concept to being a 1-based row number concept! This was done in order to comply with typical usage of row numbers in eg. SQL LIMIT clauses, Spreadsheet applications, the JPA specification and more.
  • On the down-side, this means that the semantics have changed for a number of methods or classes:
  • The Query.setFirstRow(Integer) and Query.getFirstRow() methods.
  • The CsvConfiguration constructor parameter 'columnNameLineNumber'. Note that the constants NO_COLUMN_NAME_LINE and DEFAULT_COLUMN_NAME_LINE have been adjusted, so when using these constants, no change is needed.
  • The FixedWidthConfiguration constructor parameter 'columnNameLineNumber'. Note that the constants NO_COLUMN_NAME_LINE and DEFAULT_COLUMN_NAME_LINE have been adjusted, so when using these constants, no change is needed.
  • The ExcelConfiguration constructor parameter 'columnNameLineNumber'. Note that the constants NO_COLUMN_NAME_LINE and DEFAULT_COLUMN_NAME_LINE have been adjusted, so when using these constants, no change is needed.
  • The FirstRowDataSet constructor parameter 'firstRow' (rarely used).
  • We encourage you to check your usage of these methods or classes before upgrading to MetaModel 3.0. Make sure you switch from a 0-based to a 1-based approach when using them.
  • Operator 'Higher/lower than' renamed to 'Greater/less than'.
  • The operator types HIGHER_THAN and LOWER_THAN have been deprecated. Use the new GREATER_THAN and LESS_THAN instead.
  • Allowed referencing a column in a specific aliased table
  • We've made it possible to construct a SelectItem with a reference to a specific FromItem which means that in case you are referencing the same table multiple times in a query, you can then pinpoint which one a specific select item references.
  • Logging level moderations
  • The logging level (especially for the JDBC module) has been moderated to not include as much information in the INFO level as before. This means that you will no longer get eg. the full SQL query in the INFO level, which is an improvement for the security of INFO-logged applications.
  • Deprecation of DataSet.toTableModel()
  • The method DataSet.toTableModel() has been deprecated, and we plan on removing it entirely from version 3.1. This is to prevent any hick-ups in environments where the javax.swing package is prohibited (eg. in some OSGi environments) or even not existing (eg. in future Java 8 Jigsaw-based deployments). Users of the method are encouraged to use the class DataSetTableModel instead, which yields the same result.
  • Bugfixes:
  • Fixed index-issue in handling of boolean JDBC values
  • An issue with retreiving JDBC boolean values was discovered and fixed.

New in version 2.1 (December 1st, 2011)

  • The 2.1 version of MetaModel is an exciting one. The primary archievements in this release has been to provide a mapping model for non-tabular datastores like the NoSQL database MongoDB and for XML files. This means that these two data formats that previously required you to do custom conversion and custom query implementations can now be queried (and in MongoDB's case also modified) in a standard fashion. For both MongoDB and XML files you have a choice of either letting MetaModel autodetect a table model (which may not be perfect, but good to begin with) or to specify your own table definitions and let MetaModel figure out the rest.

New in version 2.0.2 (October 20th, 2011)

  • The Excel adapter now uses the new Streaming API in Apache POI, which should mean that support for very large Excel spreadsheets just got a lot better.
  • A bug was fixed, which caused CSV writing not to respect the separator and quote char defined for the file format.
  • Performance improved in query postprocessing by applying sub-selections just-in-time, instead of ahead of time.
  • We've added a new experimental adaptor for MongoDB databases. The adaptor supports querying MongoDB using the well known MetaModel query API. Since MongoDB doesn't have schema definitions, you will have to define the schema yourself though.

New in version 2.0 (August 18th, 2011)

  • New features include an API for performing updates (write operations) on data, the ability to create data in CSV files, Excel spreadsheets, and JDBC databases, support for visual styling metadata, used in spreadsheets and similar data stores, support for the IN operator in queries, and major performance improvements for Excel reading.