Browse Source

多表解析调整.

nieqiurong 4 months ago
parent
commit
336a2c83e1

+ 5 - 8
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser-4.9/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/BaseMultiTableInnerInterceptor.java

@@ -240,15 +240,13 @@ public abstract class BaseMultiTableInnerInterceptor extends JsqlParserSupport i
      */
      */
     protected void processOtherFromItem(FromItem fromItem, final String whereSegment) {
     protected void processOtherFromItem(FromItem fromItem, final String whereSegment) {
         // 去除括号
         // 去除括号
-//        while (fromItem instanceof ParenthesisFromItem) {
-//            fromItem = ((ParenthesisFromItem) fromItem).getFromItem();
-//        }
+        while (fromItem instanceof ParenthesedFromItem) {
+            fromItem = ((ParenthesedFromItem) fromItem).getFromItem();
+        }
 
 
         if (fromItem instanceof ParenthesedSelect) {
         if (fromItem instanceof ParenthesedSelect) {
             Select subSelect = (Select) fromItem;
             Select subSelect = (Select) fromItem;
             processSelectBody(subSelect, whereSegment);
             processSelectBody(subSelect, whereSegment);
-        } else if (fromItem instanceof ParenthesedFromItem) {
-            logger.debug("Perform a subQuery, if you do not give us feedback");
         }
         }
     }
     }
 
 
