提交 10143222 authored 作者: taojinlong's avatar taojinlong

feat: 支持oracle

上级 43ee00d7
...@@ -100,7 +100,9 @@ public class JdbcProvider extends DatasourceProvider { ...@@ -100,7 +100,9 @@ public class JdbcProvider extends DatasourceProvider {
private List<String[]> fetchResult(ResultSet rs) throws Exception { private List<String[]> fetchResult(ResultSet rs) throws Exception {
List<String[]> list = new LinkedList<>(); List<String[]> list = new LinkedList<>();
ResultSetMetaData metaData = rs.getMetaData(); ResultSetMetaData metaData = rs.getMetaData();
System.out.println(metaData.getColumnName(1));
int columnCount = metaData.getColumnCount(); int columnCount = metaData.getColumnCount();
System.out.println(columnCount);
while (rs.next()) { while (rs.next()) {
String[] row = new String[columnCount]; String[] row = new String[columnCount];
for (int j = 0; j < columnCount; j++) { for (int j = 0; j < columnCount; j++) {
...@@ -181,6 +183,7 @@ public class JdbcProvider extends DatasourceProvider { ...@@ -181,6 +183,7 @@ public class JdbcProvider extends DatasourceProvider {
field.setRemarks(l); field.setRemarks(l);
field.setFieldType(t); field.setFieldType(t);
field.setFieldSize(metaData.getColumnDisplaySize(j + 1)); field.setFieldSize(metaData.getColumnDisplaySize(j + 1));
if(t.equalsIgnoreCase("LONG")){field.setFieldSize(65533);} //oracle LONG
fieldList.add(field); fieldList.add(field);
} }
return fieldList; return fieldList;
...@@ -259,6 +262,7 @@ public class JdbcProvider extends DatasourceProvider { ...@@ -259,6 +262,7 @@ public class JdbcProvider extends DatasourceProvider {
tableFiled.setFieldSize(Integer.valueOf(resultSet.getString("COLUMN_SIZE"))); tableFiled.setFieldSize(Integer.valueOf(resultSet.getString("COLUMN_SIZE")));
String dbType = resultSet.getString("TYPE_NAME"); String dbType = resultSet.getString("TYPE_NAME");
tableFiled.setFieldType(dbType); tableFiled.setFieldType(dbType);
if(dbType.equalsIgnoreCase("LONG")){tableFiled.setFieldSize(65533);}
if(StringUtils.isNotEmpty(dbType) && dbType.toLowerCase().contains("date") && tableFiled.getFieldSize() < 50 ){ if(StringUtils.isNotEmpty(dbType) && dbType.toLowerCase().contains("date") && tableFiled.getFieldSize() < 50 ){
tableFiled.setFieldSize(50); tableFiled.setFieldSize(50);
} }
......
...@@ -26,6 +26,10 @@ public abstract class QueryProvider { ...@@ -26,6 +26,10 @@ public abstract class QueryProvider {
public abstract String createQuerySQLWithPage(String table, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize); public abstract String createQuerySQLWithPage(String table, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize);
public abstract String createQueryTableWithLimit(String table, List<DatasetTableField> fields, Integer limit);
public abstract String createQuerySqlWithLimit(String sql, List<DatasetTableField> fields, Integer limit);
public abstract String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize); public abstract String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize);
public abstract String getSQL(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList); public abstract String getSQL(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList);
......
...@@ -116,6 +116,16 @@ public class DorisQueryProvider extends QueryProvider { ...@@ -116,6 +116,16 @@ public class DorisQueryProvider extends QueryProvider {
return createQuerySQL(table, fields) + " LIMIT " + (page - 1) * pageSize + "," + realSize; return createQuerySQL(table, fields) + " LIMIT " + (page - 1) * pageSize + "," + realSize;
} }
@Override
public String createQueryTableWithLimit(String table, List<DatasetTableField> fields, Integer limit) {
return createQuerySQL(table, fields) + " LIMIT 0," + limit;
}
@Override
public String createQuerySqlWithLimit(String sql, List<DatasetTableField> fields, Integer limit) {
return createQuerySQLAsTmp(sql, fields) + " LIMIT 0," + limit;
}
@Override @Override
public String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize) { public String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize) {
return createQuerySQLAsTmp(sql, fields) + " LIMIT " + (page - 1) * pageSize + "," + realSize; return createQuerySQLAsTmp(sql, fields) + " LIMIT " + (page - 1) * pageSize + "," + realSize;
......
...@@ -117,6 +117,16 @@ public class MysqlQueryProvider extends QueryProvider { ...@@ -117,6 +117,16 @@ public class MysqlQueryProvider extends QueryProvider {
return createQuerySQL(table, fields) + " LIMIT " + (page - 1) * pageSize + "," + realSize; return createQuerySQL(table, fields) + " LIMIT " + (page - 1) * pageSize + "," + realSize;
} }
@Override
public String createQueryTableWithLimit(String table, List<DatasetTableField> fields, Integer limit) {
return createQuerySQL(table, fields) + " LIMIT 0," + limit;
}
@Override
public String createQuerySqlWithLimit(String sql, List<DatasetTableField> fields, Integer limit) {
return createQuerySQLAsTmp(sql, fields) + " LIMIT 0," + limit;
}
@Override @Override
public String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize) { public String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize) {
return createQuerySQLAsTmp(sql, fields) + " LIMIT " + (page - 1) * pageSize + "," + realSize; return createQuerySQLAsTmp(sql, fields) + " LIMIT " + (page - 1) * pageSize + "," + realSize;
......
...@@ -5,6 +5,7 @@ import io.dataease.controller.request.chart.ChartExtFilterRequest; ...@@ -5,6 +5,7 @@ import io.dataease.controller.request.chart.ChartExtFilterRequest;
import io.dataease.dto.chart.ChartCustomFilterDTO; import io.dataease.dto.chart.ChartCustomFilterDTO;
import io.dataease.dto.chart.ChartViewFieldDTO; import io.dataease.dto.chart.ChartViewFieldDTO;
import io.dataease.provider.QueryProvider; import io.dataease.provider.QueryProvider;
import io.swagger.models.auth.In;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -33,6 +34,9 @@ public class OracleQueryProvider extends QueryProvider { ...@@ -33,6 +34,9 @@ public class OracleQueryProvider extends QueryProvider {
case "MEDIUMTEXT": case "MEDIUMTEXT":
case "LONGTEXT": case "LONGTEXT":
case "ENUM": case "ENUM":
case "LONG":
case "NVARCHAR2":
case "NCHAR":
return 0;// 文本 return 0;// 文本
case "DATE": case "DATE":
case "TIME": case "TIME":
...@@ -46,6 +50,7 @@ public class OracleQueryProvider extends QueryProvider { ...@@ -46,6 +50,7 @@ public class OracleQueryProvider extends QueryProvider {
case "INTEGER": case "INTEGER":
case "BIGINT": case "BIGINT":
return 2;// 整型 return 2;// 整型
case "NUMBER":
case "FLOAT": case "FLOAT":
case "DOUBLE": case "DOUBLE":
case "DECIMAL": case "DECIMAL":
...@@ -70,7 +75,7 @@ public class OracleQueryProvider extends QueryProvider { ...@@ -70,7 +75,7 @@ public class OracleQueryProvider extends QueryProvider {
@Override @Override
public String createSQLPreview(String sql, String orderBy) { public String createSQLPreview(String sql, String orderBy) {
return "SELECT * FROM (" + sqlFix(sql) + ") AS tmp " + " WHERE rownum <= 1000"; return "SELECT * FROM (" + sqlFix(sql) + ") tmp " + " WHERE rownum <= 1000";
} }
@Override @Override
...@@ -80,7 +85,11 @@ public class OracleQueryProvider extends QueryProvider { ...@@ -80,7 +85,11 @@ public class OracleQueryProvider extends QueryProvider {
// 如果原始类型为时间 // 如果原始类型为时间
if (f.getDeExtractType() == 1) { if (f.getDeExtractType() == 1) {
if (f.getDeType() == 2 || f.getDeType() == 3) { if (f.getDeType() == 2 || f.getDeType() == 3) {
stringBuilder.append("UNIX_TIMESTAMP( ").append(f.getOriginName()).append(" )*1000 AS ").append(f.getDataeaseName()); if(f.getType().equalsIgnoreCase("DATE")){
stringBuilder.append("TO_NUMBER( ").append(f.getOriginName()).append(" - TO_DATE('1970-01-01 8:0:0', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60 * 60 * 1000 AS ").append(f.getDataeaseName());
}else {
stringBuilder.append("TO_NUMBER(to_date(to_char( ").append(f.getOriginName()).append(" ,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') - TO_DATE('1970-01-01 8:0:0', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60 * 60 * 1000 AS ").append(f.getDataeaseName());
}
} else { } else {
stringBuilder.append(" ").append(f.getOriginName()).append(" AS ").append(f.getDataeaseName()); stringBuilder.append(" ").append(f.getOriginName()).append(" AS ").append(f.getDataeaseName());
} }
...@@ -90,13 +99,13 @@ public class OracleQueryProvider extends QueryProvider { ...@@ -90,13 +99,13 @@ public class OracleQueryProvider extends QueryProvider {
} else if (f.getDeType() == 3) { } else if (f.getDeType() == 3) {
stringBuilder.append("CAST( ").append(f.getOriginName()).append(" AS DECIMAL(20,2)) AS ").append(f.getDataeaseName()); stringBuilder.append("CAST( ").append(f.getOriginName()).append(" AS DECIMAL(20,2)) AS ").append(f.getDataeaseName());
} else if (f.getDeType() == 1) { } else if (f.getDeType() == 1) {
stringBuilder.append("DATE_FORMAT( ").append(f.getOriginName()).append(" ,'%Y-%m-%d %H:%i:%S') AS _").append(f.getDataeaseName()); stringBuilder.append("to_date( ").append(f.getOriginName()).append(" ,'yyyy-mm-dd,hh24:mi:ss') AS ").append(f.getDataeaseName());
} else { } else {
stringBuilder.append(" ").append(f.getOriginName()).append(" AS ").append(f.getDataeaseName()); stringBuilder.append(" ").append(f.getOriginName()).append(" AS ").append(f.getDataeaseName());
} }
} else { } else {
if (f.getDeType() == 1) { if (f.getDeType() == 1) {
stringBuilder.append("FROM_UNIXTIME(CAST( ").append(f.getOriginName()).append(" AS DECIMAL(20,0))/1000,'%Y-%m-%d %H:%i:%S') AS ").append(f.getDataeaseName()); stringBuilder.append("TO_CHAR( ").append(f.getOriginName()).append(" / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') AS ").append(f.getDataeaseName());
} else { } else {
stringBuilder.append(" ").append(f.getOriginName()).append(" AS ").append(f.getDataeaseName()); stringBuilder.append(" ").append(f.getOriginName()).append(" AS ").append(f.getDataeaseName());
} }
...@@ -106,19 +115,38 @@ public class OracleQueryProvider extends QueryProvider { ...@@ -106,19 +115,38 @@ public class OracleQueryProvider extends QueryProvider {
return MessageFormat.format("SELECT {0} FROM {1} ", StringUtils.join(array, ","), table); return MessageFormat.format("SELECT {0} FROM {1} ", StringUtils.join(array, ","), table);
} }
private String sqlColumn(List<DatasetTableField> fields){
String[] array = fields.stream().map(f -> {
return f.getDataeaseName();
}).toArray(String[]::new);
return StringUtils.join(array, ",");
}
@Override @Override
public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields) { public String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields) {
return createQuerySQL(" (" + sqlFix(sql) + ") AS tmp ", fields); return createQuerySQL(" (" + sqlFix(sql) + ") sqltmp ", fields);
} }
@Override @Override
public String createQuerySQLWithPage(String table, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize) { public String createQuerySQLWithPage(String table, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize) {
return createQuerySQL(table, fields) + " where rownum <= " + page * realSize + " minus " + createQuerySQL(table, fields) + " where rownum <= " + (page - 1) * pageSize; return MessageFormat.format("SELECT {0} FROM ( SELECT tmp.*, rownum r FROM ( {1} ) tmp WHERE rownum <= {2} ) tmp2 WHERE r > {3} ",
sqlColumn(fields), createQuerySQL(table, fields), Integer.valueOf(page * realSize).toString(), Integer.valueOf((page - 1) * pageSize).toString());
}
@Override
public String createQueryTableWithLimit(String table, List<DatasetTableField> fields, Integer limit) {
return createQuerySQL(table, fields) + " WHERE rownum <= " + limit;
}
@Override
public String createQuerySqlWithLimit(String sql, List<DatasetTableField> fields, Integer limit) {
return createQuerySQLAsTmp(sql, fields) + " WHERE rownum <= " + limit;
} }
@Override @Override
public String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize) { public String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize) {
return createQuerySQLAsTmp(sql, fields) + " LIMIT " + (page - 1) * pageSize + "," + realSize; return MessageFormat.format("SELECT {0} FROM ( SELECT tmp.*, rownum r FROM ( {1} ) tmp WHERE rownum <= {2} ) tmp2 WHERE r > {3} ",
sqlColumn(fields), createQuerySQLAsTmp(sql, fields), Integer.valueOf(page * realSize).toString(), Integer.valueOf((page - 1) * pageSize).toString());
} }
@Override @Override
...@@ -455,7 +483,7 @@ public class OracleQueryProvider extends QueryProvider { ...@@ -455,7 +483,7 @@ public class OracleQueryProvider extends QueryProvider {
switch (dateStyle) { switch (dateStyle) {
case "y": case "y":
return "%Y"; return "Y";
case "y_M": case "y_M":
return "%Y" + split + "%m"; return "%Y" + split + "%m";
case "y_M_d": case "y_M_d":
......
...@@ -106,6 +106,16 @@ public class SqlserverQueryProvider extends QueryProvider { ...@@ -106,6 +106,16 @@ public class SqlserverQueryProvider extends QueryProvider {
return createQuerySQL(table, fields) + " offset " + (page - 1) * pageSize + " rows fetch next " + realSize + " rows only"; return createQuerySQL(table, fields) + " offset " + (page - 1) * pageSize + " rows fetch next " + realSize + " rows only";
} }
@Override
public String createQueryTableWithLimit(String table, List<DatasetTableField> fields, Integer limit) {
return createQuerySQL(table, fields) + " LIMIT 0," + limit;
}
@Override
public String createQuerySqlWithLimit(String sql, List<DatasetTableField> fields, Integer limit) {
return createQuerySQLAsTmp(sql, fields) + " LIMIT 0," + limit;
}
@Override @Override
public String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize) { public String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize) {
return createQuerySQLAsTmp(sql, fields) + " LIMIT " + (page - 1) * pageSize + "," + realSize; return createQuerySQLAsTmp(sql, fields) + " LIMIT " + (page - 1) * pageSize + "," + realSize;
......
...@@ -197,6 +197,7 @@ public class ChartViewService { ...@@ -197,6 +197,7 @@ public class ChartViewService {
datasourceRequest.setQuery(qp.getSQLAsTmp(dataTableInfoDTO.getSql(), xAxis, yAxis, customFilter, extFilterList)); datasourceRequest.setQuery(qp.getSQLAsTmp(dataTableInfoDTO.getSql(), xAxis, yAxis, customFilter, extFilterList));
} }
} }
System.out.println(datasourceRequest.getQuery());
data = datasourceProvider.getData(datasourceRequest); data = datasourceProvider.getData(datasourceRequest);
/** /**
* 直连不实用缓存 * 直连不实用缓存
......
...@@ -293,14 +293,13 @@ public class DataSetTableService { ...@@ -293,14 +293,13 @@ public class DataSetTableService {
String table = dataTableInfoDTO.getTable(); String table = dataTableInfoDTO.getTable();
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize)); datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize));
System.out.println(datasourceRequest.getQuery());
try { try {
data.addAll(datasourceProvider.getData(datasourceRequest)); data.addAll(datasourceProvider.getData(datasourceRequest));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
try { try {
datasourceRequest.setQuery(qp.createQuerySQL(table, fields) + " LIMIT 0," + dataSetTableRequest.getRow()); datasourceRequest.setQuery(qp.createQueryTableWithLimit(table, fields, Integer.valueOf(dataSetTableRequest.getRow())));
dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size()); dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size());
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
...@@ -317,13 +316,15 @@ public class DataSetTableService { ...@@ -317,13 +316,15 @@ public class DataSetTableService {
String sql = dataTableInfoDTO.getSql(); String sql = dataTableInfoDTO.getSql();
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
datasourceRequest.setQuery(qp.createQuerySQLAsTmpWithPage(sql, fields, page, pageSize, realSize)); datasourceRequest.setQuery(qp.createQuerySQLAsTmpWithPage(sql, fields, page, pageSize, realSize));
System.out.println(datasourceRequest.getQuery());
try { try {
data.addAll(datasourceProvider.getData(datasourceRequest)); data.addAll(datasourceProvider.getData(datasourceRequest));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
try { try {
datasourceRequest.setQuery(qp.createQuerySQLAsTmp(sql, fields) + " LIMIT 0," + dataSetTableRequest.getRow()); datasourceRequest.setQuery(qp.createQuerySqlWithLimit(sql, fields, Integer.valueOf(dataSetTableRequest.getRow())));
System.out.println(datasourceRequest.getQuery());
dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size()); dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size());
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
...@@ -418,9 +419,6 @@ public class DataSetTableService { ...@@ -418,9 +419,6 @@ public class DataSetTableService {
} }
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
String sqlAsTable = qp.createSQLPreview(sql, null); String sqlAsTable = qp.createSQLPreview(sql, null);
// datasourceRequest.setQuery(sqlAsTable);
// List<TableFiled> previewFields = datasourceProvider.fetchResultField(datasourceRequest);
// 正式执行
datasourceRequest.setQuery(sqlAsTable); datasourceRequest.setQuery(sqlAsTable);
Map<String, List> result = datasourceProvider.fetchResultAndField(datasourceRequest); Map<String, List> result = datasourceProvider.fetchResultAndField(datasourceRequest);
List<String[]> data = result.get("dataList"); List<String[]> data = result.get("dataList");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论