테이블 컬럼 표시문제 수정
This commit is contained in:
parent
649ed5c6d7
commit
0d9ee4c40f
|
|
@ -233,6 +233,9 @@ export class EntityJoinService {
|
||||||
"master_sabun",
|
"master_sabun",
|
||||||
"location",
|
"location",
|
||||||
"data_type",
|
"data_type",
|
||||||
|
"company_name",
|
||||||
|
"sales_yn",
|
||||||
|
"status",
|
||||||
].includes(col);
|
].includes(col);
|
||||||
|
|
||||||
if (isJoinTableColumn) {
|
if (isJoinTableColumn) {
|
||||||
|
|
@ -256,6 +259,9 @@ export class EntityJoinService {
|
||||||
"master_sabun",
|
"master_sabun",
|
||||||
"location",
|
"location",
|
||||||
"data_type",
|
"data_type",
|
||||||
|
"company_name",
|
||||||
|
"sales_yn",
|
||||||
|
"status",
|
||||||
].includes(col);
|
].includes(col);
|
||||||
|
|
||||||
if (isJoinTableColumn) {
|
if (isJoinTableColumn) {
|
||||||
|
|
|
||||||
|
|
@ -2074,38 +2074,78 @@ export class TableManagementService {
|
||||||
);
|
);
|
||||||
|
|
||||||
for (const additionalColumn of options.additionalJoinColumns) {
|
for (const additionalColumn of options.additionalJoinColumns) {
|
||||||
// 기존 조인 설정에서 같은 참조 테이블을 사용하는 설정 찾기
|
// 🔍 sourceColumn을 기준으로 기존 조인 설정 찾기 (dept_code로 찾기)
|
||||||
const baseJoinConfig = joinConfigs.find(
|
const baseJoinConfig = joinConfigs.find(
|
||||||
(config) => config.referenceTable === additionalColumn.sourceTable
|
(config) => config.sourceColumn === additionalColumn.sourceColumn
|
||||||
);
|
);
|
||||||
|
|
||||||
if (baseJoinConfig) {
|
if (baseJoinConfig) {
|
||||||
// joinAlias에서 실제 컬럼명 추출 (예: dept_code_location_name -> location_name)
|
// joinAlias에서 실제 컬럼명 추출 (예: dept_code_location_name -> location_name)
|
||||||
// sourceColumn을 제거한 나머지 부분이 실제 컬럼명
|
// sourceColumn을 제거한 나머지 부분이 실제 컬럼명
|
||||||
const sourceColumn = baseJoinConfig.sourceColumn; // dept_code
|
const sourceColumn = baseJoinConfig.sourceColumn; // dept_code
|
||||||
const joinAlias = additionalColumn.joinAlias; // dept_code_location_name
|
const joinAlias = additionalColumn.joinAlias; // dept_code_company_name
|
||||||
const actualColumnName = joinAlias.replace(`${sourceColumn}_`, ""); // location_name
|
const actualColumnName = joinAlias.replace(`${sourceColumn}_`, ""); // company_name
|
||||||
|
|
||||||
|
logger.info(`🔍 조인 컬럼 상세 분석:`, {
|
||||||
|
sourceColumn,
|
||||||
|
joinAlias,
|
||||||
|
actualColumnName,
|
||||||
|
referenceTable: additionalColumn.sourceTable,
|
||||||
|
});
|
||||||
|
|
||||||
|
// 🚨 기본 Entity 조인과 중복되지 않도록 체크
|
||||||
|
const isBasicEntityJoin =
|
||||||
|
additionalColumn.joinAlias ===
|
||||||
|
`${baseJoinConfig.sourceColumn}_name`;
|
||||||
|
|
||||||
|
if (isBasicEntityJoin) {
|
||||||
|
logger.info(
|
||||||
|
`⚠️ 기본 Entity 조인과 중복: ${additionalColumn.joinAlias} - 건너뜀`
|
||||||
|
);
|
||||||
|
continue; // 기본 Entity 조인과 중복되면 추가하지 않음
|
||||||
|
}
|
||||||
|
|
||||||
// 추가 조인 컬럼 설정 생성
|
// 추가 조인 컬럼 설정 생성
|
||||||
const additionalJoinConfig: EntityJoinConfig = {
|
const additionalJoinConfig: EntityJoinConfig = {
|
||||||
sourceTable: tableName,
|
sourceTable: tableName,
|
||||||
sourceColumn: baseJoinConfig.sourceColumn, // 원본 컬럼 (dept_code)
|
sourceColumn: baseJoinConfig.sourceColumn, // 원본 컬럼 (dept_code)
|
||||||
referenceTable: additionalColumn.sourceTable, // 참조 테이블 (dept_info)
|
referenceTable:
|
||||||
|
(additionalColumn as any).referenceTable ||
|
||||||
|
baseJoinConfig.referenceTable, // 참조 테이블 (dept_info)
|
||||||
referenceColumn: baseJoinConfig.referenceColumn, // 참조 키 (dept_code)
|
referenceColumn: baseJoinConfig.referenceColumn, // 참조 키 (dept_code)
|
||||||
displayColumns: [actualColumnName], // 표시할 컬럼들 (location_name)
|
displayColumns: [actualColumnName], // 표시할 컬럼들 (company_name)
|
||||||
displayColumn: actualColumnName, // 하위 호환성
|
displayColumn: actualColumnName, // 하위 호환성
|
||||||
aliasColumn: additionalColumn.joinAlias, // 별칭 (dept_code_location_name)
|
aliasColumn: additionalColumn.joinAlias, // 별칭 (dept_code_company_name)
|
||||||
separator: " - ", // 기본 구분자
|
separator: " - ", // 기본 구분자
|
||||||
};
|
};
|
||||||
|
|
||||||
joinConfigs.push(additionalJoinConfig);
|
joinConfigs.push(additionalJoinConfig);
|
||||||
logger.info(
|
logger.info(
|
||||||
`추가 조인 컬럼 설정 추가: ${additionalJoinConfig.aliasColumn} -> ${actualColumnName}`
|
`✅ 추가 조인 컬럼 설정 추가: ${additionalJoinConfig.aliasColumn} -> ${actualColumnName}`
|
||||||
);
|
);
|
||||||
|
logger.info(`🔍 추가된 조인 설정 상세:`, {
|
||||||
|
sourceTable: additionalJoinConfig.sourceTable,
|
||||||
|
sourceColumn: additionalJoinConfig.sourceColumn,
|
||||||
|
referenceTable: additionalJoinConfig.referenceTable,
|
||||||
|
displayColumns: additionalJoinConfig.displayColumns,
|
||||||
|
aliasColumn: additionalJoinConfig.aliasColumn,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 최종 조인 설정 배열 로깅
|
||||||
|
logger.info(`🎯 최종 joinConfigs 배열 (${joinConfigs.length}개):`);
|
||||||
|
joinConfigs.forEach((config, index) => {
|
||||||
|
logger.info(
|
||||||
|
` ${index + 1}. ${config.sourceColumn} -> ${config.referenceTable} AS ${config.aliasColumn}`,
|
||||||
|
{
|
||||||
|
displayColumns: config.displayColumns,
|
||||||
|
displayColumn: config.displayColumn,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
if (joinConfigs.length === 0) {
|
if (joinConfigs.length === 0) {
|
||||||
logger.info(`Entity 조인 설정이 없음: ${tableName}`);
|
logger.info(`Entity 조인 설정이 없음: ${tableName}`);
|
||||||
const basicResult = await this.getTableData(tableName, options);
|
const basicResult = await this.getTableData(tableName, options);
|
||||||
|
|
@ -2119,8 +2159,21 @@ export class TableManagementService {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 조인 전략 결정 (테이블 크기 기반)
|
// 조인 전략 결정 (테이블 크기 기반)
|
||||||
const strategy =
|
// 🚨 additionalJoinColumns가 있는 경우 강제로 full_join 사용 (캐시 안정성 보장)
|
||||||
await entityJoinService.determineJoinStrategy(joinConfigs);
|
let strategy: "full_join" | "cache_lookup" | "hybrid";
|
||||||
|
|
||||||
|
if (
|
||||||
|
options.additionalJoinColumns &&
|
||||||
|
options.additionalJoinColumns.length > 0
|
||||||
|
) {
|
||||||
|
strategy = "full_join";
|
||||||
|
console.log(
|
||||||
|
`🔧 additionalJoinColumns 감지: 강제로 full_join 전략 사용 (${options.additionalJoinColumns.length}개 추가 조인)`
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
strategy = await entityJoinService.determineJoinStrategy(joinConfigs);
|
||||||
|
}
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
`🎯 선택된 조인 전략: ${strategy} (${joinConfigs.length}개 Entity 조인)`
|
`🎯 선택된 조인 전략: ${strategy} (${joinConfigs.length}개 Entity 조인)`
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -322,9 +322,10 @@ export const TableListComponent: React.FC<TableListComponentProps> = ({
|
||||||
console.log(`🔗 조인 설정: ${col.columnName} -> ${sourceColumn} (${referenceTable})`);
|
console.log(`🔗 조인 설정: ${col.columnName} -> ${sourceColumn} (${referenceTable})`);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
sourceTable: referenceTable,
|
sourceTable: tableConfig.selectedTable || "unknown", // 기본 테이블 (user_info)
|
||||||
sourceColumn: sourceColumn,
|
sourceColumn: sourceColumn,
|
||||||
joinAlias: col.columnName,
|
joinAlias: col.columnName,
|
||||||
|
referenceTable: referenceTable, // 참조 테이블 정보도 추가
|
||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue