/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.db; import java.sql.Driver; import org.hibernate.dialect.Dialect; import org.hibernate.dialect.HSQLDialect; import org.hsqldb.Database; import org.hsqldb.DatabaseManager; import org.springframework.jdbc.support.lob.DefaultLobHandler; import org.springframework.jdbc.support.lob.LobHandler; import com.opengamma.elsql.ElSqlConfig; /** * Database dialect for HSQL databases. * <p> * This contains any HSQL specific SQL and is tested for version 2.2.5. */ public class HSQLDbDialect extends DbDialect { /** * Helper can be treated as a singleton. */ public static final HSQLDbDialect INSTANCE = new HSQLDbDialect(); /** * Restrictive constructor. */ public HSQLDbDialect() { } //------------------------------------------------------------------------- @Override public Class<? extends Driver> getJDBCDriverClass() { return org.hsqldb.jdbcDriver.class; } @Override protected Dialect createHibernateDialect() { return new HSQLDialect(); } @Override protected ElSqlConfig createElSqlConfig() { return ElSqlConfig.HSQL; } //------------------------------------------------------------------------- @Override public String sqlNextSequenceValueSelect(final String sequenceName) { return "CALL NEXT VALUE FOR " + sequenceName; } @Override public String sqlSelectNow() { return "SELECT * FROM (VALUES(current_timestamp)) AS V(NOW_TIMESTAMP)"; } //------------------------------------------------------------------------- @Override public LobHandler getLobHandler() { DefaultLobHandler handler = new DefaultLobHandler(); handler.setWrapAsLob(true); return handler; } /** * Returns the prefix with the correct wildcard search type. * Returns 'prefix LIKE paramName ' if there are wildcards, * 'prefix = paramName ' if no wildcards and '' if null. * The prefix is normally 'AND columnName ' or 'OR columnName '. * * @param prefix the prefix such as 'AND columnName ', not null * @param paramName the parameter name normally prefixed by colon, not null * @param value the string value, may be null * @return the SQL fragment, not null */ public String sqlWildcardQuery(final String prefix, final String paramName, final String value) { if (value == null) { return ""; } else if (isWildcard(value)) { return prefix + "LIKE " + paramName + " ESCAPE '\\' "; } else { return prefix + "= " + paramName + ' '; } } //------------------------------------------------------------------------- /** * Closes the HSQL database, initiating a shutdown. */ @Override public void close() { DatabaseManager.closeDatabases(Database.CLOSEMODE_NORMAL); } }