@@ -28,13 +28,14 @@ private DatabaseAccessorFactory() {
2828 }
2929
3030
31- public static DatabaseAccessor getAccessor (DatabaseType dbType ) {
31+ public static DatabaseAccessor getAccessor (DatabaseType dbType , String driverClass ) {
3232
3333 DatabaseAccessor accessor = null ;
3434 switch (dbType ) {
3535 case MYSQL :
3636 accessor = new MySqlDatabaseAccessor ();
3737 break ;
38+
3839 case JETHRO_DATA :
3940 accessor = new JethroDatabaseAccessor ();
4041 break ;
@@ -63,6 +64,26 @@ public static DatabaseAccessor getAccessor(DatabaseType dbType) {
6364 accessor = new DerbyDatabaseAccessor ();
6465 break ;
6566
67+ case METASTORE :
68+ // For metastore, we infer the accessor from the jdbc driver string.
69+ // TODO: We could also make a call to get the metadata from the connection
70+ // so we could obtain the database product. However, it seems an
71+ // overkill given that the metastore supported RDBMSs is a
72+ // well-defined set.
73+ if (driverClass .contains ("MYSQL" )) {
74+ accessor = new MySqlDatabaseAccessor ();
75+ } else if (driverClass .contains ("POSTGRESQL" )) {
76+ accessor = new PostgresDatabaseAccessor ();
77+ } else if (driverClass .contains ("ORACLE" )) {
78+ accessor = new OracleDatabaseAccessor ();
79+ } else if (driverClass .contains ("SQLSERVER" )) {
80+ accessor = new MsSqlDatabaseAccessor ();
81+ } else {
82+ // default
83+ accessor = new GenericJdbcDatabaseAccessor ();
84+ }
85+ break ;
86+
6687 default :
6788 accessor = new GenericJdbcDatabaseAccessor ();
6889 break ;
@@ -75,7 +96,9 @@ public static DatabaseAccessor getAccessor(DatabaseType dbType) {
7596 public static DatabaseAccessor getAccessor (Configuration conf ) {
7697 DatabaseType dbType = DatabaseType .valueOf (
7798 conf .get (JdbcStorageConfig .DATABASE_TYPE .getPropertyName ()).toUpperCase ());
78- return getAccessor (dbType );
99+ String driverClass =
100+ conf .get (JdbcStorageConfig .JDBC_DRIVER_CLASS .getPropertyName ()).toUpperCase ();
101+ return getAccessor (dbType , driverClass );
79102 }
80103
81104}
0 commit comments