Skip to content

Commit 5549908

Browse files
committed
support for mongodb
1 parent 536ad6f commit 5549908

9 files changed

Lines changed: 267 additions & 61 deletions

File tree

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,30 @@
11
package ai.chat2db.plugin.mongodb;
22

3+
import java.sql.Connection;
4+
import java.sql.SQLException;
5+
36
import ai.chat2db.spi.DBManage;
47
import ai.chat2db.spi.jdbc.DefaultDBManage;
8+
import ai.chat2db.spi.sql.SQLExecutor;
9+
import org.springframework.util.StringUtils;
510

611
public class MongodbManage extends DefaultDBManage implements DBManage {
12+
@Override
13+
public void connectDatabase(Connection connection, String database) {
14+
if (StringUtils.isEmpty(database)) {
15+
return;
16+
}
17+
try {
18+
SQLExecutor.getInstance().execute(connection, "use " + database + ";");
19+
} catch (SQLException e) {
20+
throw new RuntimeException(e);
21+
}
22+
}
23+
24+
@Override
25+
public void dropTable(Connection connection, String databaseName, String schemaName, String tableName) {
26+
String sql = " db. " + tableName + ".drop();";
27+
SQLExecutor.getInstance().executeSql(connection, sql, resultSet -> null);
28+
}
729

830
}

