XML 쿼리 빌더
DANGER
🚧 이 문서는 초안을 작성중인 문서이다.
Schema
라이믹스에서는 DB 스키마를 생성할 때 XML을 활용한다.
XML 파일의 위치는 아래와 같다.
- modules/
모듈이름/schemas/스키마명.xml접두사+스키마명테이블 생성 (ex.rx_documents)
기본 구조
<table name="documents">
<column name="document_srl" type="number" primary-key="primary-key" />
<column name="module_srl" type="number" size="11" default="0" notnull="notnull" index="idx_module_srl" />
<column name="is_notice" type="char" size="1" default="N" notnull="notnull" index="idx_is_notice" />
<column name="title" type="varchar" size="250" />
<column name="content" type="bigtext" notnull="notnull" />
<column name="readed_count" type="number" size="11" default="0" notnull="notnull" index="idx_readed_count" />
<column name="list_order" type="number" size="11" notnull="notnull" index="idx_list_order" />
<column name="regdate" type="\date" index="idx_regdate" />
<column name="status" type="varchar" size="20" default="PUBLIC" />
...
<index name="idx_module_list_order" columns="module,list_order" type="unique" />
<index name="idx_module_regdate" columns="module,regdate" />
</table>테이블 이름의 prefix는 생략
라이믹스가 사용하는 테이블 이름 앞에 붙는 prefix(보통 rx_)는 질의문을 자동으로 고쳐서 붙여주므로 테이블 이름에는 prefix를 붙이지 않아야 한다.
table: 테이블을 생성할 때 사용한다.name: 테이블 이름
column: 테이블의 컬럼을 생성할 때 사용한다.name: 컬럼 이름type: 컬럼의 타입이다. 기본적으로 MySQL의 타입을 따라간다.number: 숫자형char: 문자형. size 필수.varchar: 가변 문자형. size 필수.bigtext: 긴 문자형date: char(14)와 동일.\date: MySQL 날짜형
primary-key: 기본키 설정 (primary-key)notnull: NOT NULL 설정 (notnull)default: 기본값 설정 (default)size: 크기 설정 (size)index: 인덱스 설정 (index). 복합 인덱스의 경우 아래 서술.auto-increment: 자동 증가 설정 (auto-increment)
index: 인덱스를 생성할 때 사용한다.name: 인덱스 이름columns: 인덱스에 포함될 컬럼. 복합 인덱스의 경우,로 구분한다.type: 인덱스 타입. 기본적으로normal이다.unique: 유니크 인덱스fulltext: 풀텍스트 인덱스spatial: 공간 인덱스
options: 인덱스 옵션이다. 예를 들어options="with parser ngram"와 같이 사용한다.
WARNING
실제 지원여부는 DB 버전에 따라 다를 수 있으니 유의하여야한다.
제약 조건
<table name="mytable">
.... 중략 ...
<constraint type="foreign key" column="document_srl" references="documents.document_srl" onupdate="cascade" ondelete="cascade" />
<constraint type="check" condition="voted_count > blamed_count" />
</table>위와 같이 FK, 제약 조건을 설정할 수 있으며, 조건에 맞지 않는 데이터를 INSERT 또는 UPDATE하면 오류가 발생하게 된다.
Query
라이믹스에서는 쿼리를 실행할때 XML 쿼리를 활용하는 것을 권장한다.
XML 파일의 위치는 아래와 같다.
모듈이름.쿼리ID- modules/
모듈이름/queries/쿼리ID.xml
- modules/
widget.위젯이름.쿼리ID- widgets/
위젯이름/queries/쿼리ID.xml
- widgets/
addon.애드온이름.쿼리ID- addons/
애드온이름/queries/쿼리ID.xml
- addons/
쿼리 실행 방법
라이믹스에서 쿼리를 실행할 때는 executeQuery 혹은 executeQueryArray 함수를 사용한다.
// executeQueryArray('모듈이름.쿼리ID', [ '파라미터명' => '값', ... ]);
$my_array = executeQueryArray('모듈이름.쿼리ID',
[
'document_srl' => $document_srl,
'module_srl' => $module_srl,
],
);SELECT 쿼리
<query id="getDocumentList" action="select">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="module_srl" var="module_srl" filter="number" />
</conditions>
<navigation>
<list_count var="list_count" default="20" />
</navigation>
</query>연산자
<condition> 요소의 operation 속성은 조건의 연산자를 뜻한다.
자세한 내용은 DB 쿼리 operator 공식 문서를 참고하여 확인할 수 있다.
INSERT 쿼리
<query id="insertDocument" action="insert">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="document_srl" var="document_srl" />
<column name="module_srl" var="module_srl" notnull="notnull" />
<column name="is_notice" var="is_notice" notnull="notnull" />
<column name="title" var="title" />
<column name="content" var="content" notnull="notnull" />
<column name="readed_count" var="readed_count" notnull="notnull" />
<column name="list_order" var="list_order" notnull="notnull" />
<column name="regdate" var="regdate" default="curdate()" />
<column name="status" var="status" />
</columns>
</query>UPDATE 쿼리
<query id="updateDocument" action="update">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="document_srl" var="document_srl" />
<column name="module_srl" var="module_srl" />
<column name="is_notice" var="is_notice" />
<column name="title" var="title" />
<column name="content" var="content" />
<column name="readed_count" var="readed_count" />
<column name="list_order" var="list_order" />
<column name="regdate" var="regdate" />
<column name="status" var="status" />
</columns>
<conditions>
<condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" />
</conditions>
</query>executeQuery시에 파라메터에 없는 key는 무시됨
쿼리 실행시에 파라메터에 넣지않은 key는 변경되지 않는다.
예를 들어 title을 매개변수 부분에 넣지 않으면 title은 변경되지 않는다.
DELETE 쿼리
<query id="deleteDocument" action="delete">
<tables>
<table name="documents" />
</tables>
<conditions>
<condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" />
</conditions>
</query>참고 문서
XML 쿼리 빌더에 대한 자세한 내용은 아래 링크를 통해 확인할 수 있다.
(고급) DB 접속 방법 변경 및 XML 문법 확장
쿼리 자동 생성기
