|
|
|
|
@ -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<OrderByElement> 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 절
|
|
|
|
|
|