diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/model/OperationLog.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/model/OperationLog.java
index 39a18d24..9634f5ff 100644
--- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/model/OperationLog.java
+++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/model/OperationLog.java
@@ -54,4 +54,31 @@ public class OperationLog {
* ddl内容
*/
private String ddl;
+
+
+
+ /**
+ * 状态
+ */
+ private String status;
+
+ /**
+ * 操作行数
+ */
+ private Long operationRows;
+
+ /**
+ * 使用时长
+ */
+ private Long useTime;
+
+ /**
+ * 扩展信息
+ */
+ private String extendInfo;
+
+ /**
+ * schema名称
+ */
+ private String schemaName;
}
diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/operation/OperationLogCreateParam.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/operation/OperationLogCreateParam.java
index ed80c6ec..77c60a58 100644
--- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/operation/OperationLogCreateParam.java
+++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/operation/OperationLogCreateParam.java
@@ -34,4 +34,30 @@ public class OperationLogCreateParam {
* ddl内容
*/
private String ddl;
+
+
+ /**
+ * 状态
+ */
+ private String status;
+
+ /**
+ * 操作行数
+ */
+ private Long operationRows;
+
+ /**
+ * 使用时长
+ */
+ private Long useTime;
+
+ /**
+ * 扩展信息
+ */
+ private String extendInfo;
+
+ /**
+ * schema名称
+ */
+ private String schemaName;
}
diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/operation/OperationLogPageQueryParam.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/operation/OperationLogPageQueryParam.java
index 5b2c01f4..ee6b099f 100644
--- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/operation/OperationLogPageQueryParam.java
+++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/operation/OperationLogPageQueryParam.java
@@ -21,4 +21,19 @@ public class OperationLogPageQueryParam extends PageQueryParam {
* 搜索关键词
*/
private String searchKey;
+
+ /**
+ * 数据源id
+ */
+ private Long dataSourceId;
+
+ /**
+ * 数据库名称
+ */
+ private String databaseName;
+
+ /**
+ * schema名称
+ */
+ private String schemaName;
}
diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DlTemplateServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DlTemplateServiceImpl.java
index d7491d54..9323d721 100644
--- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DlTemplateServiceImpl.java
+++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DlTemplateServiceImpl.java
@@ -8,7 +8,10 @@ import java.util.List;
import java.util.Optional;
import ai.chat2db.server.domain.api.param.*;
+import ai.chat2db.server.domain.api.param.operation.OperationLogCreateParam;
+import ai.chat2db.server.domain.api.service.OperationLogService;
import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.sql.ConnectInfo;
import com.alibaba.druid.DbType;
import com.alibaba.druid.sql.PagerUtils;
import com.alibaba.druid.sql.SQLUtils;
@@ -35,6 +38,7 @@ import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
@@ -46,15 +50,21 @@ import org.springframework.stereotype.Service;
@Service
public class DlTemplateServiceImpl implements DlTemplateService {
+ @Autowired
+ private OperationLogService operationLogService;
+
@Override
public ListResult execute(DlExecuteParam param) {
if (StringUtils.isBlank(param.getSql())) {
return ListResult.empty();
}
// 解析sql
- RemoveSpecialGO(param);
- DbType dbType =
- JdbcUtils.parse2DruidDbType(Chat2DBContext.getConnectInfo().getDbType());
+ String type = Chat2DBContext.getConnectInfo().getDbType();
+ DbType dbType = JdbcUtils.parse2DruidDbType(type);
+ if ("SQLSERVER".equalsIgnoreCase(type)) {
+ RemoveSpecialGO(param);
+ }
+
List sqlList = SqlUtils.parse(param.getSql(), dbType);
@@ -73,6 +83,7 @@ public class DlTemplateServiceImpl implements DlTemplateService {
listResult.errorCode(executeResult.getDescription());
listResult.setErrorMessage(executeResult.getMessage());
}
+ addOperationLog(executeResult);
}
return listResult;
}
@@ -90,11 +101,12 @@ public class DlTemplateServiceImpl implements DlTemplateService {
connection.setAutoCommit(false);
for (String originalSql : sqlList) {
ExecuteResult executeResult = SQLExecutor.getInstance().executeUpdate(originalSql, connection, 1);
- dataResult.setData(executeResult);
+ dataResult.setData(executeResult);
+ addOperationLog(executeResult);
}
connection.commit();
- }catch (Exception e){
- log.error("executeUpdate error",e);
+ } catch (Exception e) {
+ log.error("executeUpdate error", e);
dataResult.setSuccess(false);
dataResult.setErrorCode("connection error");
dataResult.setErrorMessage(e.getMessage());
@@ -107,7 +119,7 @@ public class DlTemplateServiceImpl implements DlTemplateService {
if (StringUtils.isBlank(sql)) {
return;
}
- sql = sql.replaceAll("(?i)\\s*go\\s*", ";");
+ sql = sql.replaceAll("(?mi)^[ \\t]*go[ \\t]*$", ";");
param.setSql(sql);
}
@@ -276,6 +288,9 @@ public class DlTemplateServiceImpl implements DlTemplateService {
}
private String getInsertSql(UpdateSelectResultParam param, List row, MetaData metaSchema) {
+ if (CollectionUtils.isEmpty(row)) {
+ return "";
+ }
StringBuilder script = new StringBuilder();
script.append("INSERT INTO ").append(metaSchema.getMetaDataName(param.getDatabaseName(), param.getSchemaName(), param.getTableName()))
.append(" (");
@@ -301,6 +316,9 @@ public class DlTemplateServiceImpl implements DlTemplateService {
private String getUpdateSql(UpdateSelectResultParam param, List row, List odlRow, MetaData metaSchema) {
StringBuilder script = new StringBuilder();
+ if (CollectionUtils.isEmpty(row) || CollectionUtils.isEmpty(odlRow)) {
+ return "";
+ }
script.append("UPDATE ").append(metaSchema.getMetaDataName(param.getDatabaseName(), param.getSchemaName(), param.getTableName()))
.append(" set ");
for (int i = 1; i < row.size(); i++) {
@@ -336,4 +354,24 @@ public class DlTemplateServiceImpl implements DlTemplateService {
return executeResult;
}
+ private void addOperationLog(ExecuteResult executeResult) {
+ if (executeResult == null) {
+ return;
+ }
+ try {
+ ConnectInfo connectInfo = Chat2DBContext.getConnectInfo();
+ OperationLogCreateParam createParam = new OperationLogCreateParam();
+ createParam.setDdl(executeResult.getSql());
+ createParam.setStatus(executeResult.getSuccess() ? "success" : "fail");
+ createParam.setDatabaseName(connectInfo.getDatabaseName());
+ createParam.setDataSourceId(connectInfo.getDataSourceId());
+ createParam.setSchemaName(connectInfo.getSchemaName());
+ createParam.setUseTime(executeResult.getDuration());
+ createParam.setType(connectInfo.getDbType());
+ createParam.setOperationRows(executeResult.getUpdateCount() != null ? Long.valueOf(executeResult.getUpdateCount()):null);
+ operationLogService.create(createParam);
+ } catch (Exception e) {
+ log.error("addOperationLog error:", e);
+ }
+ }
}
diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/OperationLogServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/OperationLogServiceImpl.java
index eb7fdaa7..f14c0857 100644
--- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/OperationLogServiceImpl.java
+++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/OperationLogServiceImpl.java
@@ -58,7 +58,10 @@ public class OperationLogServiceImpl implements OperationLogService {
public PageResult queryPage(OperationLogPageQueryParam param) {
EasyLambdaQueryWrapper queryWrapper = new EasyLambdaQueryWrapper<>();
queryWrapper.likeWhenPresent(OperationLogDO::getDdl, EasySqlUtils.buildLikeRightFuzzy(param.getSearchKey()))
- .eqWhenPresent(OperationLogDO::getUserId, param.getUserId())
+ .eqWhenPresent(OperationLogDO::getUserId, param.getUserId())
+ .eqWhenPresent(OperationLogDO::getDataSourceId, param.getDataSourceId())
+ .eqWhenPresent(OperationLogDO::getDatabaseName, param.getDatabaseName())
+ .eqWhenPresent(OperationLogDO::getSchemaName, param.getSchemaName())
;
Integer start = param.getPageNo();
Integer offset = param.getPageSize();
diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/entity/OperationLogDO.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/entity/OperationLogDO.java
index 4edc2536..719593b9 100644
--- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/entity/OperationLogDO.java
+++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/entity/OperationLogDO.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
+import java.util.Date;
import lombok.Getter;
import lombok.Setter;
@@ -13,8 +14,8 @@ import lombok.Setter;
* 我的执行记录表
*
*
- * @author ali-dbhub
- * @since 2022-12-28
+ * @author chat2db
+ * @since 2023-10-14
*/
@Getter
@Setter
@@ -63,4 +64,29 @@ public class OperationLogDO implements Serializable {
* 用户id
*/
private Long userId;
+
+ /**
+ * 状态
+ */
+ private String status;
+
+ /**
+ * 操作行数
+ */
+ private Long operationRows;
+
+ /**
+ * 使用时长
+ */
+ private Long useTime;
+
+ /**
+ * 扩展信息
+ */
+ private String extendInfo;
+
+ /**
+ * schema名称
+ */
+ private String schemaName;
}
diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/mapper/OperationLogMapper.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/mapper/OperationLogMapper.java
index ccc91268..94e2e625 100644
--- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/mapper/OperationLogMapper.java
+++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-repository/src/main/java/ai/chat2db/server/domain/repository/mapper/OperationLogMapper.java
@@ -8,8 +8,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
* 我的执行记录表 Mapper 接口
*
*
- * @author ali-dbhub
- * @since 2022-12-28
+ * @author chat2db
+ * @since 2023-10-14
*/
public interface OperationLogMapper extends BaseMapper {
diff --git a/chat2db-server/chat2db-server-start/src/main/resources/db/migration/V2_1_4__OPERATION.sql b/chat2db-server/chat2db-server-start/src/main/resources/db/migration/V2_1_4__OPERATION.sql
new file mode 100644
index 00000000..5eb246b1
--- /dev/null
+++ b/chat2db-server/chat2db-server-start/src/main/resources/db/migration/V2_1_4__OPERATION.sql
@@ -0,0 +1,3 @@
+ALTER TABLE `operation_log`
+ ADD COLUMN `schema_name` varchar(256) COMMENT 'schema名称';
+create INDEX idx_op_data_source_id on operation_log(data_source_id) ;
\ No newline at end of file
diff --git a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/mybatis/MybatisGeneratorTest.java b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/mybatis/MybatisGeneratorTest.java
index 6e991296..e07c3c10 100644
--- a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/mybatis/MybatisGeneratorTest.java
+++ b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/mybatis/MybatisGeneratorTest.java
@@ -35,7 +35,7 @@ public class MybatisGeneratorTest extends BaseTest {
//doGenerator(Lists.newArrayList("operation_saved"));
//doGenerator(Lists.newArrayList("environment","data_source","team","team_dbhub_user","data_source_access",
// "dbhub_user"));
- doGenerator(Lists.newArrayList("table_cache"));
+ doGenerator(Lists.newArrayList("operation_log"));
}
private void doGenerator(List tableList) {
diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/operation/log/OperationLogController.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/operation/log/OperationLogController.java
index 5760a647..3ec810b0 100644
--- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/operation/log/OperationLogController.java
+++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/operation/log/OperationLogController.java
@@ -66,4 +66,5 @@ public class OperationLogController {
return operationLogService.create(param);
}
+
}
diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/operation/log/request/OperationLogQueryRequest.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/operation/log/request/OperationLogQueryRequest.java
index 890ddb30..689a76d2 100644
--- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/operation/log/request/OperationLogQueryRequest.java
+++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/operation/log/request/OperationLogQueryRequest.java
@@ -16,4 +16,19 @@ public class OperationLogQueryRequest extends PageQueryRequest {
* 模糊词搜索
*/
private String searchKey;
+
+ /**
+ * 数据源id
+ */
+ private Long dataSourceId;
+
+ /**
+ * 数据库名称
+ */
+ private String databaseName;
+
+ /**
+ * schema名称
+ */
+ private String schemaName;
}
diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/operation/log/vo/OperationLogVO.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/operation/log/vo/OperationLogVO.java
index 7f57ebd5..8fd7ad42 100644
--- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/operation/log/vo/OperationLogVO.java
+++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/operation/log/vo/OperationLogVO.java
@@ -45,4 +45,34 @@ public class OperationLogVO {
* ddl语言类型
*/
private String type;
+
+ /**
+ * ddl内容
+ */
+ private String ddl;
+
+ /**
+ * 状态
+ */
+ private String status;
+
+ /**
+ * 操作行数
+ */
+ private Long operationRows;
+
+ /**
+ * 使用时长
+ */
+ private Long useTime;
+
+ /**
+ * 扩展信息
+ */
+ private String extendInfo;
+
+ /**
+ * schema名称
+ */
+ private String schemaName;
}