From 79b349f6830a0131c7ae514e2c524d09b228516a Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 28 Jul 2022 17:19:13 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=95=B0=E6=8D=AE=E9=9B=86):=20=E5=A4=84?= =?UTF-8?q?=E7=90=86sql=E5=8F=98=E9=87=8F=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/dataset/DataSetTableService.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index b99f672017..134ac278c7 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -57,6 +57,7 @@ import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.select.PlainSelect; import net.sf.jsqlparser.statement.select.Select; import net.sf.jsqlparser.statement.select.SubSelect; +import net.sf.jsqlparser.statement.select.WithItem; import net.sf.jsqlparser.util.deparser.ExpressionDeParser; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -1027,7 +1028,22 @@ public class DataSetTableService { expr.accept(getExpressionDeParser(stringBuilder)); } plainSelect.setWhere(CCJSqlParserUtil.parseCondExpression(stringBuilder.toString())); - return plainSelect.toString(); + + + StringBuilder builder = new StringBuilder(); + if (CollectionUtils.isNotEmpty(select.getWithItemsList())) { + builder.append("WITH"); + builder.append(" "); + } + for (Iterator iter = select.getWithItemsList().iterator(); iter.hasNext();) { + WithItem withItem = iter.next(); + builder.append(withItem.toString()); + if (iter.hasNext()) { + builder.append(","); + } + } + builder.append(plainSelect); + return builder.toString(); } public Map getSQLPreview(DataSetTableRequest dataSetTableRequest) throws Exception { @@ -2569,8 +2585,12 @@ public class DataSetTableService { @Override public void visit(ExpressionList expressionList) { - for (Expression expression : expressionList.getExpressions()) { + for (Iterator iter = expressionList.getExpressions().iterator(); iter.hasNext();) { + Expression expression = iter.next(); expression.accept(this); + if (iter.hasNext()) { + buffer.append(", "); + } } }