mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-07-29 18:53:12 +08:00
Merge branch 'CodePhiliaX:dev' into dev
This commit is contained in:
@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
# Chat2DB
|
# Chat2DB
|
||||||
|
|
||||||
**English** | [中文](README_CN.md)· [Changelog](CHANGELOG.md) · [Doc](https://docs./) · [Report Bug](https://github.com/chat2db/Chat2DB/issues) · [PR](https://github.com/chat2db/Chat2DB/pulls)
|
**English** | [中文](README_CN.md)· [Changelog](CHANGELOG.md) · [Doc](https://github.com/chat2db/Chat2db-website-old/blob/main/docs/index.md) · [Report Bug](https://github.com/chat2db/Chat2DB/issues) · [PR](https://github.com/chat2db/Chat2DB/pulls)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -65,6 +65,8 @@
|
|||||||
- huggingface🤗:[Chat2DB-SQL-7B](https://huggingface.co/Chat2DB/Chat2DB-SQL-7B)
|
- huggingface🤗:[Chat2DB-SQL-7B](https://huggingface.co/Chat2DB/Chat2DB-SQL-7B)
|
||||||
- modelscope:[Chat2DB-SQL-7B](https://modelscope.cn/models/Chat2DB/Chat2DB-SQL-7B/summary)
|
- modelscope:[Chat2DB-SQL-7B](https://modelscope.cn/models/Chat2DB/Chat2DB-SQL-7B/summary)
|
||||||
|
|
||||||
|
### 🎁🎁🎁 Deploy the InternLM model on Chat2DB
|
||||||
|
Thanks to [InternLM](https://github.com/InternLM/InternLM) for the strong support for this project. In the custom models of this project, multiple model weights from InternLM can be integrated. For more details, please refer to [chat2db-internlm-deploy](https://github.com/chat2db/chat2db-internlm-deploy)
|
||||||
|
|
||||||
## 🚀 Supported databases
|
## 🚀 Supported databases
|
||||||
Chat2DB Pro supports all the following databases, including the most requested Redis feature.
|
Chat2DB Pro supports all the following databases, including the most requested Redis feature.
|
||||||
|
@ -66,6 +66,8 @@
|
|||||||
- huggingface🤗:[Chat2DB-SQL-7B](https://huggingface.co/Chat2DB/Chat2DB-SQL-7B)
|
- huggingface🤗:[Chat2DB-SQL-7B](https://huggingface.co/Chat2DB/Chat2DB-SQL-7B)
|
||||||
- modelscope:[Chat2DB-SQL-7B](https://modelscope.cn/models/Chat2DB/Chat2DB-SQL-7B/summary)
|
- modelscope:[Chat2DB-SQL-7B](https://modelscope.cn/models/Chat2DB/Chat2DB-SQL-7B/summary)
|
||||||
|
|
||||||
|
### 🎁🎁🎁 在Chat2DB上即成InternLM模型
|
||||||
|
感谢InternLM对本项目的大力支持,在本项目中的自定义模型中,可以集成InternLM的多个模型权重,具体请参考[chat2db-internlm-deploy](https://github.com/chat2db/chat2db-internlm-deploy)
|
||||||
|
|
||||||
## 🚀 支持的数据库
|
## 🚀 支持的数据库
|
||||||
Chat2DB Pro支持以下所有数据库,包括备受期待的Redis功能。
|
Chat2DB Pro支持以下所有数据库,包括备受期待的Redis功能。
|
||||||
|
@ -23,7 +23,7 @@ public enum PostgreSQLColumnTypeEnum implements ColumnBuilder {
|
|||||||
CIDR("CIDR", false, false, true, false, false, false, true, true, false, false),
|
CIDR("CIDR", false, false, true, false, false, false, true, true, false, false),
|
||||||
CIRCLE("CIRCLE", false, false, true, false, false, false, true, true, false, false),
|
CIRCLE("CIRCLE", false, false, true, false, false, false, true, true, false, false),
|
||||||
DATE("DATE", false, false, true, false, false, false, true, true, false, false),
|
DATE("DATE", false, false, true, false, false, false, true, true, false, false),
|
||||||
DECIMAL("DECIMAL", true, false, true, false, false, false, true, true, false, false),
|
DECIMAL("DECIMAL", true, true, true, false, false, false, true, true, false, false),
|
||||||
FLOAT4("FLOAT4", false, false, true, false, false, false, true, true, false, false),
|
FLOAT4("FLOAT4", false, false, true, false, false, false, true, true, false, false),
|
||||||
FLOAT8("FLOAT8", false, false, true, false, false, false, true, true, false, false),
|
FLOAT8("FLOAT8", false, false, true, false, false, false, true, true, false, false),
|
||||||
INET("INET", false, false, true, false, false, false, true, true, false, false),
|
INET("INET", false, false, true, false, false, false, true, true, false, false),
|
||||||
@ -37,7 +37,7 @@ public enum PostgreSQLColumnTypeEnum implements ColumnBuilder {
|
|||||||
LSEG("LSEG", false, false, true, false, false, false, true, true, false, false),
|
LSEG("LSEG", false, false, true, false, false, false, true, true, false, false),
|
||||||
MACADDR("MACADDR", false, false, true, false, false, false, true, true, false, false),
|
MACADDR("MACADDR", false, false, true, false, false, false, true, true, false, false),
|
||||||
MONEY("MONEY", false, false, true, false, false, false, true, true, false, false),
|
MONEY("MONEY", false, false, true, false, false, false, true, true, false, false),
|
||||||
NUMERIC("NUMERIC", true, false, true, false, false, false, true, true, false, false),
|
NUMERIC("NUMERIC", true, true, true, false, false, false, true, true, false, false),
|
||||||
PATH("PATH", false, false, true, false, false, false, true, true, false, false),
|
PATH("PATH", false, false, true, false, false, false, true, true, false, false),
|
||||||
POINT("POINT", false, false, true, false, false, false, true, true, false, false),
|
POINT("POINT", false, false, true, false, false, false, true, true, false, false),
|
||||||
POLYGON("POLYGON", false, false, true, false, false, false, true, true, false, false),
|
POLYGON("POLYGON", false, false, true, false, false, false, true, true, false, false),
|
||||||
|
@ -0,0 +1,82 @@
|
|||||||
|
package ai.chat2db.server.start.test.core;
|
||||||
|
|
||||||
|
import ai.chat2db.server.domain.api.service.TriggerService;
|
||||||
|
import ai.chat2db.server.domain.repository.Dbutils;
|
||||||
|
import ai.chat2db.server.start.test.TestApplication;
|
||||||
|
import ai.chat2db.server.start.test.dialect.DialectProperties;
|
||||||
|
import ai.chat2db.server.start.test.dialect.TestUtils;
|
||||||
|
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
|
||||||
|
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
|
||||||
|
import ai.chat2db.server.tools.common.model.Context;
|
||||||
|
import ai.chat2db.server.tools.common.model.LoginUser;
|
||||||
|
import ai.chat2db.server.tools.common.util.ContextUtils;
|
||||||
|
import ai.chat2db.spi.model.Trigger;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Juechen
|
||||||
|
* @version : TriggerServiceTest.java
|
||||||
|
*/
|
||||||
|
public class TriggerServiceTest extends TestApplication {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TriggerService triggerService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private List<DialectProperties> dialectPropertiesList;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTriggers() {
|
||||||
|
userLoginIdentity(false,9L);
|
||||||
|
|
||||||
|
for (DialectProperties dialectProperties : dialectPropertiesList) {
|
||||||
|
Long dataSourceId = TestUtils.nextLong();
|
||||||
|
Long consoleId = TestUtils.nextLong();
|
||||||
|
TestUtils.buildContext(dialectProperties, dataSourceId, consoleId);
|
||||||
|
|
||||||
|
if (dialectProperties.getDbType().equalsIgnoreCase("mysql")) {
|
||||||
|
String databaseName = "ali_dbhub_test";
|
||||||
|
ListResult<Trigger> triggers = triggerService.triggers(databaseName, "");
|
||||||
|
for (Trigger trigger : triggers.getData()) {
|
||||||
|
DataResult<Trigger> detail = triggerService.detail(databaseName, "", trigger.getTriggerName());
|
||||||
|
System.out.println(detail.getData());
|
||||||
|
}
|
||||||
|
Assertions.assertTrue(triggers.getSuccess(), triggers.getErrorMessage());
|
||||||
|
} else if (dialectProperties.getDbType().equalsIgnoreCase("postgresql")) {
|
||||||
|
String databaseName = "ali_dbhub_test";
|
||||||
|
ListResult<Trigger> triggers = triggerService.triggers(databaseName, "test");
|
||||||
|
for (Trigger trigger : triggers.getData()) {
|
||||||
|
DataResult<Trigger> detail = triggerService.detail(databaseName, "test", trigger.getTriggerName());
|
||||||
|
System.out.println(detail.getData());
|
||||||
|
}
|
||||||
|
Assertions.assertTrue(triggers.getSuccess(), triggers.getErrorMessage());
|
||||||
|
} else if (dialectProperties.getDbType().equalsIgnoreCase("oracle")) {
|
||||||
|
String schemaName = "TEST_USER";
|
||||||
|
ListResult<Trigger> triggers = triggerService.triggers("", schemaName);
|
||||||
|
for (Trigger trigger : triggers.getData()) {
|
||||||
|
DataResult<Trigger> detail = triggerService.detail("", schemaName, trigger.getTriggerName());
|
||||||
|
System.out.println(detail.getData());
|
||||||
|
}
|
||||||
|
Assertions.assertTrue(triggers.getSuccess(), triggers.getErrorMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save the current user identity (administrator or normal user) and user ID to the context and database session for subsequent use.
|
||||||
|
*
|
||||||
|
* @param isAdmin
|
||||||
|
* @param userId
|
||||||
|
*/
|
||||||
|
private static void userLoginIdentity(boolean isAdmin, Long userId) {
|
||||||
|
Context context = Context.builder().loginUser(
|
||||||
|
LoginUser.builder().admin(isAdmin).id(userId).build()
|
||||||
|
).build();
|
||||||
|
ContextUtils.setContext(context);
|
||||||
|
Dbutils.setSession();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,118 @@
|
|||||||
|
package ai.chat2db.server.start.test.core;
|
||||||
|
|
||||||
|
import ai.chat2db.server.domain.api.model.User;
|
||||||
|
import ai.chat2db.server.domain.api.param.user.UserCreateParam;
|
||||||
|
import ai.chat2db.server.domain.api.param.user.UserPageQueryParam;
|
||||||
|
import ai.chat2db.server.domain.api.param.user.UserSelector;
|
||||||
|
import ai.chat2db.server.domain.api.param.user.UserUpdateParam;
|
||||||
|
import ai.chat2db.server.domain.api.service.UserService;
|
||||||
|
import ai.chat2db.server.domain.repository.Dbutils;
|
||||||
|
import ai.chat2db.server.start.test.TestApplication;
|
||||||
|
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.PageResult;
|
||||||
|
import ai.chat2db.server.tools.common.model.Context;
|
||||||
|
import ai.chat2db.server.tools.common.model.LoginUser;
|
||||||
|
import ai.chat2db.server.tools.common.util.ContextUtils;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Juechen
|
||||||
|
* @version : UserServiceTest.java
|
||||||
|
*/
|
||||||
|
public class UserServiceTest extends TestApplication {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAllMethods() {
|
||||||
|
userLoginIdentity(false,8L);
|
||||||
|
|
||||||
|
UserCreateParam userCreateParam = new UserCreateParam();
|
||||||
|
userCreateParam.setUserName("test_username08");
|
||||||
|
userCreateParam.setEmail("123456789@gmail.com");
|
||||||
|
userCreateParam.setPassword("123456");
|
||||||
|
userCreateParam.setRoleCode("TEST");
|
||||||
|
userCreateParam.setStatus("VALID");
|
||||||
|
userCreateParam.setNickName("test_username686");
|
||||||
|
DataResult<Long> dataResult = userService.create(userCreateParam);
|
||||||
|
System.out.println("create id:" + dataResult.getData());
|
||||||
|
Assertions.assertTrue(dataResult.getSuccess(),dataResult.getErrorMessage());
|
||||||
|
|
||||||
|
DataResult<User> query = userService.query(dataResult.getData());
|
||||||
|
System.out.println("Specify id:" + query.getData());
|
||||||
|
Assertions.assertTrue(query.getSuccess(),query.getErrorMessage());
|
||||||
|
|
||||||
|
DataResult<User> user_name = userService.query("_desktop_default_user_name");
|
||||||
|
System.out.println("Specify user_name: " + user_name.getData());
|
||||||
|
Assertions.assertTrue(user_name.getSuccess(),user_name.getErrorMessage());
|
||||||
|
|
||||||
|
UserPageQueryParam param = new UserPageQueryParam();
|
||||||
|
param.setPageNo(1);
|
||||||
|
param.setPageSize(8);
|
||||||
|
param.setEnableReturnCount(false);
|
||||||
|
param.setSearchKey("");
|
||||||
|
UserSelector selector = new UserSelector();
|
||||||
|
selector.setModifiedUser(false);
|
||||||
|
|
||||||
|
PageResult<User> result = userService.pageQuery(param, selector);
|
||||||
|
for (User user : result.getData()) {
|
||||||
|
System.out.println("list:" + user);
|
||||||
|
}
|
||||||
|
Assertions.assertTrue(result.getSuccess(),result.getErrorMessage());
|
||||||
|
|
||||||
|
// if id is 1, an BusinessException will be thrown
|
||||||
|
ActionResult actionResult = userService.delete(dataResult.getData());
|
||||||
|
Assertions.assertTrue(actionResult.getSuccess(),actionResult.getErrorMessage());
|
||||||
|
|
||||||
|
PageResult<User> pageQuery = userService.pageQuery(param, selector);
|
||||||
|
for (User user : pageQuery.getData()) {
|
||||||
|
System.out.println("After deletion list:" + user);
|
||||||
|
}
|
||||||
|
Assertions.assertTrue(pageQuery.getSuccess(),pageQuery.getErrorMessage());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdate() {
|
||||||
|
userLoginIdentity(false,8L);
|
||||||
|
|
||||||
|
UserUpdateParam userUpdateParam = new UserUpdateParam();
|
||||||
|
// If the id is 1, a "user.canNotOperateSystemAccount" exception will be thrown.
|
||||||
|
// userUpdateParam.setId(1L);
|
||||||
|
userUpdateParam.setId(3L);
|
||||||
|
userUpdateParam.setRoleCode("TEST05");
|
||||||
|
userUpdateParam.setStatus("INVALID");
|
||||||
|
userUpdateParam.setEmail("385962@gmail.com");
|
||||||
|
userUpdateParam.setPassword("385962");
|
||||||
|
|
||||||
|
DataResult<User> query = userService.query(userUpdateParam.getId());
|
||||||
|
System.out.println("Original data :" + query.getData());
|
||||||
|
Assertions.assertTrue(query.getSuccess(),query.getErrorMessage());
|
||||||
|
|
||||||
|
DataResult<Long> update = userService.update(userUpdateParam);
|
||||||
|
System.out.println("update id :" + update.getData());
|
||||||
|
Assertions.assertTrue(update.getSuccess(),update.getErrorMessage());
|
||||||
|
|
||||||
|
DataResult<User> result = userService.query(userUpdateParam.getId());
|
||||||
|
System.out.println("update data :" + result.getData());
|
||||||
|
Assertions.assertTrue(result.getSuccess(),result.getErrorMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save the current user identity (administrator or normal user) and user ID to the context and database session for subsequent use.
|
||||||
|
*
|
||||||
|
* @param isAdmin
|
||||||
|
* @param userId
|
||||||
|
*/
|
||||||
|
private static void userLoginIdentity(boolean isAdmin, Long userId) {
|
||||||
|
Context context = Context.builder().loginUser(
|
||||||
|
LoginUser.builder().admin(isAdmin).id(userId).build()
|
||||||
|
).build();
|
||||||
|
ContextUtils.setContext(context);
|
||||||
|
Dbutils.setSession();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,83 @@
|
|||||||
|
package ai.chat2db.server.start.test.core;
|
||||||
|
|
||||||
|
import ai.chat2db.server.domain.api.service.ViewService;
|
||||||
|
import ai.chat2db.server.domain.repository.Dbutils;
|
||||||
|
import ai.chat2db.server.start.test.TestApplication;
|
||||||
|
import ai.chat2db.server.start.test.dialect.DialectProperties;
|
||||||
|
import ai.chat2db.server.start.test.dialect.TestUtils;
|
||||||
|
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
|
||||||
|
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
|
||||||
|
import ai.chat2db.server.tools.common.model.Context;
|
||||||
|
import ai.chat2db.server.tools.common.model.LoginUser;
|
||||||
|
import ai.chat2db.server.tools.common.util.ContextUtils;
|
||||||
|
import ai.chat2db.spi.model.Table;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Juechen
|
||||||
|
* @version : ViewServiceTest.java
|
||||||
|
*/
|
||||||
|
public class ViewServiceTest extends TestApplication {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private ViewService viewService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private List<DialectProperties> dialectPropertiesList;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testViews() {
|
||||||
|
userLoginIdentity(false, 9L);
|
||||||
|
|
||||||
|
for (DialectProperties dialectProperties : dialectPropertiesList) {
|
||||||
|
Long dataSourceId = TestUtils.nextLong();
|
||||||
|
Long consoleId = TestUtils.nextLong();
|
||||||
|
TestUtils.buildContext(dialectProperties, dataSourceId, consoleId);
|
||||||
|
|
||||||
|
if (dialectProperties.getDbType().equalsIgnoreCase("mysql")) {
|
||||||
|
String databaseName = "ali_dbhub_test";
|
||||||
|
ListResult<Table> views = viewService.views(databaseName, null);
|
||||||
|
for (Table table : views.getData()) {
|
||||||
|
DataResult<Table> detail = viewService.detail(databaseName, null, table.getName());
|
||||||
|
System.out.println("mysql:" + detail.getData());
|
||||||
|
}
|
||||||
|
Assertions.assertTrue(views.getSuccess(),views.getErrorMessage());
|
||||||
|
} else if (dialectProperties.getDbType().equalsIgnoreCase("postgresql")) {
|
||||||
|
String databaseName = "ali_dbhub_test";
|
||||||
|
String schemaName = "test";
|
||||||
|
ListResult<Table> views = viewService.views(databaseName, schemaName);
|
||||||
|
for (Table table : views.getData()) {
|
||||||
|
DataResult<Table> detail = viewService.detail(databaseName, schemaName, table.getName());
|
||||||
|
System.out.println("postgresql:" + detail.getData());
|
||||||
|
}
|
||||||
|
Assertions.assertTrue(views.getSuccess(),views.getErrorMessage());
|
||||||
|
} else if (dialectProperties.getDbType().equalsIgnoreCase("oracle")) {
|
||||||
|
String schemaName = "TEST_USER";
|
||||||
|
ListResult<Table> views = viewService.views("", schemaName);
|
||||||
|
for (Table table : views.getData()) {
|
||||||
|
DataResult<Table> detail = viewService.detail("", schemaName, table.getName());
|
||||||
|
System.out.println("oracle:" + detail.getData());
|
||||||
|
}
|
||||||
|
Assertions.assertTrue(views.getSuccess(),views.getErrorMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save the current user identity (administrator or normal user) and user ID to the context and database session for subsequent use.
|
||||||
|
*
|
||||||
|
* @param isAdmin
|
||||||
|
* @param userId
|
||||||
|
*/
|
||||||
|
private static void userLoginIdentity(boolean isAdmin, Long userId) {
|
||||||
|
Context context = Context.builder().loginUser(
|
||||||
|
LoginUser.builder().admin(isAdmin).id(userId).build()
|
||||||
|
).build();
|
||||||
|
ContextUtils.setContext(context);
|
||||||
|
Dbutils.setSession();
|
||||||
|
}
|
||||||
|
}
|
@ -5,6 +5,7 @@ import java.io.PrintWriter;
|
|||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import ai.chat2db.spi.SqlBuilder;
|
import ai.chat2db.spi.SqlBuilder;
|
||||||
@ -84,7 +85,7 @@ public class RdbDmlExportController {
|
|||||||
ExportTypeEnum exportType = EasyEnumUtils.getEnum(ExportTypeEnum.class, request.getExportType());
|
ExportTypeEnum exportType = EasyEnumUtils.getEnum(ExportTypeEnum.class, request.getExportType());
|
||||||
String sql;
|
String sql;
|
||||||
if (exportSize == ExportSizeEnum.CURRENT_PAGE) {
|
if (exportSize == ExportSizeEnum.CURRENT_PAGE) {
|
||||||
sql = request.getSql();
|
sql = request.getOriginalSql() + " LIMIT " + request.getPageSize() + " OFFSET " + (request.getPageNo() - 1) * request.getPageSize();
|
||||||
} else {
|
} else {
|
||||||
sql = request.getOriginalSql();
|
sql = request.getOriginalSql();
|
||||||
}
|
}
|
||||||
@ -154,12 +155,20 @@ public class RdbDmlExportController {
|
|||||||
SqlBuilder sqlBuilder = Chat2DBContext.getMetaData().getSqlBuilder();
|
SqlBuilder sqlBuilder = Chat2DBContext.getMetaData().getSqlBuilder();
|
||||||
try (PrintWriter printWriter = response.getWriter()) {
|
try (PrintWriter printWriter = response.getWriter()) {
|
||||||
List<String> headerColumns = Lists.newArrayList();
|
List<String> headerColumns = Lists.newArrayList();
|
||||||
|
List<SQLIdentifierExpr> headers = new ArrayList<>();
|
||||||
InsertWrapper insertWrapper = new InsertWrapper();
|
InsertWrapper insertWrapper = new InsertWrapper();
|
||||||
SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(), sql,
|
SQLExecutor.getInstance().execute(Chat2DBContext.getConnection(), sql,
|
||||||
headerList -> {
|
headerList -> {
|
||||||
headerList.forEach(sqlIdentifierExpr -> headerColumns.add(sqlIdentifierExpr.getName()));
|
headerList.forEach(sqlIdentifierExpr -> headerColumns.add(sqlIdentifierExpr.getName()));
|
||||||
}
|
}
|
||||||
, dataList -> {
|
, dataList -> {
|
||||||
|
for (String header : headerColumns) {
|
||||||
|
SQLIdentifierExpr expr = new SQLIdentifierExpr(header);
|
||||||
|
expr.setName(header);
|
||||||
|
headers.add(expr);
|
||||||
|
}
|
||||||
|
insertWrapper.setHeaderList(headers);
|
||||||
|
|
||||||
SQLInsertStatement sqlInsertStatement = new SQLInsertStatement();
|
SQLInsertStatement sqlInsertStatement = new SQLInsertStatement();
|
||||||
sqlInsertStatement.setDbType(dbType);
|
sqlInsertStatement.setDbType(dbType);
|
||||||
sqlInsertStatement.setTableSource(new SQLExprTableSource(tableName));
|
sqlInsertStatement.setTableSource(new SQLExprTableSource(tableName));
|
||||||
|
@ -23,6 +23,9 @@ public class DataExportRequest extends DataSourceBaseRequest {
|
|||||||
*/
|
*/
|
||||||
private String originalSql;
|
private String originalSql;
|
||||||
|
|
||||||
|
private Integer pageNo;
|
||||||
|
private Integer pageSize;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* export type
|
* export type
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user