연구개발 이야기
SQL Builder를 개발하려면
금메달.아빠
2011. 11. 21. 23:40
SQL 문을 자원으로 처리하게 되어도 동적 생성 쿼리의 생성이 필요하다. 그럴 때는 쿼리 생성 컴포넌트를 생각해 주어야
한다. 이는 기본 치환 로직과 조건절, WHERE문을 조합하는 처리로 충분하다. 템플릿이 되는 sql 문을 받고 키워드를
치환해 가는 과정과, 조건절을 and or 로 연결하면 되는 것이다.
한편 검색해 보면 알수 잇듯이 기존의 빌더 들은 sql을 자원화한 것들이 아니어서 매우 지루하고 복잡한 방식을 거친다. 나는 이것들과 구별하기 위해서 query builder class라는 이름을 붙이는 것을 좋아한다.
where절에는 대략 3가지가 구성요소로 존재한다.
템플릿으로 사용하는 쿼리가 sql=select a,b,c from table1 :where 라고 하자. 여기서 치환문자열 :where를 바꿔가면 된다.
작은 함수를 구현하면 소스코드가 간결하고 처리를 이해하기 쉽게 된다. 내가 좋아하는 표현인 straightforward 한 소스가 된다. 이런 경우 굳이 커멘트를 덕지덕지 붙여 놓지 않아도 된다.
한편 검색해 보면 알수 잇듯이 기존의 빌더 들은 sql을 자원화한 것들이 아니어서 매우 지루하고 복잡한 방식을 거친다. 나는 이것들과 구별하기 위해서 query builder class라는 이름을 붙이는 것을 좋아한다.
where절에는 대략 3가지가 구성요소로 존재한다.
- 로그인시에 결정되는 요소: 유저 정보
- 흔히 설정이라고 하는 요소: 쿠키 정보
- 화면상에서 선택한 요소: 사용자 입력 정보
템플릿으로 사용하는 쿼리가 sql=select a,b,c from table1 :where 라고 하자. 여기서 치환문자열 :where를 바꿔가면 된다.
- 클래스는sql을 할당하는 함수, assginSql를 통해서 기본 sql을 할당한다.
- where구문을 추가하는 함수, addWhereByID, addWhereByCookie, addWhereByUserInput를 구현한다.
- 전체 sql을 얻어내는 함수, toString을 구현한다.
- where구문은 여러번 사용하게 되는 경우가 잇으므로 where구문을 초기화하는 함수가 필요하다. 초기화 함수, rewriteWhere 를 실행하기 까지는 직전 where 조건을 유지한다.
- 문자열 치환 함수, mixParam을 구현한다.
작은 함수를 구현하면 소스코드가 간결하고 처리를 이해하기 쉽게 된다. 내가 좋아하는 표현인 straightforward 한 소스가 된다. 이런 경우 굳이 커멘트를 덕지덕지 붙여 놓지 않아도 된다.