mirror of https://github.com/apache/openjpa.git
OPENJPA-266 load platform specific DBDictionary from dbdictionaryPlugin
Help committing Catalina's DBDictionaryFactory.patch git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@561413 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a1d28857fa
commit
6128ddbc2d
|
@ -29,6 +29,7 @@ import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
|
import org.apache.openjpa.jdbc.conf.JDBCConfiguration;
|
||||||
import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl;
|
import org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl;
|
||||||
import org.apache.openjpa.lib.conf.Configurations;
|
import org.apache.openjpa.lib.conf.Configurations;
|
||||||
|
import org.apache.openjpa.lib.conf.PluginValue;
|
||||||
import org.apache.openjpa.lib.log.Log;
|
import org.apache.openjpa.lib.log.Log;
|
||||||
import org.apache.openjpa.lib.util.J2DoPrivHelper;
|
import org.apache.openjpa.lib.util.J2DoPrivHelper;
|
||||||
import org.apache.openjpa.lib.util.Localizer;
|
import org.apache.openjpa.lib.util.Localizer;
|
||||||
|
@ -54,12 +55,6 @@ import org.apache.openjpa.util.UserException;
|
||||||
*/
|
*/
|
||||||
public class DBDictionaryFactory {
|
public class DBDictionaryFactory {
|
||||||
|
|
||||||
// pcl: can't use these classes directly because they rely on native libs
|
|
||||||
private static final String ORACLE_DICT_NAME =
|
|
||||||
"org.apache.openjpa.jdbc.sql.OracleDictionary";
|
|
||||||
private static final String HSQL_DICT_NAME =
|
|
||||||
"org.apache.openjpa.jdbc.sql.HSQLDictionary";
|
|
||||||
|
|
||||||
private static final Localizer _loc = Localizer.forPackage
|
private static final Localizer _loc = Localizer.forPackage
|
||||||
(DBDictionaryFactory.class);
|
(DBDictionaryFactory.class);
|
||||||
|
|
||||||
|
@ -171,31 +166,35 @@ public class DBDictionaryFactory {
|
||||||
/**
|
/**
|
||||||
* Guess the dictionary class name to use based on the product string.
|
* Guess the dictionary class name to use based on the product string.
|
||||||
*/
|
*/
|
||||||
private static String dictionaryClassForString(String prod, JDBCConfiguration conf) {
|
private static String dictionaryClassForString(String prod
|
||||||
|
, JDBCConfiguration conf) {
|
||||||
if (StringUtils.isEmpty(prod))
|
if (StringUtils.isEmpty(prod))
|
||||||
return null;
|
return null;
|
||||||
prod = prod.toLowerCase();
|
prod = prod.toLowerCase();
|
||||||
|
|
||||||
|
PluginValue dbdictionaryPlugin = ((JDBCConfigurationImpl) conf)
|
||||||
|
.dbdictionaryPlugin;
|
||||||
|
|
||||||
if (prod.indexOf("oracle") != -1)
|
if (prod.indexOf("oracle") != -1)
|
||||||
return getDBDictionaryPluginValue(conf, "oracle");
|
return dbdictionaryPlugin.unalias("oracle");
|
||||||
if (prod.indexOf("sqlserver") != -1)
|
if (prod.indexOf("sqlserver") != -1)
|
||||||
return getDBDictionaryPluginValue(conf, "sqlserver");
|
return dbdictionaryPlugin.unalias("sqlserver");
|
||||||
if (prod.indexOf("jsqlconnect") != -1)
|
if (prod.indexOf("jsqlconnect") != -1)
|
||||||
return SQLServerDictionary.class.getName();
|
return dbdictionaryPlugin.unalias("sqlserver");
|
||||||
if (prod.indexOf("mysql") != -1)
|
if (prod.indexOf("mysql") != -1)
|
||||||
return MySQLDictionary.class.getName();
|
return dbdictionaryPlugin.unalias("mysql");
|
||||||
if (prod.indexOf("postgres") != -1)
|
if (prod.indexOf("postgres") != -1)
|
||||||
return PostgresDictionary.class.getName();
|
return dbdictionaryPlugin.unalias("postgres");
|
||||||
if (prod.indexOf("sybase") != -1)
|
if (prod.indexOf("sybase") != -1)
|
||||||
return SybaseDictionary.class.getName();
|
return dbdictionaryPlugin.unalias("sybase");
|
||||||
if (prod.indexOf("adaptive server") != -1)
|
if (prod.indexOf("adaptive server") != -1)
|
||||||
return SybaseDictionary.class.getName();
|
return dbdictionaryPlugin.unalias("sybase");
|
||||||
if (prod.indexOf("informix") != -1)
|
if (prod.indexOf("informix") != -1)
|
||||||
return InformixDictionary.class.getName();
|
return dbdictionaryPlugin.unalias("informix");
|
||||||
if (prod.indexOf("hsql") != -1)
|
if (prod.indexOf("hsql") != -1)
|
||||||
return HSQL_DICT_NAME;
|
return dbdictionaryPlugin.unalias("hsql");
|
||||||
if (prod.indexOf("foxpro") != -1)
|
if (prod.indexOf("foxpro") != -1)
|
||||||
return FoxProDictionary.class.getName();
|
return dbdictionaryPlugin.unalias("foxpro");
|
||||||
if (prod.indexOf("interbase") != -1)
|
if (prod.indexOf("interbase") != -1)
|
||||||
return InterbaseDictionary.class.getName();
|
return InterbaseDictionary.class.getName();
|
||||||
if (prod.indexOf("jdatastore") != -1)
|
if (prod.indexOf("jdatastore") != -1)
|
||||||
|
@ -203,17 +202,17 @@ public class DBDictionaryFactory {
|
||||||
if (prod.indexOf("borland") != -1)
|
if (prod.indexOf("borland") != -1)
|
||||||
return JDataStoreDictionary.class.getName();
|
return JDataStoreDictionary.class.getName();
|
||||||
if (prod.indexOf("access") != -1)
|
if (prod.indexOf("access") != -1)
|
||||||
return AccessDictionary.class.getName();
|
return dbdictionaryPlugin.unalias("access");
|
||||||
if (prod.indexOf("pointbase") != -1)
|
if (prod.indexOf("pointbase") != -1)
|
||||||
return PointbaseDictionary.class.getName();
|
return dbdictionaryPlugin.unalias("pointbase");
|
||||||
if (prod.indexOf("empress") != -1)
|
if (prod.indexOf("empress") != -1)
|
||||||
return EmpressDictionary.class.getName();
|
return dbdictionaryPlugin.unalias("empress");
|
||||||
if (prod.indexOf("firebird") != -1)
|
if (prod.indexOf("firebird") != -1)
|
||||||
return FirebirdDictionary.class.getName();
|
return FirebirdDictionary.class.getName();
|
||||||
if (prod.indexOf("cache") != -1)
|
if (prod.indexOf("cache") != -1)
|
||||||
return CacheDictionary.class.getName();
|
return CacheDictionary.class.getName();
|
||||||
if (prod.indexOf("derby") != -1)
|
if (prod.indexOf("derby") != -1)
|
||||||
return DerbyDictionary.class.getName();
|
return dbdictionaryPlugin.unalias("derby");
|
||||||
// test h2 in a special way, because there's a decent chance the string
|
// test h2 in a special way, because there's a decent chance the string
|
||||||
// h2 could appear in the URL of another database
|
// h2 could appear in the URL of another database
|
||||||
if (prod.indexOf("jdbc:h2:") != -1)
|
if (prod.indexOf("jdbc:h2:") != -1)
|
||||||
|
@ -224,7 +223,7 @@ public class DBDictionaryFactory {
|
||||||
// appear in the URL of another database (like if the db is named
|
// appear in the URL of another database (like if the db is named
|
||||||
// "testdb2" or something)
|
// "testdb2" or something)
|
||||||
if (prod.indexOf("db2") != -1 || prod.indexOf("as400") != -1)
|
if (prod.indexOf("db2") != -1 || prod.indexOf("as400") != -1)
|
||||||
return getDBDictionaryPluginValue(conf, "db2");
|
return dbdictionaryPlugin.unalias("db2");
|
||||||
|
|
||||||
// known dbs that we don't support
|
// known dbs that we don't support
|
||||||
if (prod.indexOf("cloudscape") != -1)
|
if (prod.indexOf("cloudscape") != -1)
|
||||||
|
@ -236,6 +235,10 @@ public class DBDictionaryFactory {
|
||||||
if (prod.indexOf("idb") != -1) // instantdb
|
if (prod.indexOf("idb") != -1) // instantdb
|
||||||
return DBDictionary.class.getName();
|
return DBDictionary.class.getName();
|
||||||
|
|
||||||
|
String prodClassName = dbdictionaryPlugin.unalias(prod);
|
||||||
|
if (!StringUtils.equals(prod, prodClassName))
|
||||||
|
return prodClassName;
|
||||||
|
|
||||||
// give up
|
// give up
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -609,15 +612,4 @@ public class DBDictionaryFactory {
|
||||||
|
|
||||||
return buf.toString();
|
return buf.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getDBDictionaryPluginValue(JDBCConfiguration conf
|
|
||||||
, String alias) {
|
|
||||||
String[] aliases = ((JDBCConfigurationImpl) conf)
|
|
||||||
.dbdictionaryPlugin.getAliases();
|
|
||||||
for (int i = 0; i < aliases.length; i++) {
|
|
||||||
if (StringUtils.equals(alias, aliases[i]))
|
|
||||||
return aliases[++i];
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue