로직 해결이 잘 안 되서 질문드립니다..
현재 로직부터 설명을 드리자면..
A라는 테이블이 있습니다.
TITLE | ID | COND_VAR | COND_VAL | CALC | PRIORITY |
AA | 1 | - | - | BB | 0 |
AB | 2 | - | - | 10 | 0 |
BB | 1 | COND | TRUE | CC | 1 |
BB | 1 | COND | FALSE | 10 | 0 |
CC | 1 | LIMIT | 100 | 20 | 1 |
CC | 1 | LIMIT | 200 | 15 | 0 |
A 테이블에서 Title과 ID가 주어지면, CALC 값을 최종적으로 구해야 합니다.
단, CALC값이 숫자가 아니면 해당 CALC값을 참조해서 최종적으로 숫자가 나와야 합니다.
예를 들어 (AA, 1)이라는 조건을 받았다면, CALC 값이 BB이니 (BB, 1)의 T/F 두 로우를 가져와서 백엔드에서 비교를 합니다.
그리고 False라면 10으로 계산 종료. True라면 CC 값이 숫자가 아니니 다시 (CC, 1) 의 두 로우를 가져와서 비교하게 됩니다.
그리고 LIMIT 값이 100 이냐 200이냐 따진뒤에 CALC 값 리턴을 하게 되고 종료.
-----------------------------------------------------------------------------------------
현재는 while(loop)으로 리턴할 때까지 돌게 되어있습니다.
loop = true;
while (loop) {
SQL 실행;
if (COND_VAR == COND)
COND_VAL 비교;
CALC 값 = CC;
if (COND_VAR == LIMIT)
COND_VAL 비교;
CALC 값 = 20;
...
if (CALC == 숫자)
return CALC;
}
대충 이런 구조입니다.
문제는 이런 구조는 분명히 무한루프의 문제도 예상되고 해서 리팩토링 중인데..
처음의 while 루프를 제거할 수 있는 방법은 없을까요?
아무래도 SQL 구문을 몇번 돌려야 할 지가 예상이 되는게 아니라 저런식으로 참조에 참조해서 쭉 가는거라..
어떤 아이디어라도 감사하겠습니다.