support function trigger view

This commit is contained in:
jipengfei-jpf
2023-07-16 20:48:10 +08:00
parent d9d78af61a
commit 288b8cc711
18 changed files with 637 additions and 2 deletions

View File

@ -0,0 +1,93 @@
package ai.chat2db.server.web.api.controller.rdb;
import ai.chat2db.server.domain.api.param.DatabaseOperationParam;
import ai.chat2db.server.domain.api.param.MetaDataQueryParam;
import ai.chat2db.server.domain.api.service.DatabaseService;
import ai.chat2db.server.domain.api.service.DlTemplateService;
import ai.chat2db.server.domain.api.service.TableService;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.web.api.aspect.ConnectionInfoAspect;
import ai.chat2db.server.web.api.controller.data.source.request.DataSourceBaseRequest;
import ai.chat2db.server.web.api.controller.rdb.converter.RdbWebConverter;
import ai.chat2db.server.web.api.controller.rdb.request.UpdateDatabaseRequest;
import ai.chat2db.server.web.api.controller.rdb.vo.MetaSchemaVO;
import ai.chat2db.spi.model.MetaSchema;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ConnectionInfoAspect
@RequestMapping("/api/rdb/datbase")
@RestController
public class DatabaseController {
@Autowired
private TableService tableService;
@Autowired
private DlTemplateService dlTemplateService;
@Autowired
private RdbWebConverter rdbWebConverter;
@Autowired
private DatabaseService databaseService;
/**
* 查询数据库里包含的database_schema_list
*
* @param request
* @return
*/
@GetMapping("/database_schema_list")
public DataResult<MetaSchemaVO> databaseSchemaList(@Valid DataSourceBaseRequest request) {
MetaDataQueryParam queryParam = MetaDataQueryParam.builder().dataSourceId(request.getDataSourceId()).refresh(
request.isRefresh()).build();
DataResult<MetaSchema> result = databaseService.queryDatabaseSchema(queryParam);
MetaSchemaVO schemaDto2vo = rdbWebConverter.metaSchemaDto2vo(result.getData());
return DataResult.of(schemaDto2vo);
}
/**
* 删除数据库
*
* @param request
* @return
*/
@PostMapping("/delete_database")
public ActionResult deleteDatabase(@Valid @RequestBody DataSourceBaseRequest request) {
DatabaseOperationParam param = DatabaseOperationParam.builder().databaseName(request.getDatabaseName()).build();
return databaseService.deleteDatabase(param);
}
/**
* 创建database
*
* @param request
* @return
*/
@PostMapping("/create_database")
public ActionResult createDatabase(@Valid @RequestBody DataSourceBaseRequest request) {
DatabaseOperationParam param = DatabaseOperationParam.builder().databaseName(request.getDatabaseName()).build();
return databaseService.createDatabase(param);
}
/**
* 修改database
*
* @param request
* @return
*/
@PostMapping("/modify_database")
public ActionResult modifyDatabase(@Valid @RequestBody UpdateDatabaseRequest request) {
DatabaseOperationParam param = DatabaseOperationParam.builder().databaseName(request.getDatabaseName())
.newDatabaseName(request.getNewDatabaseName()).build();
return databaseService.modifyDatabase(param);
}
}

View File

@ -0,0 +1,27 @@
package ai.chat2db.server.web.api.controller.rdb;
import ai.chat2db.server.domain.api.service.FunctionService;
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import ai.chat2db.server.web.api.aspect.ConnectionInfoAspect;
import ai.chat2db.server.web.api.controller.rdb.request.TableBriefQueryRequest;
import ai.chat2db.spi.model.Function;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ConnectionInfoAspect
@RequestMapping("/api/rdb/function")
@RestController
public class FunctionController {
@Autowired
private FunctionService functionService;
@GetMapping("/list")
public ListResult<Function> list(@Valid TableBriefQueryRequest request) {
return functionService.functions(request.getDatabaseName(), request.getSchemaName());
}
}

View File

