쿼리 영역중 SELECT영역을 분할하려고 합니다.
SELECT영역에는 Scalar-Query가 들어갈 수 있지만, Case1은 Scalar-Query는 없음으로 Skip하도록 하겠습니다.
그리고, 이해도를 높이기 위해 프로그램의 구조를 도식화 하면서 진행하겠습니다.
일을 하며 시간이 날때마다 짬짬이 하다보니, 그때 그때 구조도 바뀌고, 방식도 바뀌는 것 같아 시간 허비가 심한 것 같습니다.
구조도를 그리면서 하면, 도움이 될 것 같습니다.
■ 프로그램 구조도
ParseQuery클래스에서 쿼리의 유형이 SELECT인 경우입니다.
SELECT 쿼리에서도 영역별로 SELECT, FROM, WHERE 그리고 기타( ORDER BY, GROUP BY, CONNECT BY 등 )로 나눌 수 있습니다.
우선, 쿼리에서 SELECT절에 해당하는 쿼리를 먼저 추출합니다.
※ 주의!!. Scalar-Query가 포함되어 있을 수 있으므로, 고려가 필요합니다.
■ SELECT절
- 쿼리 문자열에서 "처음부터~FROM절"까지 문자를 가져오고, 가져온 문자열 내에 SELECT절이 더 있는지 체크합니다.
- SELECT절이 더 있다면, Scalar-Query가 있는 것이니, 지금 찾은 FROM절이 Scalar-Query의 FROM절일 수 있습니다. ( 일단 Skip )
- 쿼리를 관리하기 위해 HashMap를 사용하였습니다.
- 찾은 문자열( 여기서는 SELECT )을 indexOf로 검사하였습니다.
SELECT절에 Scalar-Query가 존재하지 않아서, 너무 쉽게 끝난 것 같습니다.
다음 장의 FROM절은 Inner-Query가 있으니, 좀 더 복잡해 질 것 같습니다.
그리고, ( 추후 보완하겠지만 ) 문자열에 찾고자 하는 문자열이 포함되었는지를 체크하는 부분은 보완이 필요합니다.
예를들어, "SELECT A.COL1 AS SELECT_COL FROM ~" 이라는 문자열이 있다면, "SELECT"검색시 2개가 나오게 됩니다.
두번째 SELECT는 컬럼의 Alias로 사용되었고, 정확히는 "SELECT_COL"이라는 문자열 입니다.
그러므로, 찾는 문자열의 앞 글자와 뒷 글자를 확인하여 정말 찾고자 하는 문자열이 맞는지 체크가 필요합니다.
일단, 여기서는 Skip하고 이후 별도 보완하도록 하겠습니다.
끝.
※ Level-up Point
- Call-By-Reference와 Call-By-Value
'Study > Java' 카테고리의 다른 글
Case1. <공통함수> repAreaDeli (0) | 2018.11.11 |
---|---|
Case1. FROM절 항목 추출 (0) | 2018.11.11 |
Case1. SELECT절 항목 추출 (0) | 2018.11.11 |
Case1. 프로그램 구조도( 전체, Class 기반 ) (0) | 2018.11.11 |
Java 기본문법 : 변수( variable ) (0) | 2018.11.10 |