Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue820 #221

Merged
merged 2 commits into from
Nov 4, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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;
}
}
}