Merge pull request #916 from querydsl/templates-registry

Improve SQLTemplatesRegistry contents
This commit is contained in:
Timo Westkämper 2014-09-01 20:25:16 +03:00
commit f69f204ca9
2 changed files with 82 additions and 25 deletions

View File

@ -2,41 +2,55 @@ package com.mysema.query.sql;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Map;
import com.google.common.collect.Maps;
/**
*
*/
public class SQLTemplatesRegistry {
private final Map<String, SQLTemplates> registry = Maps.newHashMap();
private final SQLTemplates generic = SQLTemplates.DEFAULT;
public SQLTemplatesRegistry() {
registry.put("h2", new H2Templates());
registry.put("postgresql", new PostgresTemplates());
registry.put("oracle", new OracleTemplates());
registry.put("mysql", new MySQLTemplates());
registry.put("hsql", new HSQLDBTemplates());
registry.put("firebird", new FirebirdTemplates());
registry.put("sqlite", new SQLiteTemplates());
registry.put("apache", new DerbyTemplates());
// TODO SQLServer
// TODO Teradata
}
private final SQLTemplates cubrid = new CUBRIDTemplates();
private final SQLTemplates derby = new DerbyTemplates();
private final SQLTemplates firebird = new FirebirdTemplates();
private final SQLTemplates h2 = new H2Templates();
private final SQLTemplates hsqldb = new HSQLDBTemplates();
private final SQLTemplates mysql = new MySQLTemplates();
private final SQLTemplates oracle = new OracleTemplates();
private final SQLTemplates postgres = new PostgresTemplates();
private final SQLTemplates sqlite = new SQLiteTemplates();
private final SQLTemplates teradata = new TeradataTemplates();
public SQLTemplates getTemplates(DatabaseMetaData md) {
try {
String name = md.getDatabaseProductName();
int separator = name.indexOf(' ');
if (separator > -1) {
name = name.substring(0, separator);
private final SQLTemplates sqlserver = new SQLServerTemplates();
private final SQLTemplates sqlserver2005 = new SQLServer2005Templates();
private final SQLTemplates sqlserver2008 = new SQLServer2008Templates();
private final SQLTemplates sqlserver2012 = new SQLServer2012Templates();
public SQLTemplates getTemplates(DatabaseMetaData md) throws SQLException {
String name = md.getDatabaseProductName().toLowerCase();
if (name.equals("cubrid")) return cubrid;
if (name.equals("apache derby")) return derby;
if (name.startsWith("firebird")) return firebird;
if (name.equals("h2")) return h2;
if (name.equals("hsql")) return hsqldb;
if (name.equals("mysql")) return mysql;
if (name.equals("oracle")) return oracle;
if (name.equals("postgresql")) return postgres;
if (name.equals("sqlite")) return sqlite;
if (name.startsWith("teradata")) return teradata;
// sqlserver
if (name.equals("microsft sql server")) {
switch (md.getDatabaseMajorVersion()) {
case 12:
case 11: return sqlserver2012;
case 10: return sqlserver2008;
case 9: return sqlserver2005;
default: return sqlserver;
}
return registry.get(name.toLowerCase());
} catch (SQLException ex) {
throw new RuntimeException(ex.getMessage(), ex);
}
return generic;
}
}

View File

@ -0,0 +1,43 @@
package com.mysema.query.sql;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import com.mysema.query.Connections;
public class SQLTemplatesRegistryDump {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
Connections.initCubrid();
dump();
Connections.initDerby();
dump();
Connections.initFirebird();
dump();
Connections.initH2();
dump();
Connections.initHSQL();
dump();
Connections.initMySQL();
dump();
Connections.initOracle();
dump();
Connections.initPostgres();
dump();
Connections.initSQLite();
dump();
Connections.initSQLServer();
dump();
/*Connections.initTeradata();
dump();*/
}
private static void dump() throws SQLException {
DatabaseMetaData md = Connections.getConnection().getMetaData();
System.out.println(md.getDatabaseProductName());
System.out.println(md.getDatabaseMajorVersion());
System.out.println(md.getDatabaseMinorVersion());
System.out.println();
Connections.close();
}
}