/**
* 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.SQLServerDialect;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.elsql.ElSqlConfig;
import com.opengamma.util.paging.PagingRequest;
/**
* Database dialect for SQL Server databases.
* <p>
* This contains any SQL Server specific SQL.
*/
public class SqlServer2008DbDialect extends DbDialect {
/**
* Helper can be treated as a singleton.
*/
public static final SqlServer2008DbDialect INSTANCE = new SqlServer2008DbDialect();
/**
* Restrictive constructor.
*/
public SqlServer2008DbDialect() {
}
//-------------------------------------------------------------------------
@SuppressWarnings("unchecked")
@Override
public Class<? extends Driver> getJDBCDriverClass() {
try {
return (Class<? extends Driver>) Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException ex) {
throw new OpenGammaRuntimeException("Could not load the Microsoft JDBC driver: " + ex.getMessage());
}
// Use the MS driver...
// return com.microsoft.sqlserver.jdbc.SQLServerDriver.class;
// ...or the open-source driver (LGPLed)
// return net.sourceforge.jtds.jdbc.Driver.class;
}
@Override
protected Dialect createHibernateDialect() {
return new SQLServerDialect();
}
@Override
protected ElSqlConfig createElSqlConfig() {
return ElSqlConfig.SQL_SERVER_2008;
}
//-------------------------------------------------------------------------
@Override
public String sqlApplyPaging(final String sqlSelectFromWhere, final String sqlOrderBy, final PagingRequest paging) {
if (paging == null || paging.equals(PagingRequest.ALL) || paging.equals(PagingRequest.NONE)) {
return sqlSelectFromWhere + sqlOrderBy;
}
return ElSqlConfig.SQL_SERVER_2008.addPaging(sqlSelectFromWhere, paging.getFirstItem(), paging.getPagingSize()) +
sqlOrderBy;
}
@Override
public String sqlNextSequenceValueSelect(final String sequenceName) {
return
"DECLARE @NewSeqValue INT; SET NOCOUNT ON; INSERT INTO " + sequenceName +
" (SeqVal) VALUES ('a'); SET @NewSeqValue = scope_identity(); DELETE FROM " + sequenceName +
" WITH (READPAST); SELECT nextval = @NewSeqValue; SET NOCOUNT OFF";
}
@Override
public String sqlNextSequenceValueInline(final String sequenceName) {
throw new OpenGammaRuntimeException("sqlNextSequenceValueInline is not currently supported in the SQL Server 2008 dialect");
}
}