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}