/* * Hibernate, Relational Persistence for Idiomatic Java * * Copyright (c) 2010, Red Hat Inc. or third-party contributors as * indicated by the @author tags or express copyright attribution * statements applied by the authors. All third-party contributions are * distributed under license by Red Hat Inc. * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.hibernate.dialect.resolver; import java.sql.DatabaseMetaData; import java.sql.SQLException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.hibernate.dialect.Dialect; import org.hibernate.dialect.HSQLDialect; import org.hibernate.dialect.H2Dialect; import org.hibernate.dialect.MySQLDialect; import org.hibernate.dialect.PostgreSQLDialect; import org.hibernate.dialect.DerbyDialect; import org.hibernate.dialect.Ingres10Dialect; import org.hibernate.dialect.Ingres9Dialect; import org.hibernate.dialect.IngresDialect; import org.hibernate.dialect.SQLServer2005Dialect; import org.hibernate.dialect.SQLServer2008Dialect; import org.hibernate.dialect.SQLServerDialect; import org.hibernate.dialect.InformixDialect; import org.hibernate.dialect.DB2Dialect; import org.hibernate.dialect.Oracle10gDialect; import org.hibernate.dialect.Oracle9iDialect; import org.hibernate.dialect.Oracle8iDialect; import org.hibernate.dialect.SybaseAnywhereDialect; import org.hibernate.dialect.SybaseASE15Dialect; /** * The standard Hibernate resolver. * * @author Steve Ebersole */ public class StandardDialectResolver extends AbstractDialectResolver{ private static final Logger log = LoggerFactory.getLogger( StandardDialectResolver.class ); protected Dialect resolveDialectInternal(DatabaseMetaData metaData) throws SQLException { String databaseName = metaData.getDatabaseProductName(); int databaseMajorVersion = metaData.getDatabaseMajorVersion(); if ( "HSQL Database Engine".equals( databaseName ) ) { return new HSQLDialect(); } if ( "H2".equals( databaseName ) ) { return new H2Dialect(); } if ( "MySQL".equals( databaseName ) ) { return new MySQLDialect(); } if ( "PostgreSQL".equals( databaseName ) ) { return new PostgreSQLDialect(); } if ( "Apache Derby".equals( databaseName ) ) { return new DerbyDialect(); } if ( "ingres".equalsIgnoreCase( databaseName ) ) { switch( databaseMajorVersion ) { case 9: int databaseMinorVersion = metaData.getDatabaseMinorVersion(); if (databaseMinorVersion > 2) { return new Ingres9Dialect(); } return new IngresDialect(); case 10: return new Ingres10Dialect(); default: log.warn( "Unknown Ingres major version [" + databaseMajorVersion + "] using Ingres 9.2 dialect" ); } return new IngresDialect(); } if ( databaseName.startsWith( "Microsoft SQL Server" ) ) { switch ( databaseMajorVersion ) { case 8: return new SQLServerDialect(); case 9: return new SQLServer2005Dialect(); case 10: return new SQLServer2008Dialect(); default: log.warn( "Unknown Microsoft SQL Server major version [" + databaseMajorVersion + "] using SQL Server 2000 dialect" ); } return new SQLServerDialect(); } if ( "Sybase SQL Server".equals( databaseName ) || "Adaptive Server Enterprise".equals( databaseName ) ) { return new SybaseASE15Dialect(); } if ( databaseName.startsWith( "Adaptive Server Anywhere" ) ) { return new SybaseAnywhereDialect(); } if ( "Informix Dynamic Server".equals( databaseName ) ) { return new InformixDialect(); } if ( databaseName.startsWith( "DB2/" ) ) { return new DB2Dialect(); } if ( "Oracle".equals( databaseName ) ) { switch ( databaseMajorVersion ) { case 11: return new Oracle10gDialect(); case 10: return new Oracle10gDialect(); case 9: return new Oracle9iDialect(); case 8: return new Oracle8iDialect(); default: log.warn( "unknown Oracle major version [" + databaseMajorVersion + "]" ); } } return null; } }