提交 adab7aee authored 作者: Matrix's avatar Matrix

feat(SQL执行器): 将单引号去掉,由输入者来填写

上级 2766b230
......@@ -148,6 +148,7 @@ public class HttpClientActuator implements Actuator {
endTime.getTime() - startTime.getTime()
);
} catch (IOException e) {
e.printStackTrace();
throw new HttpRequestException(String.format("解析返回值失败,本次请求详细参数如下: %s ",httpRequestDetail));
} finally {
//关闭请求request
......
......@@ -73,8 +73,8 @@ public class SqlExpActuator implements Actuator {
if (varList.size() == 1) {
SqlRegularObject sqlReg = varList.get(0);
DynamicVariable variable = varService.getByName(sqlReg.getVarName(), projectId)
.orElseThrow(() -> new GlobalException("没有找到name = " + sqlReg.getVarName() + " 的动态变量"))
.parseSqlDetail();
.map(DynamicVariable::parseSqlDetail)
.orElseThrow(() -> new GlobalException("没有找到name = " + sqlReg.getVarName() + " 的动态变量"));
return parseVar(envId, sqlReg.getIndex(), projectId, variable);
} else {
throw new GlobalException("varNameString 参数请一次只输入一个动态变量! 你的提供的参数为: " + varNameString);
......@@ -91,15 +91,16 @@ public class SqlExpActuator implements Actuator {
*/
public String parseVarById(Long varId, Long envId, Long projectId) {
DynamicVariable dynamicVar = Optional.of(varService.getById(varId))
.orElseThrow(() -> new GlobalException(String.format("没有找到ID = %d 的动态变量", varId)))
.parseSqlDetail();
.map(DynamicVariable::parseSqlDetail)
.orElseThrow(() -> new GlobalException(String.format("没有找到ID = %d 的动态变量", varId)));
return parseVar(envId, 0, projectId, dynamicVar);
}
/**
* 依据不同的变量类型调用不同的解析Handler
* @param envId 环境ID - 环境共享变量需要
*
* @param envId 环境ID - 环境共享变量需要
* @param takenIndex 使用的结果集下标,递归传递
* @param projectId 项目id,防止SQL表达式中带的嵌合动态变量名字重复
* @param dynamicVar {@link DynamicVariable}
......@@ -116,7 +117,7 @@ public class SqlExpActuator implements Actuator {
} else if (varType == HTTP_VARIABLE) {
return httpVarHandler(envId, projectId, dynamicVar);
} else if (varType == CASE_VARIABLE) {
return usecaseHandler(envId, projectId, dynamicVar);
return caseHandler(envId, projectId, dynamicVar);
} else {
throw new GlobalException("不支持的动态变量类型: " + varType);
}
......@@ -130,7 +131,7 @@ public class SqlExpActuator implements Actuator {
* @param dynamicVar {@link DynamicVariable}
* @return 解析后的字符串
*/
private String usecaseHandler(Long envId, Long projectId, DynamicVariable dynamicVar) {
private String caseHandler(Long envId, Long projectId, DynamicVariable dynamicVar) {
CaseActuator caseActuator = new CaseActuator(envId, projectId);
long caseId = Long.parseLong(dynamicVar.getDetail());
TestCase testCase = Optional.of(caseService.getById(caseId))
......@@ -172,11 +173,11 @@ public class SqlExpActuator implements Actuator {
// 如果还存在动态变量,则继续递归解析
for (SqlRegularObject sqlRegular : dynamicVarList) {
DynamicVariable recVar = varService.getByName(sqlRegular.getVarName(), projectId)
.map(DynamicVariable::parseSqlDetail)
.orElseThrow(() -> new GlobalException(
String.format("没有找到项目id = %d 下,name = %s的变量", projectId, sqlRegular.getVarName())))
.parseSqlDetail();
String.format("没有找到项目id = %d 下,name = %s的变量", projectId, sqlRegular.getVarName())));
String calculatedValue = parseVar(envId, sqlRegular.getIndex(), projectId, recVar);
sqlExp = sqlExp.replaceAll(String.format(REPLACE_VAR_EXP, sqlRegular.getVarName()), "'" + calculatedValue + "'");
sqlExp = sqlExp.replaceAll(String.format(REPLACE_VAR_EXP, sqlRegular.getVarName()), calculatedValue);
dynamicVar.getSqlExpDetail().setSqlExp(sqlExp);
}
}
......
package org.matrix.database.controller;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* TestController. 用于测试的控制器
*
* @author Matrix <xhyrzldf@gmail.com>
* @since 2022/1/21 at 4:53 PM
* Suffering is the most powerful teacher of life.
*/
@RestController
@RequestMapping("/test")
public class TestController {
/**
* 获得表名,用于测试http执行器的调用
*/
@GetMapping("/tableName")
public ResponseEntity<String> getTableName(@RequestParam String tableName) {
return ResponseEntity.ok(tableName);
}
}
......@@ -8,7 +8,6 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import org.matrix.actuators.sql.SqlExpDetail;
import org.matrix.enums.DynamicVarType;
import org.matrix.exception.GlobalException;
/**
* <p>
......@@ -52,11 +51,8 @@ public class DynamicVariable extends BaseEntity {
public DynamicVariable parseSqlDetail() {
if (type == DynamicVarType.SQL_VARIABLE) {
this.sqlExpDetail = JSON.parseObject(this.detail, SqlExpDetail.class);
return this;
} else {
throw new GlobalException("只有SQL类型的变量才能解析详细内容");
}
return this;
}
......
......@@ -22,7 +22,7 @@ public class HttpClientActuatorTest {
1l
);
String json = "{\n" +
" \"url\": \"http://127.0.0.1:13245/test/tableName\",\n" +
" \"url\": \"http://127.0.0.1:8080/test/tableName\",\n" +
" \"method\": \"GET\",\n" +
" \"requestType\": \"QUERY\",\n" +
" \"requestBodies\": [\n" +
......
......@@ -25,6 +25,7 @@ class SqlExpActuatorTest {
void parseVarByName() {
// todo 这里的递归校验要多写一点
String result = sqlExpActuator.parseVarByName("${componentName}[2]", 1L, 1L);
System.out.println(result);
Assertions.assertNotNull(result);
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论