Mondrian supports a large number of back-end databases. So many in fact, that we rely on contributors to add the support, and we have tried to standardize the steps to support a new database.
I thought it might be worthwhile to reiterate those steps. The steps are:
- Write a dialect class. The dialect must implement the
Dialectinterface, and will probably be a subclass of
JdbcDialectImpl. The only prerequisites are that your database has a JDBC driver and supports SQL-92: SELECT .. FROM .. JOIN .. GROUP BY. Mondrian will glean as much information as it can, such as how your database quotes identifiers that contain mixed-case or spaces, from the JDBC driver. But you will need to override methods to provide information that the JDBC does not provide (e.g. how to affect whether NULL values sort first or last) or if the JDBC driver lies.
- Add your dialect to the
META-INF/services/mondrian.spi.Dialectfile so that mondrian can find it.
bin/loadFoodMart.shso that you can load data from
demo/FoodMartData.sqlinto your database. (We prefer not to add a dump file for each database to the distro. The FoodMart data set is about 5MB compressed, so each dump file would bloat the size of the distro.)
- Get the test suite to pass. We strongly recommend that you focus on
DialectTestto pass first; once the dialect is accurate, most other mondrian tests should just pass. If you need help, post your test output to the mondrian developers email list; someone is likely to have seen the problem before, on another database.
- Add a section to
mondrian.propertiesdescribing a typical connect string for your database.
When these steps are complete, post the files in a JIRA case. I will add your database to the list of supported databases and mention it in the release notes of the next mondrian release.
Then, please join the email list and stay in touch. We are not able to test all supported databases each release. When we announce a beta of a mondrian release, run the test suite against your database, and let us know if we’ve broken anything. Supporting a large array of databases is not hard, but it is even easier if we do it as a community.