Case1. SELECT절 추출

Study/Java 2018. 11. 11. 11:40 Posted by meanoflife
반응형

쿼리 영역중 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

- indexOf와 lastIndexOf

- 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