@@ -259,13 +257,12 @@ public abstract class BaseMultiTableInnerInterceptor extends JsqlParserSupport i
      * @return Table subJoin 中的主表
      * @return Table subJoin 中的主表
      */
      */
     private List<Table> processSubJoin(ParenthesedFromItem subJoin, final String whereSegment) {
     private List<Table> processSubJoin(ParenthesedFromItem subJoin, final String whereSegment) {
-        List<Table> mainTables = new ArrayList<>();
         while (subJoin.getJoins() == null && subJoin.getFromItem() instanceof ParenthesedFromItem) {
         while (subJoin.getJoins() == null && subJoin.getFromItem() instanceof ParenthesedFromItem) {
             subJoin = (ParenthesedFromItem) subJoin.getFromItem();
             subJoin = (ParenthesedFromItem) subJoin.getFromItem();
         }
         }
+        List<Table> tableList = processFromItem(subJoin.getFromItem(), whereSegment);
+        List<Table> mainTables = new ArrayList<>(tableList);
         if (subJoin.getJoins() != null) {
         if (subJoin.getJoins() != null) {
-            List<Table> list = processFromItem(subJoin.getFromItem(), whereSegment);
-            mainTables.addAll(list);
             processJoins(mainTables, subJoin.getJoins(), whereSegment);
             processJoins(mainTables, subJoin.getJoins(), whereSegment);
         }
         }
         return mainTables;
         return mainTables;

+ 5 - 8
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser-5.0/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/BaseMultiTableInnerInterceptor.java

@@ -241,15 +241,13 @@ public abstract class BaseMultiTableInnerInterceptor extends JsqlParserSupport i
      */
      */
     protected void processOtherFromItem(FromItem fromItem, final String whereSegment) {
     protected void processOtherFromItem(FromItem fromItem, final String whereSegment) {
         // 去除括号
         // 去除括号
-//        while (fromItem instanceof ParenthesisFromItem) {
-//            fromItem = ((ParenthesisFromItem) fromItem).getFromItem();
-//        }
+        while (fromItem instanceof ParenthesedFromItem) {
+            fromItem = ((ParenthesedFromItem) fromItem).getFromItem();
+        }
 
 
         if (fromItem instanceof ParenthesedSelect) {
         if (fromItem instanceof ParenthesedSelect) {
             Select subSelect = (Select) fromItem;
             Select subSelect = (Select) fromItem;
             processSelectBody(subSelect, whereSegment);
             processSelectBody(subSelect, whereSegment);
-        } else if (fromItem instanceof ParenthesedFromItem) {
-            logger.debug("Perform a subQuery, if you do not give us feedback");
         }
         }
     }
     }
 
 
@@ -260,13 +258,12 @@ public abstract class BaseMultiTableInnerInterceptor extends JsqlParserSupport i
      * @return Table subJoin 中的主表
      * @return Table subJoin 中的主表
      */
      */
     private List<Table> processSubJoin(ParenthesedFromItem subJoin, final String whereSegment) {
     private List<Table> processSubJoin(ParenthesedFromItem subJoin, final String whereSegment) {
-        List<Table> mainTables = new ArrayList<>();
         while (subJoin.getJoins() == null && subJoin.getFromItem() instanceof ParenthesedFromItem) {
         while (subJoin.getJoins() == null && subJoin.getFromItem() instanceof ParenthesedFromItem) {
             subJoin = (ParenthesedFromItem) subJoin.getFromItem();
             subJoin = (ParenthesedFromItem) subJoin.getFromItem();
         }
         }
+        List<Table> tableList = processFromItem(subJoin.getFromItem(), whereSegment);
+        List<Table> mainTables = new ArrayList<>(tableList);
         if (subJoin.getJoins() != null) {
         if (subJoin.getJoins() != null) {
-            List<Table> list = processFromItem(subJoin.getFromItem(), whereSegment);
-            mainTables.addAll(list);
             processJoins(mainTables, subJoin.getJoins(), whereSegment);
             processJoins(mainTables, subJoin.getJoins(), whereSegment);
         }
         }
         return mainTables;
         return mainTables;

+ 5 - 9
mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/BaseMultiTableInnerInterceptor.java

@@ -241,15 +241,12 @@ public abstract class BaseMultiTableInnerInterceptor extends JsqlParserSupport i
      */
      */
     protected void processOtherFromItem(FromItem fromItem, final String whereSegment) {
     protected void processOtherFromItem(FromItem fromItem, final String whereSegment) {
         // 去除括号
         // 去除括号
-//        while (fromItem instanceof ParenthesisFromItem) {
-//            fromItem = ((ParenthesisFromItem) fromItem).getFromItem();
-//        }
-
+        while (fromItem instanceof ParenthesedFromItem) {
+            fromItem = ((ParenthesedFromItem) fromItem).getFromItem();
+        }
         if (fromItem instanceof ParenthesedSelect) {
         if (fromItem instanceof ParenthesedSelect) {
             Select subSelect = (Select) fromItem;
             Select subSelect = (Select) fromItem;
             processSelectBody(subSelect, whereSegment);
             processSelectBody(subSelect, whereSegment);
-        } else if (fromItem instanceof ParenthesedFromItem) {
-            logger.debug("Perform a subQuery, if you do not give us feedback");
         }
         }
     }
     }
 
 
@@ -260,13 +257,12 @@ public abstract class BaseMultiTableInnerInterceptor extends JsqlParserSupport i
      * @return Table subJoin 中的主表
      * @return Table subJoin 中的主表
      */
      */
     private List<Table> processSubJoin(ParenthesedFromItem subJoin, final String whereSegment) {
     private List<Table> processSubJoin(ParenthesedFromItem subJoin, final String whereSegment) {
-        List<Table> mainTables = new ArrayList<>();
         while (subJoin.getJoins() == null && subJoin.getFromItem() instanceof ParenthesedFromItem) {
         while (subJoin.getJoins() == null && subJoin.getFromItem() instanceof ParenthesedFromItem) {
             subJoin = (ParenthesedFromItem) subJoin.getFromItem();
             subJoin = (ParenthesedFromItem) subJoin.getFromItem();
         }
         }
+        List<Table> tableList = processFromItem(subJoin.getFromItem(), whereSegment);
+        List<Table> mainTables = new ArrayList<>(tableList);
         if (subJoin.getJoins() != null) {
         if (subJoin.getJoins() != null) {
-            List<Table> list = processFromItem(subJoin.getFromItem(), whereSegment);
-            mainTables.addAll(list);
             processJoins(mainTables, subJoin.getJoins(), whereSegment);
             processJoins(mainTables, subJoin.getJoins(), whereSegment);
         }
         }
         return mainTables;
         return mainTables;