Skip to content

Commit 132290c

Browse files
author
lk
committed
fix: 改进分隔判断,由单纯通过,判断会存在无法对文本正常分隔的情况下。
1 parent a9f8548 commit 132290c

File tree

4 files changed

+77
-12
lines changed

4 files changed

+77
-12
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ apply plugin: 'java'
2626

2727

2828
group 'com.linkkou'
29-
version '1.0.6.1'
29+
version '1.0.7'
3030

3131
sourceCompatibility = JavaVersion.VERSION_1_8
3232
targetCompatibility = JavaVersion.VERSION_1_8

src/main/java/com/plugins/mybaitslog/util/SqlProUtil.java

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
import java.util.ArrayList;
77
import java.util.List;
8+
import java.util.regex.Matcher;
9+
import java.util.regex.Pattern;
810

911
/**
1012
* 用于SQL的还原
@@ -17,6 +19,16 @@ public class SqlProUtil {
1719

1820
private final static BasicFormatter BASIC_FORMATTER = new BasicFormatter();
1921

22+
/**
23+
* 匹配 '
24+
*/
25+
private final static Pattern PSingleQuotationMark = Pattern.compile("'");
26+
/**
27+
* 匹配 (String),
28+
*/
29+
private final static String Separate = "\\(.*?\\),\\s";
30+
private final static Pattern PSeparate = Pattern.compile(Separate);
31+
2032
/**
2133
* 获取Sql语句类型
2234
*
@@ -101,12 +113,19 @@ private static String[] getPreparing(String[] preparingLineSplit) {
101113
*/
102114
private static Object[] getParameters(String[] parametersLineSplit) {
103115
if (parametersLineSplit.length == 2) {
104-
final String[] split = parametersLineSplit[1].split(",");
116+
//Mybatis的特性一定保证参数数量是一致的
117+
final String[] split = parametersLineSplit[1].split(Separate);
118+
final Matcher matcher = PSeparate.matcher(parametersLineSplit[1]);
105119
final List<String> params = new ArrayList<>();
106120
for (String item : split) {
121+
String group = "";
122+
if (matcher.find()) {
123+
group = matcher.group().replaceAll(",", "").trim();
124+
}
107125
final String s = item.trim();
108-
final String[] parametersTypeOrValue = getParametersTypeOrValue(s);
109-
final String stringformat = stringformat(parametersTypeOrValue);
126+
final String[] parametersTypeOrValue = getParametersTypeOrValue(s + group);
127+
//final String[] specialTypesOfEscapeFormat = specialTypesOfEscapeFormat(parametersTypeOrValue);
128+
final String stringformat = quotationTypeFormat(parametersTypeOrValue);
110129
params.add(stringformat);
111130
}
112131
return params.toArray(new String[0]);
@@ -117,10 +136,11 @@ private static Object[] getParameters(String[] parametersLineSplit) {
117136

118137
/**
119138
* 对特点类型进行格式化
139+
* 这里的String值由Mybatis输入的格式来解决决定的
120140
*
121141
* @return String
122142
*/
123-
private static String stringformat(String[] parametersTypeOrValue) {
143+
private static String quotationTypeFormat(String[] parametersTypeOrValue) {
124144
String[] d = {"String", "Timestamp", "Date", "Time", "LocalDate", "LocalTime", "LocalDateTime"};
125145
for (String s : d) {
126146
if (s.equals(parametersTypeOrValue[1])) {
@@ -130,6 +150,24 @@ private static String stringformat(String[] parametersTypeOrValue) {
130150
return parametersTypeOrValue[0];
131151
}
132152

153+
/**
154+
* 特殊字符串类型进行转义
155+
* 由于一些JSON测试中只能对单引号进行处理,否者无法保证最后的值是能正确转义的
156+
* 占时保留代码,后续在考虑如何解决问题
157+
*
158+
* @return String
159+
*/
160+
private static String[] specialTypesOfEscapeFormat(String[] parametersTypeOrValue) {
161+
final String type = parametersTypeOrValue[1];
162+
final String value = parametersTypeOrValue[0];
163+
String s = value;
164+
if ("String".equals(type)) {
165+
final Matcher matcher1 = PSingleQuotationMark.matcher(value);
166+
s = matcher1.replaceAll("\\\\'");
167+
}
168+
return new String[]{s, type};
169+
}
170+
133171
/**
134172
* 获取到参数值与类型
135173
*
@@ -147,7 +185,7 @@ private static String[] getParametersTypeOrValue(String s) {
147185
break;
148186
}
149187
}
150-
if (find > 0) {
188+
if (find >= 0) {
151189
final String val = s.substring(0, find);
152190
final String type = s.substring(find + 1, value.length - 1);
153191
return new String[]{val, type};

src/main/resources/META-INF/plugin.xml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,25 @@
44
<vendor email="[email protected]" url="https://github.com/Link-Kou/intellij-mybaitslog">linkkou</vendor>
55

66
<!-- 插件版本 -->
7-
<version>1.0.3</version>
7+
<version>1.0.7</version>
88
<!-- please see https://confluence.jetbrains.com/display/IDEADEV/Build+Number+Ranges for description -->
99
<idea-version since-build="172"/>
1010
<!-- 插件的描述 -->
1111
<description><![CDATA[
1212
<ul>
1313
<h3>English:</h3>
14-
<li>Copy with mybatis-log-plugin</li>
14+
<li>Format output mybatis-log</li>
1515
<h3>中文:</h3>
16-
<li>拷贝 mybatis-log-plugin</li>
16+
<li>格式化输出 mybatis-log</li>
1717
</ul>
1818
]]></description>
1919

2020
<!-- 插件的功能 -->
2121
<change-notes><![CDATA[
2222
<ul>
23-
<p>1.0.0</p>
24-
<li> 1. 修正并运行 mybatis-log-plugin </li>
25-
<li> 1. Fix and run mybatis-log-plugin </li>
23+
<p>1.X.X</p>
24+
<li> 1. 构建新的插件</li>
25+
<li> 1. Building new plug-ins</li>
2626
</ul>
2727
]]></change-notes>
2828

src/test/java/com/plugins/mybaitslog/SqlTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,31 @@ public void format() {
1818
System.out.println(strings[0]);
1919
System.out.println(strings[1]);
2020
}
21+
22+
@Test
23+
public void format2() {
24+
String preparingLine = "2020.09.19 11:12:40 CST DEBUG com.cms.dao.OrgAdminRoleDao.queryInForParentId - ==> Preparing: select `rows`, `f_id`, `f_parent`, `f_role_id`, `createtime`, `updatedtime` from cms.t_org_admin_role WHERE f_parent in ( ? , ? , ? ) \n";
25+
String parametersLine = "2020.09.19 11:12:40 CST DEBUG com.cms.dao.OrgAdminRoleDao.queryInForParentId - ==> Parameters: 4378097006489370624(String), 43829'9488411451,3'920(String), 4383415103714754575(String)\n";
26+
final String[] strings = SqlProUtil.restoreSql(null, preparingLine, parametersLine);
27+
System.out.println(strings[0]);
28+
System.out.println(strings[1]);
29+
}
30+
31+
@Test
32+
public void format3() {
33+
String preparingLine = "2020.09.19 11:12:40 CST DEBUG com.cms.dao.OrgAdminRoleDao.queryInForParentId - ==> Preparing: select `rows`, `f_id`, `f_parent`, `f_role_id`, `createtime`, `updatedtime` from cms.t_org_admin_role WHERE f_parent in ( ? , ? , ? ) \n";
34+
String parametersLine = "2020.09.19 11:12:40 CST DEBUG com.cms.dao.OrgAdminRoleDao.queryInForParentId - ==> Parameters: (String), 43829'9488411451,3'920(String), 4383415103714754575(String)\n";
35+
final String[] strings = SqlProUtil.restoreSql(null, preparingLine, parametersLine);
36+
System.out.println(strings[0]);
37+
System.out.println(strings[1]);
38+
}
39+
40+
@Test
41+
public void format4() {
42+
String preparingLine = "13:17:00.087 [schedule-pool-8] DEBUG n.p.s.i.r.C.updateByPrimaryKeySelective - [debug,159] - ==> Preparing: update \"COLLABORATIVE_MANAGEMENT\" SET \"TASK_ID\" = ?, \"ISSUE_DATE\" = ?, \"ISSUE_PERSON\" = ?, \"ISSUE_PERSON_ID\" = ?, \"TYPE\" = ?, \"TASK_NAME\" = ?, \"COMPLETION_PERIOD\" = ?, \"COLLABORATIVE_RULE\" = ?, \"SYS_USER\" = ?, \"COLLABORATIVE_OBJECT\" = ?, \"EXECUTION_RULE\" = ?, \"EXECUTION_CONTENT\" = ?, \"TRIGGER_RULE\" = ?, \"LINKED_DATA_SOURCES\" = ?, \"PERIODICITY\" = ?, \"EXECUTIVE_UNIT\" = ?, \"MISSION_REQUIREMENT\" = ?, \"RELATED_ATTACHMENT\" = ?, \"TASK_STATUS\" = ?, \"SITE_SELECTION\" = ?, \"DIVISION\" = ?, \"EXECUTION_STATUS\" = ? where \"ID\" = ? ";
43+
String parametersLine = "13:17:00.088 [schedule-pool-8] DEBUG n.p.s.i.r.C.updateByPrimaryKeySelective - [debug,159] - ==> Parameters: (String), 2020-11-07 00:00:00.0(Timestamp), 3(String), 74(Integer), 30(Integer), ddaaaaaaaaaaaaaaaaaaaaaaaa(String), 2020-11-04 00:00:00.0(Timestamp), 10(Integer), 2696(Integer), 刘明(String), 20(Integer), [{\"feedback\":\"0\",\"nowTask\":\"0\",\"time\":\"2020-11-02 00:11:01\",\"status\":\"10\"},{\"feedback\":\"0\",\"nowTask\":\"0\",\"time\":\"2020-12-09 00:12:03\",\"status\":\"0\"},{\"feedback\":\"0\",\"nowTask\":\"0\",\"time\":\"2020-12-22 00:12:03\",\"status\":\"0\"},{\"feedback\":\"0\",\"nowTask\":\"0\",\"time\":\"2020-12-06 00:12:03\",\"status\":\"0\"}](String), 10(Integer), ddd(String), (String), (String), 1616(String), (String), 10(Integer), (String), (String), (String), 1(Integer)";
44+
final String[] strings = SqlProUtil.restoreSql(null, preparingLine, parametersLine);
45+
System.out.println(strings[0]);
46+
System.out.println(strings[1]);
47+
}
2148
}

0 commit comments

Comments
 (0)