Skip to content

Commit

Permalink
feat(数据源): 支持 db2
Browse files Browse the repository at this point in the history
  • Loading branch information
jinlong-T committed Dec 7, 2021
1 parent c51a41d commit ab7b7f5
Show file tree
Hide file tree
Showing 11 changed files with 1,175 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ public enum DatasourceTypes {
oracle("oracle", "oracle", "oracle.jdbc.driver.OracleDriver", "\"", "\"", "\"", "\""),
mongo("mongo", "mongodb", "com.mongodb.jdbc.MongoDriver", "`", "`", "\"", "\""),
ck("ch", "ch", "ru.yandex.clickhouse.ClickHouseDriver", "`", "`", "'", "'"),
db2("db2", "db2", "com.ibm.db2.jcc.DB2Driver", "\"", "\"", "\"", "\""),
es("es", "es", "", "\"", "\"", "\"", "\""),
redshift("redshift", "redshift", "org.postgresql.Driver", "\"", "\"", "\"", "\"");

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.dataease.dto.datasource;

import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;

@Getter
@Setter
public class Db2Configuration extends JdbcConfiguration {

private String driver = "com.ibm.db2.jcc.DB2Driver";
private String extraParams = "";

public String getJdbc() {
if(StringUtils.isEmpty(extraParams.trim())){
return "jdbc:db2://HOSTNAME:PORT/DATABASE"
.replace("HOSTNAME", getHost().trim())
.replace("PORT", getPort().toString().trim())
.replace("DATABASE", getDataBase().trim());
}else {
return "jdbc:hive2://HOSTNAME:PORT/DATABASE?EXTRA_PARAMS"
.replace("HOSTNAME", getHost().trim())
.replace("PORT", getPort().toString().trim())
.replace("DATABASE", getDataBase().trim())
.replace("EXTRA_PARAMS", getExtraParams().trim());
}
}
}
2 changes: 2 additions & 0 deletions backend/src/main/java/io/dataease/dto/sqlObj/SQLObj.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,6 @@ public class SQLObj {
private String whereField;
private String whereAlias;
private String whereTermAndValue;

private String limitFiled;
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ public static QueryProvider getQueryProvider(String type) {
return context.getBean("redshiftQuery", QueryProvider.class);
case hive:
return context.getBean("hiveQuery", QueryProvider.class);
case db2:
return context.getBean("db2Query", QueryProvider.class);
default:
return context.getBean("mysqlQuery", QueryProvider.class);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ public List<String[]> getData(DatasourceRequest dsr) throws Exception {

list = fetchResult(rs);

if (dsr.isPageable() && dsr.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.sqlServer.name())) {
if (dsr.isPageable() && (dsr.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.sqlServer.name()) || dsr.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.db2.name()))) {
Integer realSize = dsr.getPage() * dsr.getPageSize() < list.size() ? dsr.getPage() * dsr.getPageSize() : list.size();
list = list.subList((dsr.getPage() - 1) * dsr.getPageSize(), realSize);
}
Expand Down Expand Up @@ -245,10 +245,10 @@ public Map<String, List> fetchResultAndField(DatasourceRequest datasourceRequest
List<String[]> dataList;
List<TableFiled> fieldList;
try (Connection connection = getConnectionFromPool(datasourceRequest); Statement stat = connection.createStatement(); ResultSet rs = stat.executeQuery(rebuildSqlWithFragment(datasourceRequest.getQuery()))) {
dataList = fetchResult(rs);
fieldList = fetchResultField(rs, datasourceRequest);
result.put("dataList", dataList);
result.put("fieldList", fieldList);
dataList = fetchResult(rs);
result.put("dataList", dataList);
return result;
} catch (SQLException e) {
DataEaseException.throwException(e);
Expand Down Expand Up @@ -451,6 +451,13 @@ private Connection getConnection(DatasourceRequest datasourceRequest) throws Exc
driver = hiveConfiguration.getDriver();
jdbcurl = hiveConfiguration.getJdbc();
break;
case db2:
Db2Configuration db2Configuration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), Db2Configuration.class);
username = db2Configuration.getUsername();
password = db2Configuration.getPassword();
driver = db2Configuration.getDriver();
jdbcurl = db2Configuration.getJdbc();
break;
default:
break;
}
Expand Down Expand Up @@ -543,6 +550,13 @@ private JdbcConfiguration setCredential(DatasourceRequest datasourceRequest, Dru
dataSource.setDriverClassName(hiveConfiguration.getDriver());
dataSource.setUrl(hiveConfiguration.getJdbc());
jdbcConfiguration = hiveConfiguration;
break;
case db2:
Db2Configuration db2Configuration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), Db2Configuration.class);
dataSource.setPassword(db2Configuration.getPassword());
dataSource.setDriverClassName(db2Configuration.getDriver());
dataSource.setUrl(db2Configuration.getJdbc());
jdbcConfiguration = db2Configuration;
default:
break;
}
Expand Down Expand Up @@ -592,6 +606,12 @@ private String getTablesSql(DatasourceRequest datasourceRequest) throws Exceptio
throw new Exception(Translator.get("i18n_schema_is_empty"));
}
return "SELECT tablename FROM pg_tables WHERE schemaname='SCHEMA' ;".replace("SCHEMA", redshiftConfigration.getSchema());
case db2:
Db2Configuration db2Configuration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), Db2Configuration.class);
if (StringUtils.isEmpty(db2Configuration.getSchema())) {
throw new Exception(Translator.get("i18n_schema_is_empty"));
}
return "select TABNAME from syscat.tables WHERE TABSCHEMA ='DE_SCHEMA' AND \"TYPE\" = 'T';".replace("DE_SCHEMA", db2Configuration.getSchema());
default:
return "show tables;";
}
Expand Down Expand Up @@ -632,18 +652,29 @@ private String getViewSql(DatasourceRequest datasourceRequest) throws Exception
throw new Exception(Translator.get("i18n_schema_is_empty"));
}
return "SELECT viewname FROM pg_views WHERE schemaname='SCHEMA' ;".replace("SCHEMA", redshiftConfigration.getSchema());

