From 7757a6cda4c2ad0f3272bc06b26f71aed4276622 Mon Sep 17 00:00:00 2001 From: datagear Date: Wed, 1 Jan 2020 18:08:26 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=95=B0=E6=8D=AE=E9=9B=86?= =?UTF-8?q?=E8=A1=A8=E5=8D=95SQL=E7=BC=96=E8=BE=91=E5=99=A8=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/datagear/management/ddl/datagear.sql | 2 +- .../web/controller/SqlEditorController.java | 161 ++++++++++++++++++ .../view/analysis/chart/chart_grid.ftl | 1 + .../analysis/chartPlugin/chartPlugin_grid.ftl | 1 + .../analysis/dashboard/dashboard_grid.ftl | 1 + .../view/analysis/dataSet/dataSet_form.ftl | 23 ++- .../view/analysis/dataSet/dataSet_grid.ftl | 1 + .../view/include/page_obj_sqlEditor.ftl | 139 +++++++++++++++ .../webapp/WEB-INF/view/sqlpad/sqlpad.ftl | 97 +---------- datagear-web/src/main/webapp/WEB-INF/web.xml | 1 + .../src/main/webapp/static/css/common.css | 12 ++ 11 files changed, 342 insertions(+), 97 deletions(-) create mode 100644 datagear-web/src/main/java/org/datagear/web/controller/SqlEditorController.java create mode 100644 datagear-web/src/main/webapp/WEB-INF/view/include/page_obj_sqlEditor.ftl diff --git a/datagear-management/src/main/resources/org/datagear/management/ddl/datagear.sql b/datagear-management/src/main/resources/org/datagear/management/ddl/datagear.sql index cdc07eaa..a37b0c73 100644 --- a/datagear-management/src/main/resources/org/datagear/management/ddl/datagear.sql +++ b/datagear-management/src/main/resources/org/datagear/management/ddl/datagear.sql @@ -169,7 +169,7 @@ CREATE TABLE DATAGEAR_SQL_DATA_SET_FACTORY DSF_ID VARCHAR(50) NOT NULL, DSF_NAME VARCHAR(100) NOT NULL, DSF_SCHEMA_ID VARCHAR(50) NOT NULL, - DSF_SQL VARCHAR(50) NOT NULL, + DSF_SQL VARCHAR(1000) NOT NULL, DSF_CREATE_USER_ID VARCHAR(50), DSF_CREATE_TIME TIMESTAMP, PRIMARY KEY (DSF_ID) diff --git a/datagear-web/src/main/java/org/datagear/web/controller/SqlEditorController.java b/datagear-web/src/main/java/org/datagear/web/controller/SqlEditorController.java new file mode 100644 index 00000000..b8891ec0 --- /dev/null +++ b/datagear-web/src/main/java/org/datagear/web/controller/SqlEditorController.java @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2018 datagear.org. All Rights Reserved. + */ + +package org.datagear.web.controller; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.datagear.connection.ConnectionSource; +import org.datagear.dbinfo.ColumnInfo; +import org.datagear.dbinfo.DatabaseInfoResolver; +import org.datagear.dbinfo.TableInfo; +import org.datagear.management.domain.Schema; +import org.datagear.management.domain.User; +import org.datagear.management.service.SchemaService; +import org.datagear.web.convert.ClassDataConverter; +import org.datagear.web.util.KeywordMatcher; +import org.datagear.web.util.WebUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.MessageSource; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +/** + * SQL编辑器控制器。 + * + * @author datagear@163.com + * + */ +@Controller +@RequestMapping("/sqlEditor") +public class SqlEditorController extends AbstractSchemaConnController +{ + @Autowired + private DatabaseInfoResolver databaseInfoResolver; + + public SqlEditorController() + { + super(); + } + + public SqlEditorController(MessageSource messageSource, ClassDataConverter classDataConverter, + SchemaService schemaService, ConnectionSource connectionSource, DatabaseInfoResolver databaseInfoResolver) + { + super(messageSource, classDataConverter, schemaService, connectionSource); + this.databaseInfoResolver = databaseInfoResolver; + } + + public DatabaseInfoResolver getDatabaseInfoResolver() + { + return databaseInfoResolver; + } + + public void setDatabaseInfoResolver(DatabaseInfoResolver databaseInfoResolver) + { + this.databaseInfoResolver = databaseInfoResolver; + } + + @RequestMapping(value = "/{schemaId}/findTableNames", produces = CONTENT_TYPE_JSON) + @ResponseBody + public List findTableNames(HttpServletRequest request, HttpServletResponse response, + org.springframework.ui.Model springModel, @PathVariable("schemaId") String schemaId, + @RequestParam(value = "keyword", required = false) String keyword) throws Throwable + { + final User user = WebUtils.getUser(request, response); + + TableInfo[] tableInfos = new ReturnSchemaConnExecutor(request, response, springModel, schemaId, + true) + { + @Override + protected TableInfo[] execute(HttpServletRequest request, HttpServletResponse response, + org.springframework.ui.Model springModel, Schema schema) throws Throwable + { + checkReadTableDataPermission(schema, user); + + return getDatabaseInfoResolver().getTableInfos(getConnection()); + } + }.execute(); + + List tableInfoList = SchemaController.findByKeyword(tableInfos, keyword); + Collections.sort(tableInfoList, SchemaController.TABLE_INFO_SORT_BY_NAME_COMPARATOR); + + List tableNames = new ArrayList(); + + for (TableInfo tableInfo : tableInfoList) + tableNames.add(tableInfo.getName()); + + return tableNames; + } + + @RequestMapping(value = "/{schemaId}/findColumnNames", produces = CONTENT_TYPE_JSON) + @ResponseBody + public List findColumnNames(HttpServletRequest request, HttpServletResponse response, + org.springframework.ui.Model springModel, @PathVariable("schemaId") String schemaId, + @RequestParam("table") final String table, + @RequestParam(value = "keyword", required = false) String keyword) throws Throwable + { + final User user = WebUtils.getUser(request, response); + + ColumnInfo[] columnInfos = new ReturnSchemaConnExecutor(request, response, springModel, schemaId, + true) + { + @Override + protected ColumnInfo[] execute(HttpServletRequest request, HttpServletResponse response, + org.springframework.ui.Model springModel, Schema schema) throws Throwable + { + checkReadTableDataPermission(schema, user); + + return getDatabaseInfoResolver().getColumnInfos(getConnection(), table); + } + }.execute(); + + List columnInfoList = findByKeyword(columnInfos, keyword); + Collections.sort(columnInfoList, COLUMNINFO_INFO_SORT_BY_NAME_COMPARATOR); + + List columnNames = new ArrayList(); + + for (ColumnInfo columnInfo : columnInfoList) + columnNames.add(columnInfo.getName()); + + return columnNames; + } + + /** + * 根据列名称关键字查询{@linkplain ColumnInfo}列表。 + * + * @param columnInfos + * @param columnNameKeyword + * @return + */ + public static List findByKeyword(ColumnInfo[] columnInfos, String columnNameKeyword) + { + return KeywordMatcher. match(columnInfos, columnNameKeyword, + new KeywordMatcher.MatchValue() + { + @Override + public String[] get(ColumnInfo t) + { + return new String[] { t.getName() }; + } + }); + } + + public static Comparator COLUMNINFO_INFO_SORT_BY_NAME_COMPARATOR = new Comparator() + { + @Override + public int compare(ColumnInfo o1, ColumnInfo o2) + { + return o1.getName().compareTo(o2.getName()); + } + }; +} diff --git a/datagear-web/src/main/webapp/WEB-INF/view/analysis/chart/chart_grid.ftl b/datagear-web/src/main/webapp/WEB-INF/view/analysis/chart/chart_grid.ftl index 6a358464..b3bf4b5a 100644 --- a/datagear-web/src/main/webapp/WEB-INF/view/analysis/chart/chart_grid.ftl +++ b/datagear-web/src/main/webapp/WEB-INF/view/analysis/chart/chart_grid.ftl @@ -158,6 +158,7 @@ selectonly 是否选择操作,允许为null var tableSettings = po.buildDataTableSettingsAjax(tableColumns, po.url("pagingQueryData")); po.initDataTable(tableSettings); + po.bindResizeDataTable(); }) (${pageId}); diff --git a/datagear-web/src/main/webapp/WEB-INF/view/analysis/chartPlugin/chartPlugin_grid.ftl b/datagear-web/src/main/webapp/WEB-INF/view/analysis/chartPlugin/chartPlugin_grid.ftl index 1b7087e5..d983f2de 100644 --- a/datagear-web/src/main/webapp/WEB-INF/view/analysis/chartPlugin/chartPlugin_grid.ftl +++ b/datagear-web/src/main/webapp/WEB-INF/view/analysis/chartPlugin/chartPlugin_grid.ftl @@ -122,6 +122,7 @@ selectonly 是否选择操作,允许为null var tableSettings = po.buildDataTableSettingsAjax(tableColumns, po.url("queryData")); po.initDataTable(tableSettings); + po.bindResizeDataTable(); }) (${pageId}); diff --git a/datagear-web/src/main/webapp/WEB-INF/view/analysis/dashboard/dashboard_grid.ftl b/datagear-web/src/main/webapp/WEB-INF/view/analysis/dashboard/dashboard_grid.ftl index 854b99d0..bb24c106 100644 --- a/datagear-web/src/main/webapp/WEB-INF/view/analysis/dashboard/dashboard_grid.ftl +++ b/datagear-web/src/main/webapp/WEB-INF/view/analysis/dashboard/dashboard_grid.ftl @@ -166,6 +166,7 @@ selectonly 是否选择操作,允许为null var tableSettings = po.buildDataTableSettingsAjax(tableColumns, po.url("pagingQueryData")); po.initDataTable(tableSettings); + po.bindResizeDataTable(); }) (${pageId}); diff --git a/datagear-web/src/main/webapp/WEB-INF/view/analysis/dataSet/dataSet_form.ftl b/datagear-web/src/main/webapp/WEB-INF/view/analysis/dataSet/dataSet_form.ftl index 6204dd84..b0fed411 100644 --- a/datagear-web/src/main/webapp/WEB-INF/view/analysis/dataSet/dataSet_form.ftl +++ b/datagear-web/src/main/webapp/WEB-INF/view/analysis/dataSet/dataSet_form.ftl @@ -44,7 +44,10 @@ readonly 是否只读操作,允许为null
- + +
+
+
@@ -59,16 +62,23 @@ readonly 是否只读操作,允许为null <#include "../../include/page_js_obj.ftl" > <#include "../../include/page_obj_form.ftl"> +<#include "../../include/page_obj_sqlEditor.ftl"> diff --git a/datagear-web/src/main/webapp/WEB-INF/view/include/page_obj_sqlEditor.ftl b/datagear-web/src/main/webapp/WEB-INF/view/include/page_obj_sqlEditor.ftl new file mode 100644 index 00000000..ad744edf --- /dev/null +++ b/datagear-web/src/main/webapp/WEB-INF/view/include/page_obj_sqlEditor.ftl @@ -0,0 +1,139 @@ +<#-- +SQL编辑器JS片段。 + +依赖: +page_js_obj.ftl + +变量: +//数据源ID,不允许为null +po.getSqlEditorSchemaId +--> + diff --git a/datagear-web/src/main/webapp/WEB-INF/view/sqlpad/sqlpad.ftl b/datagear-web/src/main/webapp/WEB-INF/view/sqlpad/sqlpad.ftl index f3d30133..52384fb1 100644 --- a/datagear-web/src/main/webapp/WEB-INF/view/sqlpad/sqlpad.ftl +++ b/datagear-web/src/main/webapp/WEB-INF/view/sqlpad/sqlpad.ftl @@ -173,6 +173,7 @@ Schema schema 数据库,不允许为null <#include "../include/page_obj_format_time.ftl" > <#include "../include/page_obj_data_permission.ftl"> <#include "../include/page_obj_data_permission_ds_table.ftl"> +<#include "../include/page_obj_sqlEditor.ftl">