提交 2fd77e0d authored 作者: taojinlong's avatar taojinlong

fix: sqlserver 2008 分页问题

上级 78bbdc8a
...@@ -79,6 +79,7 @@ public class EsProvider extends DatasourceProvider { ...@@ -79,6 +79,7 @@ public class EsProvider extends DatasourceProvider {
} }
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
DataEaseException.throwException(e); DataEaseException.throwException(e);
} }
return list; return list;
...@@ -115,7 +116,7 @@ public class EsProvider extends DatasourceProvider { ...@@ -115,7 +116,7 @@ public class EsProvider extends DatasourceProvider {
List<TableFiled> tableFileds = new ArrayList<>(); List<TableFiled> tableFileds = new ArrayList<>();
try { try {
String response = exexQuery(datasourceRequest, datasourceRequest.getQuery(), "?format=json"); String response = exexQuery(datasourceRequest, datasourceRequest.getQuery(), "?format=json");
tableFileds = fetchResultField(response); tableFileds = fetchResultField4Sql(response);
} catch (Exception e) { } catch (Exception e) {
DataEaseException.throwException(e); DataEaseException.throwException(e);
} }
...@@ -140,13 +141,31 @@ public class EsProvider extends DatasourceProvider { ...@@ -140,13 +141,31 @@ public class EsProvider extends DatasourceProvider {
return fieldList; return fieldList;
} }
private List<TableFiled> fetchResultField4Sql(String response) throws Exception {
List<TableFiled> fieldList = new ArrayList<>();
EsReponse esReponse = new Gson().fromJson(response, EsReponse.class);
if(esReponse.getError() != null){
throw new Exception(esReponse.getError().getReason());
}
for (EsReponse.Column column : esReponse.getColumns()) {
TableFiled field = new TableFiled();
field.setFieldName(column.getName());
field.setRemarks(column.getName());
field.setFieldType(column.getType());
field.setFieldSize(EsQueryProvider.transFieldTypeSize(column.getType()));
fieldList.add(field);
}
return fieldList;
}
@Override @Override
public Map<String, List> fetchResultAndField(DatasourceRequest datasourceRequest) throws Exception { public Map<String, List> fetchResultAndField(DatasourceRequest datasourceRequest) throws Exception {
Map<String, List> result = new HashMap<>(); Map<String, List> result = new HashMap<>();
try { try {
String response = exexQuery(datasourceRequest, datasourceRequest.getQuery(), "?format=json"); String response = exexQuery(datasourceRequest, datasourceRequest.getQuery(), "?format=json");
result.put("dataList", fetchResult(response)); result.put("dataList", fetchResult(response));
result.put("fieldList", fetchResultField(response)); result.put("fieldList", fetchResultField4Sql(response));
} catch (Exception e) { } catch (Exception e) {
DataEaseException.throwException(e); DataEaseException.throwException(e);
} }
......
...@@ -45,6 +45,12 @@ public class JdbcProvider extends DatasourceProvider { ...@@ -45,6 +45,12 @@ public class JdbcProvider extends DatasourceProvider {
Statement stat = connection.createStatement(); Statement stat = connection.createStatement();
ResultSet rs = stat.executeQuery(dsr.getQuery()); ResultSet rs = stat.executeQuery(dsr.getQuery());
list = fetchResult(rs); list = fetchResult(rs);
if(dsr.isPageable() && dsr.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.sqlServer.name())){
Integer realSize = dsr.getPage() * dsr.getPageSize() < list.size() ? dsr.getPage() * dsr.getPageSize(): list.size();
list = list.subList((dsr.getPage() - 1) * dsr.getPageSize(), realSize);
}
} catch (SQLException e) { } catch (SQLException e) {
DataEaseException.throwException(e); DataEaseException.throwException(e);
} catch (Exception e) { } catch (Exception e) {
...@@ -329,15 +335,16 @@ public class JdbcProvider extends DatasourceProvider { ...@@ -329,15 +335,16 @@ public class JdbcProvider extends DatasourceProvider {
@Override @Override
public void checkStatus(DatasourceRequest datasourceRequest) throws Exception { public void checkStatus(DatasourceRequest datasourceRequest) throws Exception {
String queryStr = getTablesSql(datasourceRequest);
Connection con = null; Connection con = null;
try { try {
con = getConnection(datasourceRequest); con = getConnection(datasourceRequest);
Statement ps = con.createStatement(); Statement statement = con.createStatement();
ResultSet resultSet = ps.executeQuery(queryStr); String queryStr = getTablesSql(datasourceRequest);
ResultSet resultSet = statement.executeQuery(queryStr);
resultSet.close(); resultSet.close();
ps.close(); statement.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace();
DataEaseException.throwException(e.getMessage()); DataEaseException.throwException(e.getMessage());
} finally { } finally {
if(con != null){con.close();} if(con != null){con.close();}
...@@ -345,6 +352,7 @@ public class JdbcProvider extends DatasourceProvider { ...@@ -345,6 +352,7 @@ public class JdbcProvider extends DatasourceProvider {
} }
public Long count(DatasourceRequest datasourceRequest) throws Exception { public Long count(DatasourceRequest datasourceRequest) throws Exception {
Connection con = null; Connection con = null;
try { try {
...@@ -650,4 +658,5 @@ public class JdbcProvider extends DatasourceProvider { ...@@ -650,4 +658,5 @@ public class JdbcProvider extends DatasourceProvider {
return "show tables;"; return "show tables;";
} }
} }
} }
...@@ -8,6 +8,7 @@ import io.dataease.base.mapper.DatasetTableFieldMapper; ...@@ -8,6 +8,7 @@ import io.dataease.base.mapper.DatasetTableFieldMapper;
import io.dataease.commons.constants.DeTypeConstants; import io.dataease.commons.constants.DeTypeConstants;
import io.dataease.controller.request.chart.ChartExtFilterRequest; import io.dataease.controller.request.chart.ChartExtFilterRequest;
import io.dataease.datasource.dto.JdbcDTO; import io.dataease.datasource.dto.JdbcDTO;
import io.dataease.datasource.dto.SqlServerConfigration;
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.dto.sqlObj.SQLObj; import io.dataease.dto.sqlObj.SQLObj;
...@@ -150,22 +151,25 @@ public class SqlserverQueryProvider extends QueryProvider { ...@@ -150,22 +151,25 @@ public class SqlserverQueryProvider extends QueryProvider {
@Override @Override
public String createQuerySQLWithPage(String table, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup, Datasource ds) { public String createQuerySQLWithPage(String table, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup, Datasource ds) {
return createQuerySQL(table, fields, isGroup, ds) + " ORDER BY \"" + fields.get(0).getOriginName() + "\" offset " + (page - 1) * pageSize + " rows fetch next " + realSize + " rows only"; Integer size = (page-1)*pageSize + realSize;
return String.format("SELECT top %s * from ( %s ) AS DE_SQLSERVER_TMP ", size.toString(), createQuerySQL(table, fields, isGroup, ds));
} }
@Override @Override
public String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup) { public String createQuerySQLAsTmpWithPage(String sql, List<DatasetTableField> fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup) {
return createQuerySQLAsTmp(sql, fields, isGroup) + " ORDER BY \"" + fields.get(0).getOriginName() + "\" offset " + (page - 1) * pageSize + " rows fetch next " + realSize + " rows only"; Integer size = (page-1)*pageSize + realSize;
return String.format("SELECT top %s * from ( %s ) AS DE_SQLSERVER_TMP ", size.toString(), createQuerySQLAsTmp(sql, fields, isGroup));
} }
@Override @Override
public String createQueryTableWithLimit(String table, List<DatasetTableField> fields, Integer limit, boolean isGroup, Datasource ds) { public String createQueryTableWithLimit(String table, List<DatasetTableField> fields, Integer limit, boolean isGroup, Datasource ds) {
return createQuerySQL(table, fields, isGroup, ds) + " ORDER BY \"" + fields.get(0).getOriginName() + "\" offset 0 rows fetch next " + limit + " rows only"; return String.format("SELECT top %s * from %s ", limit.toString(), table);
} }
@Override @Override
public String createQuerySqlWithLimit(String sql, List<DatasetTableField> fields, Integer limit, boolean isGroup) { public String createQuerySqlWithLimit(String sql, List<DatasetTableField> fields, Integer limit, boolean isGroup) {
return createQuerySQLAsTmp(sql, fields, isGroup) + " ORDER BY \"" + fields.get(0).getOriginName() + "\" offset 0 rows fetch next " + limit + " rows only"; return String.format("SELECT top %s * from ( %s ) as DE_SQLSERVER_TMP ", limit.toString(), sqlFix(sql));
} }
@Override @Override
......
...@@ -469,7 +469,6 @@ public class DataSetTableService { ...@@ -469,7 +469,6 @@ public class DataSetTableService {
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds));
map.put("sql", datasourceRequest.getQuery()); map.put("sql", datasourceRequest.getQuery());
System.out.println(datasourceRequest.getQuery());
datasourceRequest.setPage(page); datasourceRequest.setPage(page);
datasourceRequest.setFetchSize(Integer.parseInt(dataSetTableRequest.getRow())); datasourceRequest.setFetchSize(Integer.parseInt(dataSetTableRequest.getRow()));
datasourceRequest.setPageSize(pageSize); datasourceRequest.setPageSize(pageSize);
...@@ -533,13 +532,20 @@ public class DataSetTableService { ...@@ -533,13 +532,20 @@ public class DataSetTableService {
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
datasourceRequest.setQuery(qp.createQuerySQLAsTmpWithPage(sql, fields, page, pageSize, realSize, false)); datasourceRequest.setQuery(qp.createQuerySQLAsTmpWithPage(sql, fields, page, pageSize, realSize, false));
map.put("sql", datasourceRequest.getQuery()); map.put("sql", datasourceRequest.getQuery());
datasourceRequest.setPage(page);
datasourceRequest.setFetchSize(Integer.parseInt(dataSetTableRequest.getRow()));
datasourceRequest.setPageSize(pageSize);
datasourceRequest.setRealSize(realSize);
datasourceRequest.setPreviewData(true);
try { try {
datasourceRequest.setPageable(true);
data.addAll(datasourceProvider.getData(datasourceRequest)); data.addAll(datasourceProvider.getData(datasourceRequest));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
DEException.throwException(e.getMessage()); DEException.throwException(e.getMessage());
} }
try { try {
datasourceRequest.setPageable(false);
datasourceRequest.setQuery(qp.createQuerySqlWithLimit(sql, fields, Integer.valueOf(dataSetTableRequest.getRow()), false)); datasourceRequest.setQuery(qp.createQuerySqlWithLimit(sql, fields, Integer.valueOf(dataSetTableRequest.getRow()), false));
dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size()); dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size());
} catch (Exception e) { } catch (Exception e) {
...@@ -559,12 +565,8 @@ public class DataSetTableService { ...@@ -559,12 +565,8 @@ public class DataSetTableService {
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds));
map.put("sql", datasourceRequest.getQuery()); map.put("sql", datasourceRequest.getQuery());
System.out.println(datasourceRequest.getQuery());
try { try {
data.addAll(jdbcProvider.getData(datasourceRequest)); data.addAll(jdbcProvider.getData(datasourceRequest));
for(int i=0;i< data.size(); i++){
System.out.println(data.get(i)[2]);
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
DEException.throwException(e.getMessage()); DEException.throwException(e.getMessage());
...@@ -620,13 +622,20 @@ public class DataSetTableService { ...@@ -620,13 +622,20 @@ public class DataSetTableService {
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
datasourceRequest.setQuery(qp.createQuerySQLAsTmpWithPage(sql, fields, page, pageSize, realSize, false)); datasourceRequest.setQuery(qp.createQuerySQLAsTmpWithPage(sql, fields, page, pageSize, realSize, false));
map.put("sql", datasourceRequest.getQuery()); map.put("sql", datasourceRequest.getQuery());
datasourceRequest.setPage(page);
datasourceRequest.setFetchSize(Integer.parseInt(dataSetTableRequest.getRow()));
datasourceRequest.setPageSize(pageSize);
datasourceRequest.setRealSize(realSize);
datasourceRequest.setPreviewData(true);
try { try {
datasourceRequest.setPageable(true);
data.addAll(datasourceProvider.getData(datasourceRequest)); data.addAll(datasourceProvider.getData(datasourceRequest));
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
DEException.throwException(e.getMessage()); DEException.throwException(e.getMessage());
} }
try { try {
datasourceRequest.setPageable(false);
datasourceRequest.setQuery(qp.createQuerySqlWithLimit(sql, fields, Integer.valueOf(dataSetTableRequest.getRow()), false)); datasourceRequest.setQuery(qp.createQuerySqlWithLimit(sql, fields, Integer.valueOf(dataSetTableRequest.getRow()), false));
dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size()); dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size());
} catch (Exception e) { } catch (Exception e) {
......
...@@ -192,7 +192,7 @@ export default { ...@@ -192,7 +192,7 @@ export default {
}, },
changeDatasource() { changeDatasource() {
for (let i = 0; i < this.options.length; i++) { for (let i = 0; i < this.options.length; i++) {
if (this.options[i].id === this.form.dataSource) { if (this.options[i].id === this.dataSource) {
this.selectedDatasource = this.options[i] this.selectedDatasource = this.options[i]
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论