case db2:
Db2Configuration db2Configuration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), Db2Configuration.class);
if (StringUtils.isEmpty(db2Configuration.getSchema())) {
throw new Exception(Translator.get("i18n_schema_is_empty"));
}
return "select TABNAME from syscat.tables WHERE TABSCHEMA ='DE_SCHEMA' AND \"TYPE\" = 'V';".replace("DE_SCHEMA", db2Configuration.getSchema());

default:
return null;
}
}

private String getSchemaSql(DatasourceRequest datasourceRequest) {
DatasourceTypes datasourceType = DatasourceTypes.valueOf(datasourceRequest.getDatasource().getType());
Db2Configuration db2Configuration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), Db2Configuration.class);
switch (datasourceType) {
case oracle:
return "select * from all_users";
case sqlServer:
return "select name from sys.schemas;";
case db2:
return "select SCHEMANAME from syscat.SCHEMATA WHERE \"DEFINER\" ='USER';".replace("USER", db2Configuration.getUsername().toUpperCase()) ;
case pg:
return "SELECT nspname FROM pg_namespace;";
case redshift:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package io.dataease.provider.query.db2;

import io.dataease.provider.query.SQLConstants;

import static io.dataease.commons.constants.DatasourceTypes.db2;

public class Db2Constants extends SQLConstants {
public static final String KEYWORD_TABLE = db2.getKeywordPrefix() + "%s" + db2.getKeywordSuffix();

public static final String KEYWORD_FIX = "%s." + db2.getKeywordPrefix() + "%s" + db2.getKeywordSuffix();

public static final String UNIX_TIMESTAMP = "BIGINT(TIMESTAMPDIFF(2,CHAR(%s -TIMESTAMP('1970-01-01 08:00:00'))))";

public static final String DATE_FORMAT = "TO_CHAR(TIMESTAMP(%s),'%s')";

public static final String FROM_UNIXTIME = "TO_CHAR(TIMESTAMP('1970-01-01 08:00:00') +(%s)SECONDS, '%s')";

public static final String STR_TO_DATE = "timestamp(trim(char(%s)))";

public static final String CAST = "CAST(%s AS %s)";

public static final String DEFAULT_DATE_FORMAT = "YYYY-MM-DD HH24:MI:SS";

public static final String DEFAULT_INT_FORMAT = "BIGINT";

public static final String DEFAULT_FLOAT_FORMAT = "DECIMAL(20,2)";

public static final String WHERE_VALUE_NULL = "(NULL,'')";

public static final String WHERE_VALUE_VALUE = "'%s'";

public static final String AGG_COUNT = "COUNT(*)";

public static final String AGG_FIELD = "%s(%s)";

public static final String WHERE_BETWEEN = "'%s' AND '%s'";

public static final String BRACKETS = "(%s)";
}
Loading

0 comments on commit ab7b7f5

Please sign in to comment.