Skip to content

Commit 5e8f735

Browse files
authored
fix(crud): 修复多 CTE 查询重写缺少逗号 (#349)
1 parent 4f9129c commit 5e8f735

2 files changed

Lines changed: 6 additions & 22 deletions

File tree

hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/QueryAnalyzerImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -878,6 +878,8 @@ public void visit(SetOperationList setOpList) {
878878
public void visit(WithItem withItem) {
879879
if (!StringUtils.hasText(prefix)) {
880880
prefix += "WITH ";
881+
} else {
882+
prefix += ", ";
881883
}
882884
prefix += withItem;
883885
PrepareStatementVisitor visitor = new PrepareStatementVisitor();

hsweb-commons/hsweb-commons-crud/src/test/java/org/hswebframework/web/crud/query/QueryAnalyzerImplTest.java

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -772,32 +772,14 @@ public void testMultipleCTE() {
772772
"LEFT JOIN cte2 ON cte1.id = cte2.id");
773773

774774
SqlRequest request = analyzer
775-
.refactor(QueryParamEntity.of().toQuery().and("name", "like", "test%").getParam(), 1, "test");
775+
.refactor(QueryParamEntity.of().toQuery().and("name", "like", "test%").getParam(), "test", "test");
776776

777777
System.out.println(request);
778-
779-
// 多个CTE在某些情况下生成的SQL可能无法直接执行(CTE之间缺少逗号),只验证SQL生成
778+
780779
assertNotNull(request.getSql(), "SQL should be generated");
781780
assertNotNull(request.getParameters(), "Parameters should be set");
782-
// 如果生成的SQL语法正确,尝试执行
783-
try {
784-
executeAndVerify(request);
785-
} catch (AssertionError e) {
786-
// 如果是语法错误,只验证SQL已生成
787-
if (e.getMessage() != null && e.getMessage().contains("Syntax error")) {
788-
System.out.println("SQL generated but has syntax issue (CTE comma missing): " + e.getMessage());
789-
return;
790-
}
791-
throw e;
792-
} catch (Exception e) {
793-
// 如果是语法错误,只验证SQL已生成
794-
if (e.getMessage() != null && (e.getMessage().contains("Syntax error") ||
795-
e.getMessage().contains("expected"))) {
796-
System.out.println("SQL generated but has syntax issue (CTE comma missing): " + e.getMessage());
797-
return;
798-
}
799-
throw e;
800-
}
781+
assertTrue(request.getSql().contains("), cte2 AS"), "multiple CTEs should be separated by comma");
782+
executeAndVerify(request);
801783
}
802784

803785
@Test

0 commit comments

Comments
 (0)