diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplatesRegistry.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplatesRegistry.java index 02cba4092..748a5d834 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplatesRegistry.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplatesRegistry.java @@ -21,24 +21,6 @@ import java.sql.SQLException; */ public class SQLTemplatesRegistry { - private final SQLTemplates generic = SQLTemplates.DEFAULT; - - 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 postgresql = new PostgreSQLTemplates(); - private final SQLTemplates sqlite = new SQLiteTemplates(); - private final SQLTemplates teradata = new TeradataTemplates(); - - private final SQLTemplates sqlserver = new SQLServerTemplates(); - private final SQLTemplates sqlserver2005 = new SQLServer2005Templates(); - private final SQLTemplates sqlserver2008 = new SQLServer2008Templates(); - private final SQLTemplates sqlserver2012 = new SQLServer2012Templates(); - /** * Get the SQLTemplates instance that matches best the SQL engine of the * given database metadata @@ -48,50 +30,55 @@ public class SQLTemplatesRegistry { * @throws SQLException */ public SQLTemplates getTemplates(DatabaseMetaData md) throws SQLException { + return getBuilder(md).build(); + } + + /** + * Get a SQLTemplates.Builder instance that matches best the SQL engine of the + * given database metadata + * + * @param md database metadata + * @return templates + * @throws SQLException + */ + public SQLTemplates.Builder getBuilder(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 postgresql; - } - if (name.equals("sqlite")) { - return sqlite; - } - if (name.startsWith("teradata")) { - return teradata; - } - - // sqlserver - if (name.equals("microsoft sql server")) { + return CUBRIDTemplates.builder(); + } else if (name.equals("apache derby")) { + return DerbyTemplates.builder(); + } else if (name.startsWith("firebird")) { + return FirebirdTemplates.builder(); + } else if (name.equals("h2")) { + return H2Templates.builder(); + } else if (name.equals("hsql")) { + return HSQLDBTemplates.builder(); + } else if (name.equals("mysql")) { + return MySQLTemplates.builder(); + } else if (name.equals("oracle")) { + return OracleTemplates.builder(); + } else if (name.equals("postgresql")) { + return PostgreSQLTemplates.builder(); + } else if (name.equals("sqlite")) { + return SQLiteTemplates.builder(); + } else if (name.startsWith("teradata")) { + return TeradataTemplates.builder(); + } else if (name.equals("microsoft sql server")) { switch (md.getDatabaseMajorVersion()) { case 12: - case 11: return sqlserver2012; - case 10: return sqlserver2008; - case 9: return sqlserver2005; - default: return sqlserver; + case 11: return SQLServer2012Templates.builder(); + case 10: return SQLServer2008Templates.builder(); + case 9: return SQLServer2005Templates.builder(); + default: return SQLServerTemplates.builder(); } + } else { + return new SQLTemplates.Builder() { + @Override + protected SQLTemplates build(char escape, boolean quote) { + return new SQLTemplates(Keywords.DEFAULT, "\"", escape, quote); + } + }; } - - return generic; } }