@ -0,0 +1,24 @@
package ai.chat2db.server.web.api.controller.rdb;
import ai.chat2db.server.domain.api.service.ProcedureService;
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import ai.chat2db.server.web.api.aspect.ConnectionInfoAspect;
import ai.chat2db.server.web.api.controller.rdb.request.TableBriefQueryRequest;
import ai.chat2db.spi.model.Procedure;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ConnectionInfoAspect
@RequestMapping("/api/rdb/procedure")
@RestController
public class ProcedureController {
private ProcedureService procedureService;
@GetMapping("/list")
public ListResult<Procedure> list(@Valid TableBriefQueryRequest request) {
return procedureService.procedures(request.getDatabaseName(), request.getSchemaName());
}
}

View File

@ -45,6 +45,7 @@ import org.springframework.web.bind.annotation.RestController;
@ConnectionInfoAspect
@RequestMapping("/api/rdb/ddl")
@RestController
@Deprecated
public class RdbDdlController {
@Autowired
@ -183,6 +184,8 @@ public class RdbDdlController {
return databaseService.modifySchema(param);
}
/**
* 查询当前DB下的表columns
* d

View File

@ -0,0 +1,90 @@
package ai.chat2db.server.web.api.controller.rdb;
import java.util.List;
import ai.chat2db.server.domain.api.param.SchemaOperationParam;
import ai.chat2db.server.domain.api.param.SchemaQueryParam;
import ai.chat2db.server.domain.api.service.DatabaseService;
import ai.chat2db.server.domain.api.service.DlTemplateService;
import ai.chat2db.server.domain.api.service.TableService;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import ai.chat2db.server.web.api.controller.data.source.request.DataSourceBaseRequest;
import ai.chat2db.server.web.api.controller.rdb.converter.RdbWebConverter;
import ai.chat2db.server.web.api.controller.rdb.request.UpdateSchemaRequest;
import ai.chat2db.server.web.api.controller.rdb.vo.SchemaVO;
import ai.chat2db.spi.model.Schema;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
public class SchemaController {
@Autowired
private TableService tableService;
@Autowired
private DlTemplateService dlTemplateService;
@Autowired
private RdbWebConverter rdbWebConverter;
@Autowired
private DatabaseService databaseService;
/**
* 查询数据库里包含的schema_list
*
* @param request
* @return
*/
@GetMapping("/list")
public ListResult<SchemaVO> list(@Valid DataSourceBaseRequest request) {
SchemaQueryParam queryParam = SchemaQueryParam.builder().dataBaseName(request.getDatabaseName()).build();
ListResult<Schema> tableColumns = databaseService.querySchema(queryParam);
List<SchemaVO> tableVOS = rdbWebConverter.schemaDto2vo(tableColumns.getData());
return ListResult.of(tableVOS);
}
/**
* 删除schema
*
* @param request
* @return
*/
@PostMapping("/delete_schema")
public ActionResult deleteSchema(@Valid @RequestBody DataSourceBaseRequest request) {
SchemaOperationParam param = SchemaOperationParam.builder().databaseName(request.getDatabaseName())
.schemaName(request.getSchemaName()).build();
return databaseService.deleteSchema(param);
}
/**
* 创建schema
*
* @param request
* @return
*/
@PostMapping("/create_schema")
public ActionResult createSchema(@Valid @RequestBody DataSourceBaseRequest request) {
SchemaOperationParam param = SchemaOperationParam.builder().databaseName(request.getDatabaseName())
.schemaName(request.getSchemaName()).build();
return databaseService.createSchema(param);
}
/**
* 创建database
*
* @param request
* @return
*/
@PostMapping("/modify_schema")
public ActionResult modifySchema(@Valid @RequestBody UpdateSchemaRequest request) {
SchemaOperationParam param = SchemaOperationParam.builder().databaseName(request.getDatabaseName())
.schemaName(request.getSchemaName()).newSchemaName(request.getNewSchemaName()).build();
return databaseService.modifySchema(param);
}
}

View File

