From 8edfa686d41067200cf656b9b84e87fdf1a29190 Mon Sep 17 00:00:00 2001 From: SwallowGG <1558143046@qq.com> Date: Fri, 21 Jun 2024 19:54:09 +0800 Subject: [PATCH] batch export --- .../chat2db/plugin/mysql/MysqlDBManage.java | 5 ++++ .../domain/core/impl/DatabaseServiceImpl.java | 22 +++++++++++++++- .../java/ai/chat2db/spi/model/AsyncCall.java | 17 ++++++++++++ .../ai/chat2db/spi/model/AsyncContext.java | 26 ++++++++++++++++--- 4 files changed, 65 insertions(+), 5 deletions(-) create mode 100644 chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/AsyncCall.java diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlDBManage.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlDBManage.java index 2d7a49b9..4970935e 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlDBManage.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/MysqlDBManage.java @@ -15,10 +15,15 @@ public class MysqlDBManage extends DefaultDBManage implements DBManage { @Override public void exportDatabase(Connection connection, String databaseName, String schemaName, AsyncContext asyncContext) throws SQLException { exportTables(connection, databaseName, schemaName, asyncContext); + asyncContext.setProgress(50); exportViews(connection, databaseName, asyncContext); + asyncContext.setProgress(60); exportProcedures(connection, asyncContext); + asyncContext.setProgress(70); exportTriggers(connection, asyncContext); + asyncContext.setProgress(90); exportFunctions(connection, databaseName, asyncContext); + asyncContext.finish(); } private void exportFunctions(Connection connection, String databaseName, AsyncContext asyncContext) throws SQLException { diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DatabaseServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DatabaseServiceImpl.java index 4ebd494f..d62c1178 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DatabaseServiceImpl.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DatabaseServiceImpl.java @@ -179,7 +179,27 @@ public class DatabaseServiceImpl implements DatabaseService { public String exportDatabase(DatabaseExportParam param) throws SQLException { AsyncContext asyncContext = new AsyncContext(); asyncContext.setContainsData(param.getContainData()); - asyncContext.setConsumer(aLong -> log.info("exportDatabase success")); + asyncContext.setCall(new AsyncCall() { + @Override + public void setProgress(int progress) { + + } + + @Override + public void info(String message) { + + } + + @Override + public void error(String message) { + + } + + @Override + public void finish() { + + } + }); Chat2DBContext.getDBManage().exportDatabase(Chat2DBContext.getConnection(), param.getDatabaseName(), param.getSchemaName(), asyncContext); diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/AsyncCall.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/AsyncCall.java new file mode 100644 index 00000000..18ea9889 --- /dev/null +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/AsyncCall.java @@ -0,0 +1,17 @@ +package ai.chat2db.spi.model; + +public interface AsyncCall { + + + void setProgress(int progress); + + + void info(String message); + + + void error(String message); + + + void finish(); + +} diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/AsyncContext.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/AsyncContext.java index 5bacc789..c2f5aa86 100644 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/AsyncContext.java +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/AsyncContext.java @@ -18,11 +18,29 @@ public class AsyncContext { private boolean containsData; - private Consumer consumer; + private AsyncCall call; - public void addProgress(Long progress) { - if (consumer != null) { - consumer.accept(progress); + public void setProgress(Integer progress) { + if (call != null) { + call.setProgress(progress); + } + } + + public void info(String message) { + if (call != null) { + call.info(message); + } + } + + public void error(String message) { + if (call != null) { + call.error(message); + } + } + + public void finish() { + if (call != null) { + call.finish(); } }