chat2db-server/chat2db-server-tools/chat2db-server-tools-base/src/main/java/ai/chat2db/server/tools/base/enums/DataSourceTypeEnum.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ public enum DataSourceTypeEnum implements BaseEnum<String> {
2020
*/
2121
REDIS("redis数据库连接"),
2222

23+
24+
/**
25+
* mongo数据库连接
26+
*/
27+
MONGODB("mongo数据库连接"),
28+
2329
;
2430

2531
final String description;

chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/rdb/RdbDmlController.java

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@
66
import ai.chat2db.server.domain.api.param.DlExecuteParam;
77
import ai.chat2db.server.domain.api.param.UpdateSelectResultParam;
88
import ai.chat2db.server.domain.api.service.DlTemplateService;
9+
import ai.chat2db.server.tools.base.enums.DataSourceTypeEnum;
910
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
1011
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
1112
import ai.chat2db.server.web.api.aspect.ConnectionInfoAspect;
1213
import ai.chat2db.server.web.api.controller.rdb.converter.RdbWebConverter;
1314
import ai.chat2db.server.web.api.controller.rdb.request.DdlCountRequest;
1415
import ai.chat2db.server.web.api.controller.rdb.request.DmlRequest;
16+
import ai.chat2db.server.web.api.controller.rdb.request.DmlTableRequest;
1517
import ai.chat2db.server.web.api.controller.rdb.request.SelectResultUpdateRequest;
1618
import ai.chat2db.server.web.api.controller.rdb.vo.ExecuteResultVO;
1719
import ai.chat2db.spi.model.ExecuteResult;
@@ -55,6 +57,25 @@ public ListResult<ExecuteResultVO> manage(@RequestBody DmlRequest request) {
5557
return ListResult.of(resultVOS);
5658
}
5759

60+
/**
61+
* 查询表结构信息
62+
*
63+
* @param request
64+
* @return
65+
*/
66+
@RequestMapping(value = "/execute_table", method = {RequestMethod.POST, RequestMethod.PUT})
67+
public ListResult<ExecuteResultVO> executeTable(@RequestBody DmlTableRequest request) {
68+
DlExecuteParam param = rdbWebConverter.request2param(request);
69+
// 解析sql
70+
String type = Chat2DBContext.getConnectInfo().getDbType();
71+
if (DataSourceTypeEnum.MONGODB.getCode().equals(type)) {
72+
param.setSql("db." + request.getTableName() + ".find()");
73+
} else {
74+
param.setSql("select * from " + request.getTableName());
75+
}
76+
return dlTemplateService.execute(param)
77+
.map(rdbWebConverter::dto2vo);
78+
}
5879

5980
/**
6081
* update 查询结果
@@ -63,22 +84,22 @@ public ListResult<ExecuteResultVO> manage(@RequestBody DmlRequest request) {
6384
* @return
6485
*/
6586
@RequestMapping(value = "/execute_update", method = {RequestMethod.POST, RequestMethod.PUT})
66-
public DataResult<ExecuteResultVO> executeSelectResultUpdate(@RequestBody DmlRequest request) {
87+
public DataResult<ExecuteResultVO> executeSelectResultUpdate(@RequestBody DmlRequest request) {
6788
DlExecuteParam param = rdbWebConverter.request2param(request);
68-
DataResult<ExecuteResult> result = dlTemplateService.executeUpdate(param);
69-
if(!result.success()){
70-
return DataResult.error(result.getErrorCode(),result.getErrorMessage());
89+
DataResult<ExecuteResult> result = dlTemplateService.executeUpdate(param);
90+
if (!result.success()) {
91+
return DataResult.error(result.getErrorCode(), result.getErrorMessage());
7192
}
72-
return DataResult.of(rdbWebConverter.dto2vo(result.getData()));
93+
return DataResult.of(rdbWebConverter.dto2vo(result.getData()));
7394

7495
}
96+
7597
@RequestMapping(value = "/get_update_sql", method = {RequestMethod.POST, RequestMethod.PUT})
7698
public DataResult<String> getUpdateSelectResultSql(@RequestBody SelectResultUpdateRequest request) {
7799
UpdateSelectResultParam param = rdbWebConverter.request2param(request);
78100
return dlTemplateService.updateSelectResult(param);
79101
}
80102

81-
82103
/**
83104
* 增删改查等数据运维
84105
*
@@ -109,7 +130,7 @@ public DataResult<ExecuteResultVO> executeDDL(@RequestBody DmlRequest request) {
109130
if (flag) {
110131
//connection.commit();
111132
return DataResult.of(resultVOS.get(0));
112-
}else {
133+
} else {
113134
//connection.rollback();
114135
return DataResult.of(executeResult);
115136
}

chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/rdb/converter/RdbWebConverter.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ public abstract class RdbWebConverter {
4141
*/
4242
public abstract DlExecuteParam request2param(DmlRequest request);
4343

44+
45+
/**
46+
* 参数转换
47+
*
48+
* @param request
49+
* @return
50+
*/
51+
public abstract DlExecuteParam request2param(DmlTableRequest request);
52+
4453
/**
4554
* 参数转换
4655
*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package ai.chat2db.server.web.api.controller.rdb.request;
2+
3+
import ai.chat2db.server.web.api.controller.data.source.request.DataSourceBaseRequest;
4+
import ai.chat2db.server.web.api.controller.data.source.request.DataSourceConsoleRequestInfo;
5+
import jakarta.validation.constraints.NotNull;
6+
import lombok.Data;
7+
8+
/**
9+
* @author moji
10+
* @version TableManageRequest.java, v 0.1 2022年09月16日 17:55 moji Exp $
11+
* @date 2022/09/16
12+
*/
13+
@Data
14+
public class DmlTableRequest extends DataSourceBaseRequest implements DataSourceConsoleRequestInfo {
15+
16+
/**
17+
* 表的名词
18+
*/
19+
@NotNull
20+
private String tableName;
21+
22+
/**
23+
* 控制台id
24+
*/
25+
@NotNull
26+
private Long consoleId;
27+
28+
/**
29+
* 分页编码
30+
* 只有select语句才有
31+
*/
32+
private Integer pageNo;
33+
34+
/**
35+
* 分页大小
36+
* 只有select语句才有
37+
*/
38+
private Integer pageSize;
39+
40+
/**
41+
* 返回全部数据
42+
* 只有select语句才有
43+
*/
44+
private Boolean pageSizeAll;
45+
}

chat2db-server/chat2db-spi/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,5 +79,11 @@
7979
<artifactId>jts-core</artifactId>
8080
<version>1.19.0</version> <!-- 确保使用最新的版本 -->
8181
</dependency>
82+
83+
<!-- https://mvnrepository.com/artifact/org.mongodb/bson -->
84+
<dependency>
85+
<groupId>org.mongodb</groupId>
86+
<artifactId>bson</artifactId>
87+
</dependency>
8288
</dependencies>
8389
</project>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package ai.chat2db.spi.sql;
2+
3+
import org.bson.json.Converter;
4+
import org.bson.json.StrictJsonWriter;
5+
import org.bson.types.ObjectId;
6+
7+
public class MongExtendedJsonObjectIdConverter implements Converter<ObjectId> {
8+
@Override
9+
public void convert(final ObjectId value, final StrictJsonWriter writer) {
10+
writer.writeStartObject();
11+
writer.writeString("", value.toHexString());
12+
writer.writeEndObject();
13+
}
14+
}

0 commit comments

Comments
 (0)