@ -0,0 +1,197 @@
package ai.chat2db.server.web.api.controller.rdb;
import java.util.List;
import ai.chat2db.server.domain.api.param.DropParam;
import ai.chat2db.server.domain.api.param.ShowCreateTableParam;
import ai.chat2db.server.domain.api.param.TablePageQueryParam;
import ai.chat2db.server.domain.api.param.TableQueryParam;
import ai.chat2db.server.domain.api.param.TableSelector;
import ai.chat2db.server.domain.api.service.DatabaseService;
import ai.chat2db.server.domain.api.service.DlTemplateService;
import ai.chat2db.server.domain.api.service.TableService;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import ai.chat2db.server.tools.base.wrapper.result.PageResult;
import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult;
import ai.chat2db.server.web.api.aspect.ConnectionInfoAspect;
import ai.chat2db.server.web.api.controller.rdb.converter.RdbWebConverter;
import ai.chat2db.server.web.api.controller.rdb.request.DdlExportRequest;
import ai.chat2db.server.web.api.controller.rdb.request.TableBriefQueryRequest;
import ai.chat2db.server.web.api.controller.rdb.request.TableCreateDdlQueryRequest;
import ai.chat2db.server.web.api.controller.rdb.request.TableDeleteRequest;
import ai.chat2db.server.web.api.controller.rdb.request.TableDetailQueryRequest;
import ai.chat2db.server.web.api.controller.rdb.request.TableModifySqlRequest;
import ai.chat2db.server.web.api.controller.rdb.request.TableUpdateDdlQueryRequest;
import ai.chat2db.server.web.api.controller.rdb.vo.ColumnVO;
import ai.chat2db.server.web.api.controller.rdb.vo.IndexVO;
import ai.chat2db.server.web.api.controller.rdb.vo.SqlVO;
import ai.chat2db.server.web.api.controller.rdb.vo.TableVO;
import ai.chat2db.spi.model.Table;
import ai.chat2db.spi.model.TableColumn;
import ai.chat2db.spi.model.TableIndex;
import com.google.common.collect.Lists;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ConnectionInfoAspect
@RequestMapping("/api/rdb/table")
@RestController
public class TableController {
@Autowired
private TableService tableService;
@Autowired
private DlTemplateService dlTemplateService;
@Autowired
private RdbWebConverter rdbWebConverter;
@Autowired
private DatabaseService databaseService;
/**
* 查询当前DB下的表列表
*
* @param request
* @return
*/
@GetMapping("/list")
public WebPageResult<TableVO> list(@Valid TableBriefQueryRequest request) {
TablePageQueryParam queryParam = rdbWebConverter.tablePageRequest2param(request);
TableSelector tableSelector = new TableSelector();
tableSelector.setColumnList(false);
tableSelector.setIndexList(false);
PageResult<Table> tableDTOPageResult = tableService.pageQuery(queryParam, tableSelector);
List<TableVO> tableVOS = rdbWebConverter.tableDto2vo(tableDTOPageResult.getData());
return WebPageResult.of(tableVOS, tableDTOPageResult.getTotal(), request.getPageNo(),
request.getPageSize());
}
/**
* 查询当前DB下的表columns
* d
*
* @param request
* @return
*/
@GetMapping("/column_list")
public ListResult<ColumnVO> columnList(@Valid TableDetailQueryRequest request) {
TableQueryParam queryParam = rdbWebConverter.tableRequest2param(request);
List<TableColumn> tableColumns = tableService.queryColumns(queryParam);
List<ColumnVO> tableVOS = rdbWebConverter.columnDto2vo(tableColumns);
return ListResult.of(tableVOS);
}
/**
* 查询当前DB下的表index
*
* @param request
* @return
*/
@GetMapping("/index_list")
public ListResult<IndexVO> indexList(@Valid TableDetailQueryRequest request) {
TableQueryParam queryParam = rdbWebConverter.tableRequest2param(request);
List<TableIndex> tableIndices = tableService.queryIndexes(queryParam);
List<IndexVO> indexVOS = rdbWebConverter.indexDto2vo(tableIndices);
return ListResult.of(indexVOS);
}
/**
* 查询当前DB下的表key
*
* @param request
* @return
*/
@GetMapping("/key_list")
public ListResult<IndexVO> keyList(@Valid TableDetailQueryRequest request) {
// TODO 增加查询key实现
return ListResult.of(Lists.newArrayList());
}
/**
* 导出建表语句
*
* @param request
* @return
*/
@GetMapping("/export")
public DataResult<String> export(@Valid DdlExportRequest request) {
ShowCreateTableParam param = rdbWebConverter.ddlExport2showCreate(request);
return tableService.showCreateTable(param);
}
/**
* 建表语句样例
*
* @param request
* @return
*/
@GetMapping("/create/example")
public DataResult<String> createExample(@Valid TableCreateDdlQueryRequest request) {
return tableService.createTableExample(request.getDbType());
}
/**
* 更新表语句样例
*
* @param request
* @return
*/
@GetMapping("/update/example")
public DataResult<String> updateExample(@Valid TableUpdateDdlQueryRequest request) {
return tableService.alterTableExample(request.getDbType());
}
/**
* 获取表下列和索引等信息
*
* @param request
* @return
*/
@GetMapping("/query")
public DataResult<TableVO> query(@Valid TableDetailQueryRequest request) {
TableQueryParam queryParam = rdbWebConverter.tableRequest2param(request);
TableSelector tableSelector = new TableSelector();
tableSelector.setColumnList(true);
tableSelector.setIndexList(true);
DataResult<Table> tableDTODataResult = tableService.query(queryParam, tableSelector);
TableVO tableVO = rdbWebConverter.tableDto2vo(tableDTODataResult.getData());
return DataResult.of(tableVO);
}
/**
* 获取修改表的sql语句
*
* @param request
* @return
*/
@GetMapping("/modify/sql")
public ListResult<SqlVO> modifySql(@Valid TableModifySqlRequest request) {
return tableService.buildSql(
rdbWebConverter.tableRequest2param(request.getOldTable()),
rdbWebConverter.tableRequest2param(request.getNewTable()))
.map(rdbWebConverter::dto2vo);
}
/**
* 删除表
*
* @param request
* @return
*/
@PostMapping("/delete")
public ActionResult delete(@Valid @RequestBody TableDeleteRequest request) {
DropParam dropParam = rdbWebConverter.tableDelete2dropParam(request);
return tableService.drop(dropParam);
}
}

