소스 검색

remove last ';' in sql

sunyj 7 년 전
부모
커밋
ed01eae104

+ 1 - 1
kanban-console/src/main/java/com/uas/kanban/service/impl/PanelInstanceServiceImpl.java

@@ -389,7 +389,7 @@ public class PanelInstanceServiceImpl extends BaseService<PanelInstance> impleme
      * @return 执行结果
      */
     private List<Object> getValue(@NotEmpty("jdbc") NewbieJdbcSupport jdbc, @NotEmpty("sql") String sql) {
-        List<Map<String, Object>> listMap = jdbc.listMap(sql);
+        List<Map<String, Object>> listMap = jdbc.listMap(kanbanParser.removeLastSemicolon(sql));
         Map<String, List<Object>> map = kanbanParser.convert(listMap);
         Set<String> keySet = map.keySet();
         if (CollectionUtils.isEmpty(map)) {

+ 1 - 0
kanban-console/src/main/java/com/uas/kanban/service/impl/PanelServiceImpl.java

@@ -101,6 +101,7 @@ public class PanelServiceImpl extends BaseService<Panel> implements PanelService
 
     @Override
     public List<Map<String, Object>> validateSQL(@NotEmpty("panelCode") String panelCode, @NotEmpty("sql") String sql, Boolean replaceParameters) throws SQLException, OperationException {
+        sql = kanbanParser.removeLastSemicolon(sql);
         Panel panel = panelDao.checkExist(panelCode);
         // 如果需要替换 sql 中的参数
         if (replaceParameters != null && replaceParameters) {

+ 14 - 5
kanban-console/src/main/java/com/uas/kanban/support/KanbanParser.java

@@ -210,6 +210,7 @@ public class KanbanParser {
                     fieldNames.add(fieldName);
                 }
             }
+            sql = removeLastSemicolon(sql);
             checkCount(jdbc.getDataSource().getConnection(), sql);
             List<Map<String, Object>> listMap = jdbc.listMap(sql);
             if (CollectionUtils.isEmpty(listMap)) {
@@ -250,7 +251,7 @@ public class KanbanParser {
             if (StringUtils.isEmpty(sql)) {
                 continue;
             }
-            sql = replaceParameters(sql, parameters, true);
+            sql = replaceParameters(removeLastSemicolon(sql), parameters, true);
             checkCount(jdbc.getDataSource().getConnection(), sql);
             Map<String, List<Object>> map = convert(jdbc.listMap(sql));
             if (CollectionUtils.isEmpty(map)) {
@@ -311,7 +312,7 @@ public class KanbanParser {
             if (StringUtils.isEmpty(sql)) {
                 continue;
             }
-            sql = replaceParameters(sql, parameters, true);
+            sql = replaceParameters(removeLastSemicolon(sql), parameters, true);
             checkCount(jdbc.getDataSource().getConnection(), sql);
             List<Map<String, Object>> listMap = jdbc.listMap(sql);
             if (CollectionUtils.isEmpty(listMap)) {
@@ -368,9 +369,7 @@ public class KanbanParser {
         PreparedStatement preparedStatement = null;
         ResultSet resultSet = null;
         try {
-            if (sql.endsWith(";")) {
-                sql = sql.substring(0, sql.length() - 1);
-            }
+            sql = removeLastSemicolon(sql);
             sql = "select count(1) from (" + sql + ")";
             preparedStatement = connection.prepareStatement(sql);
             resultSet = preparedStatement.executeQuery();
@@ -395,6 +394,16 @@ public class KanbanParser {
         }
     }
 
+    /**
+     * 删除 sql 结尾的分号
+     */
+    public String removeLastSemicolon(@NotEmpty("sql") String sql) {
+        if (sql.endsWith(";")) {
+            sql = sql.substring(0, sql.length() - 1);
+        }
+        return sql;
+    }
+
     /**
      * 将 List<Map<String, Object>> 转为 Map<String, List<Object>>
      *