JSFW.SQLFormatter] 새버젼을 만들고 있다...
지난 번에 만든 프로그램으론 1개의 쿼리뿐이 정렬을 못시키니... 사용하면서 1년 동안 sp를 직접 작업하지 않으니 크게 쓸일도 없었지만,
지금은 시간도 좀 여유롭고 해서 자격증이나 딸까, 프로그램을 만들까 하다가... 마음 가는데로 하다보니 프로그램을 다시 만들게 되었다.
처음엔 지난번에 만든 프로그램을 수정하는 것으로 시작했으나... 역시나, 지난번 프로그램 소스가 워낙 복잡하고 고정된 양식에 추가될때마다
하드코딩으로 예외처리를 해놓은 터라, 조금만 손대도 다른데서 터지거나 꼬여서 안돌아가서 다시 설계하여 만들기 시작했다.
이틀정도 출퇴근 지하철에서 수첩에 열심히 그려서 코딩한게 성공할 것 같은 느낌이 든다.
여러 쿼리들을 돌려봤는데 우선 변환에 필요한 기초 자료 구성까지 원하는데로 만들어져 간다.
제일 처리하기 힘들었던 case문도 쉽게 잡혔고, 코드가 보기 좋아져서 오류 잡기도 쉬워졌다.
해결방법에 대한 걸 써놓을까 한다.
1. 우선 이전버전 처럼 각 요소들을 모두 분리한다.
- 1개의 단어는 1개의 요소가 된다.
- 주석은 주석으로 묶어서 1개의 요소로 만든다.
- 문자열은 '로 시작해서 ' 끝나는 지점을 찾아서 묶는데 중간에 '' 인것은 패스해서 마지막 ' 을 찾아 1개의 문자열 요소로 만든다.
- 연산자도 1개의 요소가 되는데 이때 주석문에 사용되는 /, * - 는 각각 다음 또는 이전 조합에 따라서 주석문으로 판단되면 건너띈다.
2. 요소들이 모두 분해가 되면 리스트로 묶어서 줄세우는데, 이때 리스트의 특정 요소들은 하위 요소목록을 가질수 있게 된다. ( 컴포짓트 패턴 )
3. 요소들 줄세우기가 끝났으면 위에서부터 순차적으로 접근하여 각각 경로값을 만들어준다.
ex)
select 1 from tb
--줄세우면..
select
1
from
tb
-- 여기에 각 요소의 경로값은
select select
1 select.Column : 1
from from
tb from.Table : tb
4. 정해놓은 규칙에 따라 정렬 시켜가면 된다. ( 지하철에서 스치듯 떠오른 아이디어를 활용한다. )
이제 3번을 진행중이다. 여러 쿼리로 경로값들을 확인해야 하므로... 좀더 타이핑을 해야 된다.
800라인 정도 쳤는데.. 기존 소스는 두페이지 인데 한페이지는 2500라인 정도에 또 한페이지도 900라인 정도.. 많이도 쳤네.
주말에 완성할것 같다. ^^;;
쿼리가 정렬되면 마음에 평화가 올려나???
'# 9) My Program(.NET) > PRJMNG' 카테고리의 다른 글
JSFW.SQLFormatter] 1차 작업 완료. (0) | 2016.04.13 |
---|---|
JSFW.SQLFormatter] 괄호, Case문 그리고 BEGIN (0) | 2016.04.12 |
JSFW] Design & Mockup (0) | 2016.03.26 |
JSFW.UI Story Board] 화면정의서 뷰 프로그램. (0) | 2016.03.22 |
JSFW.ERV] 새로만든 ERD > ERV (0) | 2016.03.20 |