|
|
|
|
@ -22,6 +22,7 @@ import net.ttddyy.dsproxy.listener.logging.SLF4JLogLevel;
|
|
|
|
|
import net.ttddyy.dsproxy.listener.logging.SLF4JQueryLoggingListener;
|
|
|
|
|
import net.ttddyy.dsproxy.proxy.ParameterSetOperation;
|
|
|
|
|
import net.ttddyy.dsproxy.support.ProxyDataSourceBuilder;
|
|
|
|
|
import org.apache.ibatis.jdbc.SQL;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
@ -344,14 +345,19 @@ public class DataSourceProxyConfig {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* jsqlparser를 사용하여 SQL을 보기 좋게 포맷팅합니다.
|
|
|
|
|
* SELECT 구문은 AST(Abstract Syntax Tree)를 기반으로 재구성하여 복잡한 쿼리의 가독성을 높입니다.
|
|
|
|
|
* CASE, JOIN, 서브쿼리 등 복잡한 구문을 효과적으로 처리합니다.
|
|
|
|
|
* SQL을 보기 좋게 포맷팅합니다.
|
|
|
|
|
* 주석(/ * * /)을 원래 위치에 보존하면서 포맷팅합니다.
|
|
|
|
|
*
|
|
|
|
|
* @param sql 포맷팅할 SQL 문자열
|
|
|
|
|
* @return 포맷팅된 SQL 문자열
|
|
|
|
|
*/
|
|
|
|
|
private String formatSql(String sql) {
|
|
|
|
|
// 주석이 포함된 경우 원본 SQL을 그대로 반환 (주석 위치 보존)
|
|
|
|
|
if (sql.contains("/*")) {
|
|
|
|
|
return sql;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 주석이 없는 경우에만 jsqlparser로 포맷팅
|
|
|
|
|
try {
|
|
|
|
|
Statement statement = CCJSqlParserUtil.parse(sql);
|
|
|
|
|
|
|
|
|
|
|