From 94cfb8dbfa713cfe9756bc62bad4d1d8fbf26050 Mon Sep 17 00:00:00 2001 From: chenjg <17688741996@163.com> Date: Fri, 28 Feb 2025 09:49:06 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BF=AE=E5=A4=8D]=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=99=9A=E6=8B=9F=E6=A8=A1=E5=9E=8B=E9=85=8D=E7=BD=AEsql?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=98=AF=E5=90=A6=E5=AD=98=E5=9C=A8=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E9=97=AE=E9=A2=98=EF=BC=8C=E5=85=BC=E5=AE=B9=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E6=9F=A5=E8=AF=A2union?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cmdb/utils/VirtualCiSqlBuilder.java | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/main/java/neatlogic/module/cmdb/utils/VirtualCiSqlBuilder.java b/src/main/java/neatlogic/module/cmdb/utils/VirtualCiSqlBuilder.java index b9892b38..66612c5f 100644 --- a/src/main/java/neatlogic/module/cmdb/utils/VirtualCiSqlBuilder.java +++ b/src/main/java/neatlogic/module/cmdb/utils/VirtualCiSqlBuilder.java @@ -120,10 +120,13 @@ public class VirtualCiSqlBuilder { } } else { columnName = selectExpressionItem.toString(); + if (columnName.contains(".")) { + columnName = columnName.substring(columnName.lastIndexOf(".") + 1); + } if (columnName.length() > 2) { char sChar = columnName.charAt(0); char eChar = columnName.charAt(columnName.length() - 1); - if (sChar == eChar && sChar == '`') { + if (sChar == '`' && eChar == '`') { columnName = columnName.substring(1, columnName.length() - 1); } } @@ -146,7 +149,14 @@ public class VirtualCiSqlBuilder { } if (CollectionUtils.isNotEmpty(columnList)) { for (String attrName : attrMap.keySet()) { - if (!columnList.contains(attrName)) { + isExist = false; + for (String columnName : columnList) { + if (columnName.equalsIgnoreCase(attrName)) { + isExist = true; + break; + } + } + if (!isExist) { throw new CiViewSqlFieldNotExistsException(attrName); } } @@ -233,6 +243,13 @@ public class VirtualCiSqlBuilder { * @param selectBody select主体 */ private void fillUpAlias(SelectBody selectBody) { + if (selectBody instanceof SetOperationList) { + SetOperationList setOpList = (SetOperationList) selectBody; + for (SelectBody select : setOpList.getSelects()) { + fillUpAlias(select); + } + return; + } PlainSelect select = (PlainSelect) selectBody; List newItemList = new ArrayList<>(); for (SelectItem selectItem : select.getSelectItems()) { @@ -285,6 +302,13 @@ public class VirtualCiSqlBuilder { * @param selectBody select主体 */ private void fillUpSchema(SelectBody selectBody) { + if (selectBody instanceof SetOperationList) { + SetOperationList setOpList = (SetOperationList) selectBody; + for (SelectBody select : setOpList.getSelects()) { + fillUpSchema(select); + } + return; + } PlainSelect select = (PlainSelect) selectBody; //处理from FromItem fromItem = select.getFromItem(); -- Gitee