From 194637b223c805f5ba36b0faa65776046766782b Mon Sep 17 00:00:00 2001 From: nieqiurong Date: Thu, 2 Jan 2025 17:45:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7jsqlparser=E8=87=B35.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatis-plus-jsqlparser/build.gradle | 2 +- .../extension/plugins/inner/DataPermissionInterceptor.java | 4 ++-- .../extension/plugins/inner/PaginationInnerInterceptor.java | 5 +---- .../extension/plugins/inner/TenantLineInnerInterceptor.java | 4 ++-- .../plugins/inner/MultiDataPermissionInterceptorTest.java | 4 ++-- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/build.gradle b/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/build.gradle index b2cc897c5..3d707ed58 100644 --- a/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/build.gradle +++ b/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/build.gradle @@ -3,7 +3,7 @@ compileJava { } dependencies { - api "com.github.jsqlparser:jsqlparser:5.0" + api "com.github.jsqlparser:jsqlparser:5.1" api project(":mybatis-plus-jsqlparser-support:mybatis-plus-jsqlparser-common") implementation "${lib."slf4j-api"}" implementation "de.ruedigermoeller:fst:3.0.3" diff --git a/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/DataPermissionInterceptor.java b/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/DataPermissionInterceptor.java index 5e6246d4b..d0c10c4e0 100644 --- a/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/DataPermissionInterceptor.java +++ b/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/DataPermissionInterceptor.java @@ -96,9 +96,9 @@ protected void processSelect(Select select, int index, String sql, Object obj) { // 参照 com.baomidou.mybatisplus.extension.plugins.inner.TenantLineInnerInterceptor.processSelect 做的修改 final String whereSegment = (String) obj; processSelectBody(select, whereSegment); - List withItemsList = select.getWithItemsList(); + List> withItemsList = select.getWithItemsList(); if (!CollectionUtils.isEmpty(withItemsList)) { - withItemsList.forEach(withItem -> processSelectBody(withItem, whereSegment)); + withItemsList.forEach(withItem -> processSelectBody(withItem.getSelect(), whereSegment)); } } else { // 兼容原来的旧版 DataPermissionHandler 场景 diff --git a/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/PaginationInnerInterceptor.java b/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/PaginationInnerInterceptor.java index 6eccbc59d..21480dcc8 100644 --- a/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/PaginationInnerInterceptor.java +++ b/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/PaginationInnerInterceptor.java @@ -391,10 +391,7 @@ public String concatOrderBy(String originalSql, List orderList) { List orderByElementsReturn = addOrderByElements(orderList, orderByElements); setOperationList.setOrderByElements(orderByElementsReturn); return setOperationList.toString(); - } else if (selectBody instanceof WithItem) { - // todo: don't known how to resole - return originalSql; - } else { + } else { return originalSql; } } catch (JSQLParserException e) { diff --git a/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/TenantLineInnerInterceptor.java b/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/TenantLineInnerInterceptor.java index 1c072e1e5..4aadad507 100644 --- a/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/TenantLineInnerInterceptor.java +++ b/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/TenantLineInnerInterceptor.java @@ -84,9 +84,9 @@ public void beforePrepare(StatementHandler sh, Connection connection, Integer tr protected void processSelect(Select select, int index, String sql, Object obj) { final String whereSegment = (String) obj; processSelectBody(select, whereSegment); - List withItemsList = select.getWithItemsList(); + List> withItemsList = select.getWithItemsList(); if (!CollectionUtils.isEmpty(withItemsList)) { - withItemsList.forEach(withItem -> processSelectBody(withItem, whereSegment)); + withItemsList.forEach(withItem -> processSelectBody(withItem.getSelect(), whereSegment)); } } diff --git a/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/test/java/com/baomidou/mybatisplus/test/extension/plugins/inner/MultiDataPermissionInterceptorTest.java b/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/test/java/com/baomidou/mybatisplus/test/extension/plugins/inner/MultiDataPermissionInterceptorTest.java index 63756564d..b43ada513 100644 --- a/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/test/java/com/baomidou/mybatisplus/test/extension/plugins/inner/MultiDataPermissionInterceptorTest.java +++ b/mybatis-plus-jsqlparser-support/mybatis-plus-jsqlparser/src/test/java/com/baomidou/mybatisplus/test/extension/plugins/inner/MultiDataPermissionInterceptorTest.java @@ -127,8 +127,8 @@ void test6() { @Test void test7() { - assertSql(TEST_7, "SELECT c.doc AS title, sum(c.total_paid_amount) AS total_paid_amount, sum(c.balance_amount) AS balance_amount FROM (SELECT `a`.`id`, `a`.`doc`, `b`.`month`, `b`.`total_paid_amount`, `b`.`balance_amount`, row_number() OVER (PARTITION BY `a`.`id` ORDER BY `b`.`month` DESC) AS `row_index` FROM `fund` `a` LEFT JOIN `fund_month` `b` ON `a`.`id` = `b`.`fund_id` AND `b`.`submit` = TRUE) c WHERE c.row_index = 1 GROUP BY title LIMIT 20", - "SELECT c.doc AS title, sum(c.total_paid_amount) AS total_paid_amount, sum(c.balance_amount) AS balance_amount FROM (SELECT `a`.`id`, `a`.`doc`, `b`.`month`, `b`.`total_paid_amount`, `b`.`balance_amount`, row_number() OVER (PARTITION BY `a`.`id` ORDER BY `b`.`month` DESC) AS `row_index` FROM `fund` `a` LEFT JOIN `fund_month` `b` ON `a`.`id` = `b`.`fund_id` AND `b`.`submit` = TRUE AND b.fund_id = 2 AND b.month <= '2022-05' WHERE a.id = 1 AND a.year = 2022 AND a.create_user_id = 1111) c WHERE c.row_index = 1 GROUP BY title LIMIT 20"); + assertSql(TEST_7, "SELECT c.doc AS title, sum(c.total_paid_amount) AS total_paid_amount, sum(c.balance_amount) AS balance_amount FROM (SELECT `a`.`id`, `a`.`doc`, `b`.`month`, `b`.`total_paid_amount`, `b`.`balance_amount`, row_number() OVER (PARTITION BY `a`.`id` ORDER BY `b`.`month` DESC) AS `row_index` FROM `fund` `a` LEFT JOIN `fund_month` `b` ON `a`.`id` = `b`.`fund_id` AND `b`.`submit` = true) c WHERE c.row_index = 1 GROUP BY title LIMIT 20", + "SELECT c.doc AS title, sum(c.total_paid_amount) AS total_paid_amount, sum(c.balance_amount) AS balance_amount FROM (SELECT `a`.`id`, `a`.`doc`, `b`.`month`, `b`.`total_paid_amount`, `b`.`balance_amount`, row_number() OVER (PARTITION BY `a`.`id` ORDER BY `b`.`month` DESC) AS `row_index` FROM `fund` `a` LEFT JOIN `fund_month` `b` ON `a`.`id` = `b`.`fund_id` AND `b`.`submit` = true AND b.fund_id = 2 AND b.month <= '2022-05' WHERE a.id = 1 AND a.year = 2022 AND a.create_user_id = 1111) c WHERE c.row_index = 1 GROUP BY title LIMIT 20"); } @Test