001/** 002 * 003 * Copyright (c) 2014, the Railo Company Ltd. All rights reserved. 004 * 005 * This library is free software; you can redistribute it and/or 006 * modify it under the terms of the GNU Lesser General Public 007 * License as published by the Free Software Foundation; either 008 * version 2.1 of the License, or (at your option) any later version. 009 * 010 * This library is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 013 * Lesser General Public License for more details. 014 * 015 * You should have received a copy of the GNU Lesser General Public 016 * License along with this library. If not, see <http://www.gnu.org/licenses/>. 017 * 018 **/ 019package lucee.runtime.orm.hibernate; 020 021import java.util.Iterator; 022import java.util.Map; 023import java.util.Map.Entry; 024 025import lucee.loader.util.Util; 026import lucee.runtime.db.DataSource; 027import lucee.runtime.type.Struct; 028 029public class Dialect { 030 private static final char CHAR_EGU = (char)233; 031 private static Struct dialects=CommonUtil.createStruct(); 032 private static Struct dialects2=CommonUtil.createStruct(); 033 034 static { 035 // if this list change, also update list in web-cfmtaglibrary_1 for "application-ormsettings-dialect" 036 dialects.setEL("Cache71", org.hibernate.dialect.Cache71Dialect.class.getName()); 037 dialects.setEL("Cach"+CHAR_EGU+" 2007.1", org.hibernate.dialect.Cache71Dialect.class.getName()); 038 dialects.setEL("Cache 2007.1", org.hibernate.dialect.Cache71Dialect.class.getName()); 039 040 dialects.setEL("DataDirectOracle9", org.hibernate.dialect.DataDirectOracle9Dialect.class.getName()); 041 042 043 dialects.setEL("DB2390", org.hibernate.dialect.DB2390Dialect.class.getName()); 044 dialects.setEL("DB2/390", org.hibernate.dialect.DB2390Dialect.class.getName()); 045 dialects.setEL("DB2OS390", org.hibernate.dialect.DB2390Dialect.class.getName()); 046 dialects.setEL("DB2400", org.hibernate.dialect.DB2400Dialect.class.getName()); 047 dialects.setEL("DB2/400", org.hibernate.dialect.DB2400Dialect.class.getName()); 048 dialects.setEL("DB2AS400", org.hibernate.dialect.DB2400Dialect.class.getName()); 049 dialects.setEL("DB2", org.hibernate.dialect.DB2Dialect.class.getName()); 050 dialects.setEL("com.ddtek.jdbc.db2.DB2Driver", org.hibernate.dialect.DB2Dialect.class.getName()); 051 052 dialects.setEL("Derby", org.hibernate.dialect.DerbyDialect.class.getName()); 053 dialects.setEL("Firebird", org.hibernate.dialect.FirebirdDialect.class.getName()); 054 dialects.setEL("org.firebirdsql.jdbc.FBDriver", org.hibernate.dialect.FirebirdDialect.class.getName()); 055 dialects.setEL("FrontBase", org.hibernate.dialect.FrontBaseDialect.class.getName()); 056 057 dialects.setEL("H2", org.hibernate.dialect.H2Dialect.class.getName()); 058 dialects.setEL("org.h2.Driver", org.hibernate.dialect.H2Dialect.class.getName()); 059 dialects.setEL("H2DB", org.hibernate.dialect.H2Dialect.class.getName()); 060 dialects.setEL("HSQL", org.hibernate.dialect.HSQLDialect.class.getName()); 061 dialects.setEL("HSQLDB", org.hibernate.dialect.HSQLDialect.class.getName()); 062 dialects.setEL("org.hsqldb.jdbcDriver", org.hibernate.dialect.HSQLDialect.class.getName()); 063 064 dialects.setEL("Informix", org.hibernate.dialect.InformixDialect.class.getName()); 065 dialects.setEL("Ingres", org.hibernate.dialect.IngresDialect.class.getName()); 066 dialects.setEL("Interbase", org.hibernate.dialect.InterbaseDialect.class.getName()); 067 dialects.setEL("JDataStore", org.hibernate.dialect.JDataStoreDialect.class.getName()); 068 dialects.setEL("Mckoi", org.hibernate.dialect.MckoiDialect.class.getName()); 069 dialects.setEL("MckoiSQL", org.hibernate.dialect.MckoiDialect.class.getName()); 070 dialects.setEL("Mimer", org.hibernate.dialect.MimerSQLDialect.class.getName()); 071 dialects.setEL("MimerSQL", org.hibernate.dialect.MimerSQLDialect.class.getName()); 072 073 dialects.setEL("MySQL5", org.hibernate.dialect.MySQL5Dialect.class.getName()); 074 dialects.setEL("MySQL5InnoDB", org.hibernate.dialect.MySQL5InnoDBDialect.class.getName()); 075 dialects.setEL("MySQL5/InnoDB", org.hibernate.dialect.MySQL5InnoDBDialect.class.getName()); 076 dialects.setEL("MySQL", org.hibernate.dialect.MySQLDialect.class.getName()); 077 dialects.setEL("org.gjt.mm.mysql.Driver", org.hibernate.dialect.MySQLDialect.class.getName()); 078 dialects.setEL("MySQLInnoDB", org.hibernate.dialect.MySQLInnoDBDialect.class.getName()); 079 dialects.setEL("MySQL/InnoDB", org.hibernate.dialect.MySQLInnoDBDialect.class.getName()); 080 dialects.setEL("MySQLwithInnoDB", org.hibernate.dialect.MySQLInnoDBDialect.class.getName()); 081 dialects.setEL("MySQLMyISAM", org.hibernate.dialect.MySQLMyISAMDialect.class.getName()); 082 dialects.setEL("MySQL/MyISAM", org.hibernate.dialect.MySQLMyISAMDialect.class.getName()); 083 dialects.setEL("MySQLwithMyISAM", org.hibernate.dialect.MySQLMyISAMDialect.class.getName()); 084 085 dialects.setEL("Oracle10g", org.hibernate.dialect.Oracle10gDialect.class.getName()); 086 dialects.setEL("Oracle8i", org.hibernate.dialect.Oracle8iDialect.class.getName()); 087 dialects.setEL("Oracle9", org.hibernate.dialect.Oracle9Dialect.class.getName()); 088 dialects.setEL("Oracle9i", org.hibernate.dialect.Oracle9iDialect.class.getName()); 089 dialects.setEL("Oracle", org.hibernate.dialect.OracleDialect.class.getName()); 090 dialects.setEL("oracle.jdbc.driver.OracleDriver", org.hibernate.dialect.OracleDialect.class.getName()); 091 dialects.setEL("Pointbase", org.hibernate.dialect.PointbaseDialect.class.getName()); 092 dialects.setEL("PostgresPlus", org.hibernate.dialect.PostgresPlusDialect.class.getName()); 093 dialects.setEL("PostgreSQL", org.hibernate.dialect.PostgreSQLDialect.class.getName()); 094 dialects.setEL("org.postgresql.Driver", org.hibernate.dialect.PostgreSQLDialect.class.getName()); 095 dialects.setEL("Progress", org.hibernate.dialect.ProgressDialect.class.getName()); 096 097 dialects.setEL("SAPDB", org.hibernate.dialect.SAPDBDialect.class.getName()); 098 099 dialects.setEL("SQLServer", org.hibernate.dialect.SQLServerDialect.class.getName()); 100 dialects.setEL("MSSQL", org.hibernate.dialect.SQLServerDialect.class.getName()); 101 dialects.setEL("MicrosoftSQLServer", org.hibernate.dialect.SQLServerDialect.class.getName()); 102 dialects.setEL("com.microsoft.jdbc.sqlserver.SQLServerDriver", org.hibernate.dialect.SQLServerDialect.class.getName()); 103 104 dialects.setEL("Sybase11", org.hibernate.dialect.Sybase11Dialect.class.getName()); 105 dialects.setEL("SybaseAnywhere", org.hibernate.dialect.SybaseAnywhereDialect.class.getName()); 106 dialects.setEL("SybaseASE15", org.hibernate.dialect.SybaseASE15Dialect.class.getName()); 107 dialects.setEL("Sybase", org.hibernate.dialect.SybaseDialect.class.getName()); 108 109 Iterator it = dialects.entrySet().iterator(); 110 String value; 111 Map.Entry entry; 112 while(it.hasNext()){ 113 entry=(Entry) it.next(); 114 value=(String) entry.getValue(); 115 116 dialects2.setEL(CommonUtil.createKey(value), value); 117 dialects2.setEL(CommonUtil.createKey(CommonUtil.last(value, '.')), value); 118 } 119 120 } 121 122 /** 123 * return a SQL dialect that match the given Name 124 * @param name 125 * @return 126 */ 127 public static String getDialect(DataSource ds){ 128 String name=ds.getClazz().getName(); 129 if("net.sourceforge.jtds.jdbc.Driver".equalsIgnoreCase(name)){ 130 String dsn=ds.getDsnTranslated(); 131 if(dsn.toLowerCase().indexOf("sybase")!=-1) 132 return getDialect("Sybase"); 133 return getDialect("SQLServer"); 134 } 135 return getDialect(name); 136 } 137 138 public static String getDialect(String name){ 139 if(Util.isEmpty(name))return null; 140 String dialect= (String) dialects.get(CommonUtil.createKey(name), null); 141 if(dialect==null)dialect= (String) dialects2.get(CommonUtil.createKey(name), null); 142 return dialect; 143 } 144 145 public static Iterator<String> getDialectNames(){ 146 return dialects.keysAsStringIterator(); 147 } 148}