이번 장에서는 지금까지 파싱해 온 쿼리를 어떻게 저장할지 고민해 보겠습니다.
단순히 1Level만 존재하는 현재 저장한 Map<String, Array>구조로 처리해도 이상이 없습니다. 1
하지만, 앞으로 진행할 FROM절의 Inner-Query 파싱을 위해서는 저장구조를 바꿀 필요가 있습니다.
1Level의 쿼리와 2Level의 쿼리의 관계정보가 있어야 하기 때문입니다.
제가 생각한 방법은...
1. 쿼리 분할영역을 Key로 하여 HashMap<String, ArrayList<Ojbect>형태으로 객체를 생성한다.
1. 쿼리의 각 항목을 관리하기 위한 쿼리저장 클래스( 구조체 )를 생성하고 HashMap의 Value로 저장한다.
2. 클래스의 맴버변수( 속성 )을 이용하여 항목의 유형 및 값을 상세 정의한다.
3. 하위 쿼리가 존재시, 쿼리저장 클래스를 하나 더 생성하여 저장한다.
이렇게 생각하고 정의한 구조입니다.
기본적으로 쿼리의 항목단위로 속성을 정의하는 클래스를 만들고,
속성중 "항목유형코드"를 이용하여 일반 데이터인지 하위 쿼리를 포함하고 있는지를 구분하려고 합니다.
항목유형을 코드화한 이유는 CASE문이나 통계함수와 같이 비즈니스 로직이 포함된 항목을 구분할 필요가 있을듯하여 확장성을 고려한 것입니다.
마지막 속성인 Object는 하위 쿼리가 존재할 경우, 동일한 구조도 쿼리를 저장하기 위함입니다.
끝으로, 하위에 하위 그리고 그 하위 등... Level이 계속 증가할 수 있으므로,
지금까지 진행해 온 쿼리 파싱프로그램 자체를 재귀함수화할 필요성이 있습니다.
하위 쿼리를 파싱하기 전에 기작성된 파싱프로그램의 구조를 재귀함수 형태로 변경하고,
쿼리 정보를 저장하기 위한 클래스를 먼저 만들도록 하겠습니다.
끝.
※ 상식 Level-up
- 쿼리의 명칭 : Inner-Query, Scalar-Query, Sub-Query
- 하위 쿼리가 없는 구조의 쿼리. 하위 쿼리의 Depth마다 Level을 증가하여 관리함. [본문으로]
'Study > Java' 카테고리의 다른 글
Case1. Inner-Query 파싱 (0) | 2018.11.18 |
---|---|
Case1. 쿼리저장 클래스를 이용한 적재 (0) | 2018.11.18 |
Case1. <중간 점검> 쿼리 파싱 결과 출력 (0) | 2018.11.12 |
Case1. WHERE절 항목 추출 (0) | 2018.11.12 |
Case1. <공통함수> 문자열 내에 포함된 모든 문자열 시작위치 찾기 (0) | 2018.11.11 |