001    package railo.runtime.orm.hibernate;
002    
003    import java.util.Iterator;
004    import java.util.Map;
005    import java.util.Map.Entry;
006    
007    import railo.commons.lang.StringUtil;
008    import railo.runtime.db.DataSource;
009    import railo.runtime.type.KeyImpl;
010    import railo.runtime.type.List;
011    import railo.runtime.type.Struct;
012    import railo.runtime.type.StructImpl;
013    
014    public class Dialect {
015            private static Struct dialects=new StructImpl();
016            private static Struct dialects2=new StructImpl();
017            
018            static {
019                    // if this list change, also update list in web-cfmtaglibrary_1 for "application-ormsettings-dialect" 
020                    dialects.setEL("Cache71", org.hibernate.dialect.Cache71Dialect.class.getName());
021                    dialects.setEL("Cach� 2007.1", org.hibernate.dialect.Cache71Dialect.class.getName());
022                    dialects.setEL("Cache 2007.1", org.hibernate.dialect.Cache71Dialect.class.getName());
023                    
024                    dialects.setEL("DataDirectOracle9", org.hibernate.dialect.DataDirectOracle9Dialect.class.getName());
025    
026                    
027                    dialects.setEL("DB2390", org.hibernate.dialect.DB2390Dialect.class.getName());
028                dialects.setEL("DB2/390", org.hibernate.dialect.DB2390Dialect.class.getName());
029                dialects.setEL("DB2OS390", org.hibernate.dialect.DB2390Dialect.class.getName());
030                    dialects.setEL("DB2400", org.hibernate.dialect.DB2400Dialect.class.getName());
031                    dialects.setEL("DB2/400", org.hibernate.dialect.DB2400Dialect.class.getName());
032                    dialects.setEL("DB2AS400", org.hibernate.dialect.DB2400Dialect.class.getName());
033                    dialects.setEL("DB2", org.hibernate.dialect.DB2Dialect.class.getName());
034                    dialects.setEL("com.ddtek.jdbc.db2.DB2Driver", org.hibernate.dialect.DB2Dialect.class.getName());
035                    
036                    dialects.setEL("Derby", org.hibernate.dialect.DerbyDialect.class.getName());
037                    dialects.setEL("Firebird", org.hibernate.dialect.FirebirdDialect.class.getName());
038                    dialects.setEL("org.firebirdsql.jdbc.FBDriver", org.hibernate.dialect.FirebirdDialect.class.getName());
039                    dialects.setEL("FrontBase", org.hibernate.dialect.FrontBaseDialect.class.getName());
040                    
041                    dialects.setEL("H2", org.hibernate.dialect.H2Dialect.class.getName());
042                    dialects.setEL("org.h2.Driver", org.hibernate.dialect.H2Dialect.class.getName());
043                    dialects.setEL("H2DB", org.hibernate.dialect.H2Dialect.class.getName());
044                    dialects.setEL("HSQL", org.hibernate.dialect.HSQLDialect.class.getName());
045                    dialects.setEL("HSQLDB", org.hibernate.dialect.HSQLDialect.class.getName());
046                    dialects.setEL("org.hsqldb.jdbcDriver", org.hibernate.dialect.HSQLDialect.class.getName());
047                    
048                    dialects.setEL("Informix", org.hibernate.dialect.InformixDialect.class.getName());
049                    dialects.setEL("Ingres", org.hibernate.dialect.IngresDialect.class.getName());
050                    dialects.setEL("Interbase", org.hibernate.dialect.InterbaseDialect.class.getName());
051                    dialects.setEL("JDataStore", org.hibernate.dialect.JDataStoreDialect.class.getName());
052                    dialects.setEL("Mckoi", org.hibernate.dialect.MckoiDialect.class.getName());
053                    dialects.setEL("MckoiSQL", org.hibernate.dialect.MckoiDialect.class.getName());
054                    dialects.setEL("Mimer", org.hibernate.dialect.MimerSQLDialect.class.getName());
055                    dialects.setEL("MimerSQL", org.hibernate.dialect.MimerSQLDialect.class.getName());
056                    
057                    dialects.setEL("MySQL5", org.hibernate.dialect.MySQL5Dialect.class.getName());
058                    dialects.setEL("MySQL5InnoDB", org.hibernate.dialect.MySQL5InnoDBDialect.class.getName());
059                    dialects.setEL("MySQL5/InnoDB", org.hibernate.dialect.MySQL5InnoDBDialect.class.getName());
060                    dialects.setEL("MySQL", org.hibernate.dialect.MySQLDialect.class.getName());
061                    dialects.setEL("org.gjt.mm.mysql.Driver", org.hibernate.dialect.MySQLDialect.class.getName());
062                    dialects.setEL("MySQLInnoDB", org.hibernate.dialect.MySQLInnoDBDialect.class.getName());
063                    dialects.setEL("MySQL/InnoDB", org.hibernate.dialect.MySQLInnoDBDialect.class.getName());
064                    dialects.setEL("MySQLwithInnoDB", org.hibernate.dialect.MySQLInnoDBDialect.class.getName());
065                    dialects.setEL("MySQLMyISAM", org.hibernate.dialect.MySQLMyISAMDialect.class.getName());
066                    dialects.setEL("MySQL/MyISAM", org.hibernate.dialect.MySQLMyISAMDialect.class.getName());
067                    dialects.setEL("MySQLwithMyISAM", org.hibernate.dialect.MySQLMyISAMDialect.class.getName());
068                    
069                    dialects.setEL("Oracle10g", org.hibernate.dialect.Oracle10gDialect.class.getName());
070                    dialects.setEL("Oracle8i", org.hibernate.dialect.Oracle8iDialect.class.getName());
071                    dialects.setEL("Oracle9", org.hibernate.dialect.Oracle9Dialect.class.getName());
072                    dialects.setEL("Oracle9i", org.hibernate.dialect.Oracle9iDialect.class.getName());
073                    dialects.setEL("Oracle", org.hibernate.dialect.OracleDialect.class.getName());
074                    dialects.setEL("oracle.jdbc.driver.OracleDriver", org.hibernate.dialect.OracleDialect.class.getName());
075                    dialects.setEL("Pointbase", org.hibernate.dialect.PointbaseDialect.class.getName());
076                    dialects.setEL("PostgresPlus", org.hibernate.dialect.PostgresPlusDialect.class.getName());
077                    dialects.setEL("PostgreSQL", org.hibernate.dialect.PostgreSQLDialect.class.getName());
078                    dialects.setEL("org.postgresql.Driver", org.hibernate.dialect.PostgreSQLDialect.class.getName());
079                    dialects.setEL("Progress", org.hibernate.dialect.ProgressDialect.class.getName());
080                    
081                    dialects.setEL("SAPDB", org.hibernate.dialect.SAPDBDialect.class.getName());
082                    
083                    dialects.setEL("SQLServer", org.hibernate.dialect.SQLServerDialect.class.getName());
084                    dialects.setEL("MSSQL", org.hibernate.dialect.SQLServerDialect.class.getName());
085                    dialects.setEL("MicrosoftSQLServer", org.hibernate.dialect.SQLServerDialect.class.getName());
086                    dialects.setEL("com.microsoft.jdbc.sqlserver.SQLServerDriver", org.hibernate.dialect.SQLServerDialect.class.getName());
087                    
088                    dialects.setEL("Sybase11", org.hibernate.dialect.Sybase11Dialect.class.getName());
089                    dialects.setEL("SybaseAnywhere", org.hibernate.dialect.SybaseAnywhereDialect.class.getName());
090                    dialects.setEL("SybaseASE15", org.hibernate.dialect.SybaseASE15Dialect.class.getName());
091                    dialects.setEL("Sybase", org.hibernate.dialect.SybaseDialect.class.getName());
092                    
093                    Iterator it = dialects.entrySet().iterator();
094                    String value;
095                    Map.Entry entry;
096                    while(it.hasNext()){
097                            entry=(Entry) it.next();
098                            value=(String) entry.getValue();
099    
100                            dialects2.setEL(KeyImpl.init(value), value);
101                            dialects2.setEL(KeyImpl.init(List.last(value, ".")), value);
102                    }
103                    
104        }
105            
106            /**
107             * return a SQL dialect that match the given Name
108             * @param name
109             * @return
110             */
111            public static String getDialect(DataSource ds){
112                    String name=ds.getClazz().getName();
113                    if("net.sourceforge.jtds.jdbc.Driver".equals(name)){
114                            String dsn=ds.getDsnTranslated();
115                            if(StringUtil.indexOfIgnoreCase(dsn, "sybase")!=-1)
116                                    return getDialect("SQLServer");
117                    }
118                    return getDialect(name);
119            }
120    
121            public static String getDialect(String name){
122                    if(StringUtil.isEmpty(name))return null;
123                    String dialect= (String) dialects.get(KeyImpl.init(name), null);
124                    if(dialect==null)dialect= (String) dialects2.get(KeyImpl.init(name), null);
125                    return dialect;
126            }
127            
128            public static String[] listDialectNames(){
129                    return dialects.keysAsString();
130            }
131            
132            /*public static void main(String[] args) {
133                    String[] arr = listDialectNames();
134                    Arrays.sort(arr);
135                    print.o(List.arrayToList(arr, ", "));
136            }*/
137    }