提交 e98f9560 authored 作者: junjie's avatar junjie

feat(backend):数据集 视图,sql重新整理

上级 8fadc27a
......@@ -39,7 +39,7 @@ public class CommonConfig {
datasource.setId("doris");
datasource.setName("doris");
datasource.setDesc("doris");
datasource.setType("mysql");
datasource.setType("doris");
datasource.setConfiguration(jsonObject.toJSONString());
return datasource;
}
......
package io.dataease.datasource.constants;
public enum DatasourceTypes {
mysql, sqlServer, excel
mysql, sqlServer, excel, doris
}
package io.dataease.datasource.provider;
import io.dataease.datasource.constants.DatasourceTypes;
import io.dataease.provider.DDLProvider;
import io.dataease.provider.QueryProvider;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class ProviderFactory implements ApplicationContextAware {
......@@ -18,18 +19,46 @@ public class ProviderFactory implements ApplicationContextAware {
this.context = applicationContext;
}
public static DatasourceProvider getProvider(String type){
public static DatasourceProvider getProvider(String type) {
DatasourceTypes datasourceType = DatasourceTypes.valueOf(type);
switch (datasourceType){
switch (datasourceType) {
case mysql:
return context.getBean("jdbc", DatasourceProvider.class);
case doris:
return context.getBean("jdbc", DatasourceProvider.class);
case sqlServer:
return context.getBean("jdbc", DatasourceProvider.class);
default:
return context.getBean("jdbc", DatasourceProvider.class);
}
}
public static QueryProvider getQueryProvider(String type) {
DatasourceTypes datasourceType = DatasourceTypes.valueOf(type);
switch (datasourceType) {
case mysql:
return context.getBean("mysqlQuery", QueryProvider.class);
case doris:
return context.getBean("dorisQuery", QueryProvider.class);
case sqlServer:
return context.getBean("mysqlQuery", QueryProvider.class);
default:
return context.getBean("mysqlQuery", QueryProvider.class);
}
}
public static DDLProvider getDDLProvider(String type) {
DatasourceTypes datasourceType = DatasourceTypes.valueOf(type);
switch (datasourceType) {
case mysql:
return context.getBean("mysqlDDL", DDLProvider.class);
case doris:
return context.getBean("dorisDDL", DDLProvider.class);
case sqlServer:
return context.getBean("mysqlDDL", DDLProvider.class);
default:
return context.getBean("mysqlDDL", DDLProvider.class);
}
}
}
package io.dataease.provider;
/**
* @Author gin
* @Date 2021/5/17 4:19 下午
*/
public abstract class DDLProvider {
public abstract String createView(String name, String viewSQL);
public abstract String dropTableOrView(String name);
}
package io.dataease.provider;
import io.dataease.base.domain.DatasetTableField;
import io.dataease.controller.request.chart.ChartExtFilterRequest;
import io.dataease.dto.chart.ChartViewFieldDTO;
import java.util.List;
/**
* @Author gin
* @Date 2021/5/17 2:42 下午
*/
public abstract class QueryProvider {
public abstract Integer transFieldType( String field);
public abstract String createQueryCountSQL(String table);
public abstract String createQueryCountSQLAsTmp(String sql);
public abstract String createSQLPreview(String sql, String orderBy);
public abstract String createQuerySQL(String table, List<DatasetTableField> fields);
public abstract String createQuerySQLAsTmp(String sql, List<DatasetTableField> fields);
public abstract String createQuerySQLWithPage(String table, 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<ChartExtFilterRequest> extFilterRequestList);
public abstract String getSQLAsTmp(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartExtFilterRequest> extFilterRequestList);
}
package io.dataease.provider.doris;
import io.dataease.provider.DDLProvider;
import org.springframework.stereotype.Service;
/**
* @Author gin
* @Date 2021/5/17 4:27 下午
*/
@Service("dorisDDL")
public class DorisDDLProvider extends DDLProvider {
@Override
public String createView(String name, String viewSQL) {
return "CREATE VIEW IF NOT EXISTS " + name + " AS (" + viewSQL + ")";
}
@Override
public String dropTableOrView(String name) {
return "DROP TABLE IF EXISTS " + name;
}
}
package io.dataease.provider.mysql;
import io.dataease.provider.DDLProvider;
import org.springframework.stereotype.Service;
/**
* @Author gin
* @Date 2021/5/17 4:27 下午
*/
@Service("mysqlDDL")
public class MysqlDDLProvider extends DDLProvider {
@Override
public String createView(String name, String viewSQL) {
return "CREATE VIEW IF NOT EXISTS " + name + " AS (" + viewSQL + ")";
}
@Override
public String dropTableOrView(String name) {
return "DROP TABLE IF EXISTS " + name;
}
}
......@@ -7,6 +7,7 @@ import io.dataease.datasource.provider.DatasourceProvider;
import io.dataease.datasource.provider.ProviderFactory;
import io.dataease.datasource.request.DatasourceRequest;
import io.dataease.datasource.service.DatasourceService;
import io.dataease.provider.QueryProvider;
import io.dataease.service.dataset.DataSetFieldService;
import io.dataease.service.dataset.DataSetTableFieldsService;
import io.dataease.service.dataset.DataSetTableService;
......@@ -58,7 +59,8 @@ public class DirectFieldService implements DataSetFieldService {
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
DatasourceRequest datasourceRequest = new DatasourceRequest();
datasourceRequest.setDatasource(ds);
String querySQL = dataSetTableService.createQuerySQL(ds.getType(), tableName, Collections.singletonList(field));
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
String querySQL = qp.createQuerySQL(tableName, Collections.singletonList(field));
datasourceRequest.setQuery(querySQL);
try {
List<String[]> rows = datasourceProvider.getData(datasourceRequest);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论