package com.farata.cleardatabuilder.extjs.util;
import org.hibernate.dialect.DB2Dialect;
import org.hibernate.dialect.DerbyDialect;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.H2Dialect;
import org.hibernate.dialect.HSQLDialect;
import org.hibernate.dialect.InformixDialect;
import org.hibernate.dialect.Ingres10Dialect;
import org.hibernate.dialect.Ingres9Dialect;
import org.hibernate.dialect.IngresDialect;
import org.hibernate.dialect.MySQLDialect;
import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.dialect.Oracle8iDialect;
import org.hibernate.dialect.Oracle9iDialect;
import org.hibernate.dialect.PostgreSQLDialect;
import org.hibernate.dialect.SQLServerDialect;
import org.hibernate.dialect.SybaseASE15Dialect;
import org.hibernate.dialect.SybaseAnywhereDialect;
public class HibernateDialectResolver {
public static Dialect resolveDialect(String databaseName,
int databaseMajorVersion, int databaseMinorVersion) {
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:
if (databaseMinorVersion > 2)
return new Ingres9Dialect();
else
return new IngresDialect();
case 10:
return new Ingres10Dialect();
}
return new IngresDialect();
}
if (databaseName.startsWith("Microsoft SQL Server"))
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:
break;
}
return null;
}
public static Dialect resolveDialect(String dbType, String dbVersion) {
int databaseMajorVersion = getDatabaseMajorVersion(dbVersion);
int databaseMinorVersion = getDatabaseMinorVersion(dbVersion);
return resolveDialect(dbType, databaseMajorVersion,
databaseMinorVersion);
}
private static int getDatabaseMinorVersion(String dbVersion) {
if (dbVersion != null) {
String[] arr = dbVersion.split(".");
try {
return Integer.valueOf(arr[arr.length - 1]);
} catch (Throwable e) {
}
}
return 0;
}
private static int getDatabaseMajorVersion(String dbVersion) {
if (dbVersion != null) {
String[] arr = dbVersion.split(".");
try {
return Integer.valueOf(arr[0]);
} catch (Throwable e) {
}
}
return 0;
}
}