Skip to content

Commit 479225a

Browse files
committed
fix: 修复group by不支持参数化问题
1 parent ce8b4f1 commit 479225a

2 files changed

Lines changed: 18 additions & 22 deletions

File tree

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -800,12 +800,21 @@ public void visit(PlainSelect plainSelect) {
800800
}
801801

802802
if (plainSelect.getOrderByElements() != null) {
803+
PrepareStatementVisitor visitor = new PrepareStatementVisitor();
804+
for (OrderByElement orderByElement : plainSelect.getOrderByElements()) {
805+
orderByElement.getExpression().accept(visitor);
806+
}
807+
suffixParameters = visitor.parameterSize;
803808
orderBy = getFormatedList(plainSelect.getOrderByElements(), "");
804809
}
805810

806811
if (plainSelect.getGroupBy() != null) {
807812
fastCount = false;
808813
suffix.append(' ').append(plainSelect.getGroupBy());
814+
815+
PrepareStatementVisitor visitor = new PrepareStatementVisitor();
816+
plainSelect.getGroupBy().getGroupByExpressionList().accept(visitor);
817+
suffixParameters = visitor.parameterSize;
809818
}
810819
suffix.append(' ');
811820

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

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,35 +27,22 @@ public void testParamCast() {
2727
QueryAnalyzerImpl analyzer = new QueryAnalyzerImpl(
2828
database,
2929
"""
30-
SELECT
31-
to_char(period, ?) AS time,
32-
SUM(count_per_period) OVER (ORDER BY period) AS number
33-
FROM (
34-
SELECT
35-
gs.period AS period,
36-
COUNT(tb.create_time) AS count_per_period
37-
FROM
38-
generate_series(?, ?, ?::interval) AS gs(period)
39-
LEFT JOIN s_test ss ON ss.project_id = ?
40-
LEFT JOIN s_test tb
41-
ON tb.subsystem_id = ss.id
42-
AND tb.thing_type = 'device'
43-
AND to_timestamp(tb.create_time / 1000.0) >= gs.period
44-
AND to_timestamp(tb.create_time / 1000.0) < gs.period + ?::interval
45-
LEFT JOIN s_test ddi ON ddi.id = tb.thing_id
46-
GROUP BY gs.period
47-
) sub
48-
ORDER BY period;
49-
""");
30+
SELECT
31+
floor((tb.create_time-?)/?)*?+? as time,
32+
count(tb.id) as number
33+
FROM s_test tb
34+
LEFT JOIN s_test ss ON ss.ID = tb.subsystem_id
35+
GROUP BY floor((tb.create_time-?)/?)*?+?
36+
""");
5037
SqlRequest request = analyzer.refactor(
5138
QueryParamEntity
5239
.newQuery()
53-
.getParam(), 1, 2, 3, 4, 5, 6);
40+
.getParam(), 1, 2, 3, 4, 5, 6,7,8);
5441

5542
System.out.println(request.getSql());
5643
System.out.println(request);
5744

58-
Assert.assertEquals(6, request.getParameters().length);
45+
Assert.assertEquals(8, request.getParameters().length);
5946
}
6047

6148
@Test

0 commit comments

Comments
 (0)