diff --git a/backend/src/main/java/io/dataease/datasource/provider/EsProvider.java b/backend/src/main/java/io/dataease/datasource/provider/EsProvider.java index 003957f3a7..5645447961 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/EsProvider.java +++ b/backend/src/main/java/io/dataease/datasource/provider/EsProvider.java @@ -79,6 +79,7 @@ public class EsProvider extends DatasourceProvider { } } } catch (Exception e) { + e.printStackTrace(); DataEaseException.throwException(e); } return list; @@ -115,7 +116,7 @@ public class EsProvider extends DatasourceProvider { List tableFileds = new ArrayList<>(); try { String response = exexQuery(datasourceRequest, datasourceRequest.getQuery(), "?format=json"); - tableFileds = fetchResultField(response); + tableFileds = fetchResultField4Sql(response); } catch (Exception e) { DataEaseException.throwException(e); } @@ -140,13 +141,31 @@ public class EsProvider extends DatasourceProvider { return fieldList; } + private List fetchResultField4Sql(String response) throws Exception { + List 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 public Map fetchResultAndField(DatasourceRequest datasourceRequest) throws Exception { Map result = new HashMap<>(); try { String response = exexQuery(datasourceRequest, datasourceRequest.getQuery(), "?format=json"); result.put("dataList", fetchResult(response)); - result.put("fieldList", fetchResultField(response)); + result.put("fieldList", fetchResultField4Sql(response)); } catch (Exception e) { DataEaseException.throwException(e); } diff --git a/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java b/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java index fc50a0ba66..c780117686 100644 --- a/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/datasource/provider/JdbcProvider.java @@ -45,6 +45,12 @@ public class JdbcProvider extends DatasourceProvider { Statement stat = connection.createStatement(); ResultSet rs = stat.executeQuery(dsr.getQuery()); 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) { DataEaseException.throwException(e); } catch (Exception e) { @@ -329,15 +335,16 @@ public class JdbcProvider extends DatasourceProvider { @Override public void checkStatus(DatasourceRequest datasourceRequest) throws Exception { - String queryStr = getTablesSql(datasourceRequest); Connection con = null; try { con = getConnection(datasourceRequest); - Statement ps = con.createStatement(); - ResultSet resultSet = ps.executeQuery(queryStr); + Statement statement = con.createStatement(); + String queryStr = getTablesSql(datasourceRequest); + ResultSet resultSet = statement.executeQuery(queryStr); resultSet.close(); - ps.close(); + statement.close(); } catch (Exception e) { + e.printStackTrace(); DataEaseException.throwException(e.getMessage()); } finally { if(con != null){con.close();} @@ -345,6 +352,7 @@ public class JdbcProvider extends DatasourceProvider { } + public Long count(DatasourceRequest datasourceRequest) throws Exception { Connection con = null; try { @@ -650,4 +658,5 @@ public class JdbcProvider extends DatasourceProvider { return "show tables;"; } } + } diff --git a/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java b/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java index 3fcb7b5824..4b0f33a473 100644 --- a/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/sqlserver/SqlserverQueryProvider.java @@ -8,6 +8,7 @@ import io.dataease.base.mapper.DatasetTableFieldMapper; import io.dataease.commons.constants.DeTypeConstants; import io.dataease.controller.request.chart.ChartExtFilterRequest; import io.dataease.datasource.dto.JdbcDTO; +import io.dataease.datasource.dto.SqlServerConfigration; import io.dataease.dto.chart.ChartCustomFilterDTO; import io.dataease.dto.chart.ChartViewFieldDTO; import io.dataease.dto.sqlObj.SQLObj; @@ -150,22 +151,25 @@ public class SqlserverQueryProvider extends QueryProvider { @Override public String createQuerySQLWithPage(String table, List 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 public String createQuerySQLAsTmpWithPage(String sql, List 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 public String createQueryTableWithLimit(String table, List 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 public String createQuerySqlWithLimit(String sql, List 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 diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 0e12bbf992..5cc8c29ce8 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -469,7 +469,6 @@ public class DataSetTableService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); map.put("sql", datasourceRequest.getQuery()); - System.out.println(datasourceRequest.getQuery()); datasourceRequest.setPage(page); datasourceRequest.setFetchSize(Integer.parseInt(dataSetTableRequest.getRow())); datasourceRequest.setPageSize(pageSize); @@ -533,13 +532,20 @@ public class DataSetTableService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); datasourceRequest.setQuery(qp.createQuerySQLAsTmpWithPage(sql, fields, page, pageSize, realSize, false)); map.put("sql", datasourceRequest.getQuery()); + datasourceRequest.setPage(page); + datasourceRequest.setFetchSize(Integer.parseInt(dataSetTableRequest.getRow())); + datasourceRequest.setPageSize(pageSize); + datasourceRequest.setRealSize(realSize); + datasourceRequest.setPreviewData(true); try { + datasourceRequest.setPageable(true); data.addAll(datasourceProvider.getData(datasourceRequest)); } catch (Exception e) { e.printStackTrace(); DEException.throwException(e.getMessage()); } try { + datasourceRequest.setPageable(false); datasourceRequest.setQuery(qp.createQuerySqlWithLimit(sql, fields, Integer.valueOf(dataSetTableRequest.getRow()), false)); dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size()); } catch (Exception e) { @@ -559,12 +565,8 @@ public class DataSetTableService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); datasourceRequest.setQuery(qp.createQuerySQLWithPage(table, fields, page, pageSize, realSize, false, ds)); map.put("sql", datasourceRequest.getQuery()); - System.out.println(datasourceRequest.getQuery()); try { data.addAll(jdbcProvider.getData(datasourceRequest)); - for(int i=0;i< data.size(); i++){ - System.out.println(data.get(i)[2]); - } } catch (Exception e) { e.printStackTrace(); DEException.throwException(e.getMessage()); @@ -620,13 +622,20 @@ public class DataSetTableService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); datasourceRequest.setQuery(qp.createQuerySQLAsTmpWithPage(sql, fields, page, pageSize, realSize, false)); map.put("sql", datasourceRequest.getQuery()); + datasourceRequest.setPage(page); + datasourceRequest.setFetchSize(Integer.parseInt(dataSetTableRequest.getRow())); + datasourceRequest.setPageSize(pageSize); + datasourceRequest.setRealSize(realSize); + datasourceRequest.setPreviewData(true); try { + datasourceRequest.setPageable(true); data.addAll(datasourceProvider.getData(datasourceRequest)); } catch (Exception e) { e.printStackTrace(); DEException.throwException(e.getMessage()); } try { + datasourceRequest.setPageable(false); datasourceRequest.setQuery(qp.createQuerySqlWithLimit(sql, fields, Integer.valueOf(dataSetTableRequest.getRow()), false)); dataSetPreviewPage.setTotal(datasourceProvider.getData(datasourceRequest).size()); } catch (Exception e) { diff --git a/frontend/src/views/dataset/add/AddSQL.vue b/frontend/src/views/dataset/add/AddSQL.vue index 4174ce8a45..15921a9e62 100644 --- a/frontend/src/views/dataset/add/AddSQL.vue +++ b/frontend/src/views/dataset/add/AddSQL.vue @@ -192,7 +192,7 @@ export default { }, changeDatasource() { 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] } }