Skip to content

Commit

Permalink
More unified place to look up DbType
Browse files Browse the repository at this point in the history
  • Loading branch information
brianbolt committed Nov 4, 2021
1 parent 7efb6d6 commit 82a70b8
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 26 deletions.
21 changes: 9 additions & 12 deletions src/main/java/com/labsynch/labseer/domain/LabelSequence.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,6 @@

import org.hibernate.Session;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.OracleDialect;
import org.hibernate.dialect.PostgreSQLDialect;
import org.hibernate.dialect.PostgreSQL9Dialect;
import org.hibernate.engine.jdbc.dialect.internal.StandardDialectResolver;
import org.hibernate.engine.jdbc.dialect.spi.DatabaseMetaDataDialectResolutionInfoAdapter;
import org.hibernate.engine.jdbc.dialect.spi.DialectResolver;
Expand All @@ -39,6 +36,8 @@

import com.labsynch.labseer.dto.AutoLabelDTO;
import com.labsynch.labseer.utils.ExcludeNulls;
import com.labsynch.labseer.utils.SimpleUtil;
import com.labsynch.labseer.utils.SimpleUtil.DbType;

import flexjson.JSONSerializer;

Expand Down Expand Up @@ -188,10 +187,9 @@ public Long decrementSequence() {
ReturningWork<Long> maxReturningWork = new ReturningWork<Long>() {
@Override
public Long execute(Connection connection) throws SQLException {
DialectResolver dialectResolver = new StandardDialectResolver();
Dialect dialect = dialectResolver.resolveDialect(new DatabaseMetaDataDialectResolutionInfoAdapter(connection.getMetaData()));
String currentValueString = "";
if (dialect instanceof PostgreSQLDialect || dialect instanceof PostgreSQL9Dialect) {
DbType dbType = SimpleUtil.getDatabaseType(connection.getMetaData());
if (dbType == DbType.POSTGRES) {
currentValueString = "SELECT currval('"+sequenceName+"')";
long currentValue;
try (PreparedStatement preparedStatement = connection.prepareStatement( currentValueString);
Expand All @@ -205,10 +203,10 @@ public Long execute(Connection connection) throws SQLException {
resultSet.next();
return resultSet.getLong(1);
}
}else if (dialect instanceof OracleDialect) {
}else if (dbType == DbType.ORACLE) {
throw new SQLException("Decrement sequence not implemented for Oracle");
}else {
throw new SQLException("Unsupported Hibernate Dialect:"+dialect.toString());
throw new SQLException("Unssupported database type");
}
}
};
Expand All @@ -222,13 +220,12 @@ public long fetchCurrentValue() {
ReturningWork<Long> maxReturningWork = new ReturningWork<Long>() {
@Override
public Long execute(Connection connection) throws SQLException {
DialectResolver dialectResolver = new StandardDialectResolver();
Dialect dialect = dialectResolver.resolveDialect(new DatabaseMetaDataDialectResolutionInfoAdapter(connection.getMetaData()));
DbType dbType = SimpleUtil.getDatabaseType(connection.getMetaData());
try {
String currentValueString = "";
if (dialect instanceof PostgreSQLDialect || dialect instanceof PostgreSQL9Dialect) {
if (dbType == DbType.POSTGRES) {
currentValueString = "SELECT last_value FROM "+sequenceName;
}else if (dialect instanceof OracleDialect) {
}else if (dbType == DbType.ORACLE) {
currentValueString = "SELECT last_number FROM all_sequences WHERE sequence_name = '"+sequenceName+"'";
}
try (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,6 @@
import javax.persistence.criteria.Root;
import javax.sql.DataSource;

import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.dialect.PostgreSQL9Dialect;
import org.hibernate.engine.jdbc.dialect.internal.StandardDialectResolver;
import org.hibernate.engine.jdbc.dialect.spi.DatabaseMetaDataDialectResolutionInfoAdapter;
import org.hibernate.engine.jdbc.dialect.spi.DialectResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -90,6 +84,7 @@
import com.labsynch.labseer.exceptions.UniqueNameException;
import com.labsynch.labseer.utils.PropertiesUtilService;
import com.labsynch.labseer.utils.SimpleUtil;
import com.labsynch.labseer.utils.SimpleUtil.DbType;

import flexjson.JSONTokener;

Expand Down Expand Up @@ -3537,13 +3532,8 @@ public List<ContainerLocationTreeDTO> getLocationTreeDTO(String rootLabel, Strin
}
EntityManager em = Container.entityManager();
String queryString = null;
Dialect dialect;
try (Connection connection = dataSource.getConnection()) {
DialectResolver dialectResolver = new StandardDialectResolver();
dialect = dialectResolver
.resolveDialect(new DatabaseMetaDataDialectResolutionInfoAdapter(connection.getMetaData()));
}
if (dialect instanceof PostgreSQL9Dialect) {
DbType dbType = SimpleUtil.getDatabaseType(dataSource.getConnection().getMetaData());
if (dbType == DbType.POSTGRES) {
queryString = "WITH RECURSIVE t1 ( \n"
+ " code_name, \n"
+ " parent_code_name, \n"
Expand Down Expand Up @@ -3673,7 +3663,7 @@ public List<ContainerLocationTreeDTO> getLocationTreeDTO(String rootLabel, Strin
queryString += "WHERE label_text_bread_crumb IN :breadcrumbList \n";
}
queryString += ";";
} else if (dialect instanceof Oracle10gDialect) {
} else if (dbType == DbType.ORACLE) {
queryString = "WITH interactions AS ( \n"
+ " SELECT c1.code_name AS code_name, \n"
+ " cl1.label_text AS label_text, \n"
Expand Down
30 changes: 30 additions & 0 deletions src/main/java/com/labsynch/labseer/utils/SimpleUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
Expand All @@ -15,6 +16,7 @@
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.sql.DataSource;

import javax.persistence.EntityManager;
import javax.persistence.Query;
Expand Down Expand Up @@ -366,4 +368,32 @@ public static String getFromExternalServer(String url, Map<String, String> query
inStream.close();
return response.toString();
}

public enum DbType {
MY_SQL, ORACLE, POSTGRES, SQL_SERVER, HSQLDB, H2, UNKNOWN
}

public static DbType getDatabaseType(DatabaseMetaData metadata) {
try{
String rawName = metadata.getDatabaseProductName();
if(rawName == "PostgreSQL") {
return DbType.POSTGRES;
} else if (rawName == "MySQL") {
return DbType.MY_SQL;
} else if (rawName == "Oracle") {
return DbType.ORACLE;
} else if (rawName == "Microsoft SQL Server") {
return DbType.SQL_SERVER;
} else if (rawName == "DB2") {
return DbType.HSQLDB;
} else if (rawName == "H2") {
return DbType.H2;
} else {
return DbType.UNKNOWN;
}

} catch (SQLException e) {
return DbType.UNKNOWN;
}
}
}

0 comments on commit 82a70b8

Please sign in to comment.