Browse Source

解决 sql 解析时 select from的判断错误

sunyj 8 years ago
parent
commit
f3ab199f10
1 changed files with 3 additions and 3 deletions
  1. 3 3
      src/main/java/com/uas/report/service/impl/PrintServiceImpl.java

+ 3 - 3
src/main/java/com/uas/report/service/impl/PrintServiceImpl.java

@@ -766,12 +766,12 @@ public class PrintServiceImpl implements PrintService {
 		// by 的结果列数一般很小,所以可以在外面使用 count(1) ,一般不会超出 1000 行
 		// by 的结果列数一般很小,所以可以在外面使用 count(1) ,一般不会超出 1000 行
 		String lowerSql = sql.toLowerCase();
 		String lowerSql = sql.toLowerCase();
 		if (!lowerSql.matches("[\\s\\S]+?group[\\s]+?by[\\s]+?[^)]+?")) {
 		if (!lowerSql.matches("[\\s\\S]+?group[\\s]+?by[\\s]+?[^)]+?")) {
-			String regex = "[\\s\\S]+?from";
+			String regex = "([\\s\\S]+?from)[\\s]+?[^,]+?";
 			Pattern pattern = Pattern.compile(regex);
 			Pattern pattern = Pattern.compile(regex);
 			Matcher matcher = pattern.matcher(lowerSql);
 			Matcher matcher = pattern.matcher(lowerSql);
 			if (matcher.find()) {
 			if (matcher.find()) {
-				int start = matcher.start();
-				int end = matcher.end();
+				int start = matcher.start(1);
+				int end = matcher.end(1);
 				sql = sql.substring(0, start) + "select count(1) from" + sql.substring(end);
 				sql = sql.substring(0, start) + "select count(1) from" + sql.substring(end);
 			} else {
 			} else {
 				throw new IllegalStateException("sql 解析错误:未发现第一个 from");
 				throw new IllegalStateException("sql 解析错误:未发现第一个 from");