diff --git a/src/main/java/egovframework/config/DataSourceProxyConfig.java b/src/main/java/egovframework/config/DataSourceProxyConfig.java index 5ee6fc7..9ea5c52 100644 --- a/src/main/java/egovframework/config/DataSourceProxyConfig.java +++ b/src/main/java/egovframework/config/DataSourceProxyConfig.java @@ -433,6 +433,7 @@ public class DataSourceProxyConfig { /** * INSERT 구문을 AST 기반으로 포맷팅합니다. * 컬럼 목록과 값 목록을 줄바꿈하여 가독성을 높입니다. + * INSERT ... SELECT 구문도 지원합니다. */ private String formatInsertStatement(Insert insert) { StringBuilder sb = new StringBuilder(); @@ -453,8 +454,10 @@ public class DataSourceProxyConfig { // 값 목록 포맷팅 if (insert.getItemsList() != null) { if (insert.getItemsList() instanceof SubSelect) { + // INSERT ... SELECT 구문인 경우 sb.append("\n"); - formatSelectBody(((SubSelect) insert.getItemsList()).getSelectBody(), sb, 0); + SubSelect subSelect = (SubSelect) insert.getItemsList(); + formatSelectBody(subSelect.getSelectBody(), sb, 0); } else { sb.append("\nVALUES\n("); if (insert.getItemsList() instanceof ExpressionList) { @@ -540,8 +543,21 @@ public class DataSourceProxyConfig { } // ORDER BY 절 - if (plainSelect.getOrderByElements() != null) { - sb.append("\n").append(indent).append("ORDER BY ").append(plainSelect.getOrderByElements().toString()); + if (plainSelect.getOrderByElements() != null && !plainSelect.getOrderByElements().isEmpty()) { + sb.append("\n").append(indent).append("ORDER BY "); + List orderByElements = plainSelect.getOrderByElements(); + for (int i = 0; i < orderByElements.size(); i++) { + if (i > 0) { + sb.append(", "); + } + OrderByElement element = orderByElements.get(i); + sb.append(element.getExpression().toString()); + if (element.isAsc()) { + sb.append(" ASC"); + } else if (!element.isAsc() && element.toString().contains("DESC")) { + sb.append(" DESC"); + } + } } // LIMIT 절