support for mongodb

This commit is contained in:
JiaJu Zhuang
2023-11-26 14:57:24 +08:00
parent 536ad6f53f
commit 5549908aaa
9 changed files with 267 additions and 61 deletions

View File

@ -6,12 +6,14 @@ import java.util.List;
import ai.chat2db.server.domain.api.param.DlExecuteParam;
import ai.chat2db.server.domain.api.param.UpdateSelectResultParam;
import ai.chat2db.server.domain.api.service.DlTemplateService;
import ai.chat2db.server.tools.base.enums.DataSourceTypeEnum;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
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.DdlCountRequest;
import ai.chat2db.server.web.api.controller.rdb.request.DmlRequest;
import ai.chat2db.server.web.api.controller.rdb.request.DmlTableRequest;
import ai.chat2db.server.web.api.controller.rdb.request.SelectResultUpdateRequest;
import ai.chat2db.server.web.api.controller.rdb.vo.ExecuteResultVO;
import ai.chat2db.spi.model.ExecuteResult;
@ -55,6 +57,25 @@ public class RdbDmlController {
return ListResult.of(resultVOS);
}
/**
* 查询表结构信息
*
* @param request
* @return
*/
@RequestMapping(value = "/execute_table", method = {RequestMethod.POST, RequestMethod.PUT})
public ListResult<ExecuteResultVO> executeTable(@RequestBody DmlTableRequest request) {
DlExecuteParam param = rdbWebConverter.request2param(request);
// 解析sql
String type = Chat2DBContext.getConnectInfo().getDbType();
if (DataSourceTypeEnum.MONGODB.getCode().equals(type)) {
param.setSql("db." + request.getTableName() + ".find()");
} else {
param.setSql("select * from " + request.getTableName());
}
return dlTemplateService.execute(param)
.map(rdbWebConverter::dto2vo);
}
/**
* update 查询结果
@ -63,22 +84,22 @@ public class RdbDmlController {
* @return
*/
@RequestMapping(value = "/execute_update", method = {RequestMethod.POST, RequestMethod.PUT})
public DataResult<ExecuteResultVO> executeSelectResultUpdate(@RequestBody DmlRequest request) {
public DataResult<ExecuteResultVO> executeSelectResultUpdate(@RequestBody DmlRequest request) {
DlExecuteParam param = rdbWebConverter.request2param(request);
DataResult<ExecuteResult> result = dlTemplateService.executeUpdate(param);
if(!result.success()){
return DataResult.error(result.getErrorCode(),result.getErrorMessage());
DataResult<ExecuteResult> result = dlTemplateService.executeUpdate(param);
if (!result.success()) {
return DataResult.error(result.getErrorCode(), result.getErrorMessage());
}
return DataResult.of(rdbWebConverter.dto2vo(result.getData()));
return DataResult.of(rdbWebConverter.dto2vo(result.getData()));
}
@RequestMapping(value = "/get_update_sql", method = {RequestMethod.POST, RequestMethod.PUT})
public DataResult<String> getUpdateSelectResultSql(@RequestBody SelectResultUpdateRequest request) {
UpdateSelectResultParam param = rdbWebConverter.request2param(request);
return dlTemplateService.updateSelectResult(param);
}
/**
* 增删改查等数据运维
*
@ -109,7 +130,7 @@ public class RdbDmlController {
if (flag) {
//connection.commit();
return DataResult.of(resultVOS.get(0));
}else {
} else {
//connection.rollback();
return DataResult.of(executeResult);
}

View File

@ -41,6 +41,15 @@ public abstract class RdbWebConverter {
*/
public abstract DlExecuteParam request2param(DmlRequest request);
/**
* 参数转换
*
* @param request
* @return
*/
public abstract DlExecuteParam request2param(DmlTableRequest request);
/**
* 参数转换
*

View File

@ -0,0 +1,45 @@
package ai.chat2db.server.web.api.controller.rdb.request;
import ai.chat2db.server.web.api.controller.data.source.request.DataSourceBaseRequest;
import ai.chat2db.server.web.api.controller.data.source.request.DataSourceConsoleRequestInfo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* @author moji
* @version TableManageRequest.java, v 0.1 2022年09月16日 17:55 moji Exp $
* @date 2022/09/16
*/
@Data
public class DmlTableRequest extends DataSourceBaseRequest implements DataSourceConsoleRequestInfo {
/**
* 表的名词
*/
@NotNull
private String tableName;
/**
* 控制台id
*/
@NotNull
private Long consoleId;
/**
* 分页编码
* 只有select语句才有
*/
private Integer pageNo;
/**
* 分页大小
* 只有select语句才有
*/
private Integer pageSize;
/**
* 返回全部数据
* 只有select语句才有
*/
private Boolean pageSizeAll;
}