View File

@ -0,0 +1,27 @@
package ai.chat2db.server.web.api.controller.rdb;
import ai.chat2db.server.domain.api.service.TriggerService;
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import ai.chat2db.server.web.api.aspect.ConnectionInfoAspect;
import ai.chat2db.server.web.api.controller.rdb.request.TableBriefQueryRequest;
import ai.chat2db.spi.model.Trigger;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ConnectionInfoAspect
@RequestMapping("/api/rdb/trigger")
@RestController
public class TriggerController {
@Autowired
private TriggerService triggerService;
@GetMapping("/list")
public ListResult<Trigger> list(@Valid TableBriefQueryRequest request) {
return triggerService.triggers(request.getDatabaseName(), request.getSchemaName());
}
}

View File

@ -0,0 +1,35 @@
package ai.chat2db.server.web.api.controller.rdb;
import java.util.List;
import ai.chat2db.server.domain.api.service.ViewService;
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import ai.chat2db.server.web.api.aspect.ConnectionInfoAspect;
import ai.chat2db.server.web.api.controller.rdb.converter.RdbWebConverter;
import ai.chat2db.server.web.api.controller.rdb.request.TableBriefQueryRequest;
import ai.chat2db.server.web.api.controller.rdb.vo.TableVO;
import ai.chat2db.spi.model.Table;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ConnectionInfoAspect
@RequestMapping("/api/rdb/view")
@RestController
public class ViewController {
@Autowired
private ViewService viewService;
@Autowired
private RdbWebConverter rdbWebConverter;
@GetMapping("/list")
public ListResult<TableVO> list(@Valid TableBriefQueryRequest request) {
ListResult<Table> tableDTOPageResult = viewService.views(request.getDatabaseName(), request.getSchemaName());
List<TableVO> tableVOS = rdbWebConverter.tableDto2vo(tableDTOPageResult.getData());
return ListResult.of(tableVOS);
}
}