fix(테이블타입): constraints SQL ARRAY_AGG → text 캐스트로 일원화
이전 PR (#15) 의 Java parseColumnArray 분기 추가가 실제 운영 환경에서 빈 배열을 그대로 반환 — MyBatis ↔ PostgreSQL JDBC 의 array 타입 변환이 java.sql.Array 가 아닌 다른 경로로 도착하는 듯. 방식 변경: SQL 단에서 ARRAY_AGG(...)::text 캐스트 → PostgreSQL 가 "{email,phone}" String 으로 반환. parseColumnArray 의 기존 String 분기 (중괄호 제거 + 쉼표 split) 가 자연스럽게 처리. 장점: - JDBC 드라이버 / MyBatis 변환 동작에 의존하지 않음 - parseColumnArray 코드 단순 복원 (List/String 2분기) - 한 줄 SQL 변경으로 PK/IDX 두 쿼리 모두 해결 검증: - gradle compileJava BUILD SUCCESSFUL - solution.invyone.com 에서 customer_mng PK columns / email IDX columns 비어있지 않음 확인 예정 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -10,7 +10,6 @@ import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -942,20 +941,6 @@ public class TableManagementService extends BaseService {
|
||||
@SuppressWarnings("unchecked")
|
||||
private List<String> parseColumnArray(Object cols) {
|
||||
if (cols instanceof List) return (List<String>) cols;
|
||||
if (cols instanceof java.sql.Array arr) {
|
||||
try {
|
||||
Object raw = arr.getArray();
|
||||
if (raw instanceof Object[] arrObj) {
|
||||
return Arrays.stream(arrObj)
|
||||
.filter(Objects::nonNull)
|
||||
.map(Object::toString)
|
||||
.filter(s -> !s.isBlank())
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
log.warn("parseColumnArray: java.sql.Array decode 실패 — fallback", e);
|
||||
}
|
||||
}
|
||||
if (cols instanceof String s) {
|
||||
return Arrays.stream(s.replace("{", "").replace("}", "").split(","))
|
||||
.filter(c -> !c.isBlank())
|
||||
|
||||
@@ -389,7 +389,7 @@
|
||||
<select id="getTablePrimaryKeyList" parameterType="map" resultType="map">
|
||||
SELECT
|
||||
TC.CONNAME AS constraint_name
|
||||
, ARRAY_AGG(A.ATTNAME ORDER BY X.N) AS columns
|
||||
, ARRAY_AGG(A.ATTNAME ORDER BY X.N)::text AS columns
|
||||
FROM PG_CONSTRAINT TC
|
||||
JOIN PG_CLASS C
|
||||
ON TC.CONRELID = C.OID
|
||||
@@ -411,7 +411,7 @@
|
||||
SELECT
|
||||
I.RELNAME AS index_name
|
||||
, IX.INDISUNIQUE AS is_unique
|
||||
, ARRAY_AGG(A.ATTNAME ORDER BY X.N) AS columns
|
||||
, ARRAY_AGG(A.ATTNAME ORDER BY X.N)::text AS columns
|
||||
FROM PG_INDEX IX
|
||||
JOIN PG_CLASS T
|
||||
ON IX.INDRELID = T.OID
|
||||
|
||||
Reference in New Issue
Block a user