public SQLTemplates.Builder getBuilder(DatabaseMetaData md) throws SQLException {
        String name = md.getDatabaseProductName().toLowerCase();
        if (name.equals("cubrid")) {
            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")) {
            return getMssqlSqlTemplates(md);
        } else {
            return new SQLTemplates.Builder() {
                @Override
                protected SQLTemplates build(char escape, boolean quote) {
                    return new SQLTemplates(Keywords.DEFAULT, "\"", escape, quote, false);
                }
            };
        }
    }
Get a SQLTemplates.Builder instance that matches best the SQL engine of the
given database metadata

@param md database metadata
@return templates
@throws SQLException
querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplatesRegistry.java