'자료정리'에 해당되는 글 1

  1. 2009.11.24 Xml Query Parser (1)

Xml Query Parser



 

 Xml Query Parser

http://doc.zeroboard.com/classXmlQueryParser.html (클래스 구조)

 

개요

  1. XpressEngine는 query문을 직접 사용하지 않습니다.
  2. 이는 다양한 DBMS를 지원하기 위해서입니다.
  3. XML Query문의 확장자는 .xml 입니다.

 

사용법

모듈 또는 애드온, 플러그인등에서 아래와 같이 사용할 수 있습니다.

  1. $args->name = "zero";
  2. $output = executeQuery("member.getMemberInfo", $args);

 

XML Query를 호출하여 실제 DB의 데이터를 받거나 조작하기 위해서 사용되는 executeQuery() 함수는 DB::executeQuery()의 alias입니다.

  1. function executeQuery($xml_query_name, $args = null);

첫번째 인자로 실행하고자 하는 xml query의 이름을 받게 됩니다.
이름은 모듈명.쿼리ID 로 이루어집니다.

$args는 null일수도 있고 해당 xml query에서 필요시 stdclass의 variables type으로 변수의 key, value를 설정후 인자로 넘기게 됩니다.

결과는 Object class의 객체로 return 됩니다.

 

쿼리 실패는 $output->toBool()이 false일 경우이고 true라면 쿼리는 정상적으로 실행이 된 것을 의미합니다.

select문의 결과 데이터는 $output->data 변수에 담겨져 return 됩니다.

 

XML sample

  1. <query id="쿼리아이디" action="select|update|delete|insert">
        <tables>
            <table name="원테이블이름" alias="alias" />
            ...
        </tables>

        <columns>
            <column name="컬럼명" alias="alias" />
            ...
        </columns>

        <conditions>
            <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" />
            ...
            <group pipe="연결연산자">
                <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" />
                ...
            </group>
            ...
        </conditions>

        <navigation>
            <index var="이름" default="기본값" order="desc|asc" />
            <list_count var="변수명" default="기본값" />
            <page_count var="변수명" default="기본값" />
            <page var="변수명" default="변수명" />
        </navigation>

        <groups>
            <group column="GroupBy 대상" />
        </groups>
    </query>

 

  • <query> 의 attribute

    • id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.
      action : select, update, delete, insert 4가지 종류가 있습니다.

     

  • <tables>
    • 테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.
      name : 원테이블 명 (제로보드XE에서 prefix는 무시) alias : join또는 다른 용도로 원테이블명을 바꾸어 사용할 경우
  • <columns>
    • 처리하고자 하는 컬럼명을 입력하시면 됩니다. name : 컬럼명 alias : 다른 이름으로 바꾸어 결과를 만들고자 할 경우 지정
  • <conditions>
    • 조건절을 구성합니다.
    • 조건절을 여러개의 그룹으로 사용하고자 할 때에는 <group> 태그를 이용해서 묶어 주실 수 있습니다.
  • <group> ... </group>
    • 조건절을 그룹으로 사용할 경우 pipe="and|or" 를 이용하여 그룹끼리의 조건을 지정할 수 있습니다.
  • <condition>
    • operation : 아래와 같은 연산자로 처리가 됩니다.

      equal : column = (var|default)
      more : column >= (var|default)
      excess : column > (var|default)
      less : column <= (var|default)
      below : column < (var|default)
      notequal : column != (var|default)
      notnull : column is not null
      null : column is null
      like_prefix : column like '%var|default'
      like_tail : column like 'var|default%'
      like : column like '%var|default%'
      in : column in (var|default)
    • column : 컬럼명을 지정할 수 있습니다.
    • var : executeQuery()함수에서 2번째 인자의 key값을 지정할 수 있습니다.
    • filter : var 값의 조건을 filtering합니다. 아래와 같은 filter를 지원합니다.

      email, email_address : 메일 형식
      homepage : http|https://등의 홈페이지 형식
      userid, user_id : 제로보드XE의 사용자 아이디 형식 (첫글자는 영문, 2번째부터는 숫자+영문+_)
      number : 숫자만 허용
      alpha : 영문자만 허용
      alpha_number : 숫자+영문자만 허용
    • default : var값이 null일 경우 default값으로 대체됩니다. 아래와 같은 함수값을 가질 수도 있습니다.

      ipaddress() : 접속자의 ip 주소
      unixtime() : unix time (php의 time()함수)
      curdate() : YYYYMMDDHHIISS
      plus(int count) : column = column + count
      minus(int count) : column = column - count
    • notnull : not null check를 하게 됩니다. minlength : 최소길이 체크 maxlength : 최대길이 체크 pipe : and|or등의 조건을 지정할 수 있습니다.
  • <navigation> : navigation은 정렬순서(order by) 또는 페이징을 지원합니다.

    • <index> 정렬할 컬럼과 정렬방법을 지정할 수 있습니다.

      var : 대상 컬럼명을 담은 변수명
      default : var값이 없을 경우 기본으로 정렬할 컬럼명 지정
      order : asc|desc
    • <list_count> 페이징을 한 결과를 받을 수 있습니다.

      var : 목록의 rows를 지정
      default : var값이 없을 경우 기본 rows 값
    • <page_count> 페이징 계산시에 하단 페이지 네비게이션의 수를 지정

      var : 페이징 네비게이션의 수
      default : var값이 없을 경우 기본 페이징 네비게이션의 수
    • <page> 현재 몇번째 페이지인지를 지정할 수 있습니다.

      var : 현재 몇번째 페이지인지를 지정할 변수
      default : var값이 지정되지 않았을 경우 페이지 번호

     

  • <groups> : group by 절을 사용할 수 있습니다.

 

Select query 예제

  • member.getMemberList : member테이블에서 특정 조건을 가진 회원들을 페이징을 하면서 select

    1. <query id="getMemberList" action="select">
      <tables>
         <table name="member" />
      </tables>

    2. <columns>
         <column name="*" />
      </columns>

    3. <conditions>
          <condition operation="equal" column="is_admin" var="is_admin" />
         <condition operation="equal" column="denied" var="is_denied" pipe="and" />
         <group pipe="and">
              <condition operation="like" column="user_id" var="s_user_id" />
              <condition operation="like" column="user_name" var="s_user_name" pipe="or" />
              <condition operation="like" column="nick_name" var="s_nick_name" pipe="or" />
              <condition operation="like" column="email_address" var="s_email_address" pipe="or" />
              <condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" />
              <condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" />
          </group>
      </conditions>

      <navigation>
          <index var="sort_index" default="member_srl" order="desc" />
          <list_count var="list_count" default="20" />
          <page_count var="page_count" default="10" />
          <page var="page" default="1" />
      </navigation>
      </query>
  • document.getMonthlyArchivedList : 모듈을 '년월'일을 기준으로 group by 한 결과를 가져옴
  1. <query id="getMonthlyArchivedList" action="select">
    <tables>
        <table name="documents" />
    </tables>

    <columns>
        <column name="substr(regdate,1,6)" alias="month"/>
        <column name="count(*)" alias="count" />
    </columns>

    <conditions>
       <condition operation="in" column="module_srl" var="module_srl" filter="number" />
    </conditions>

    <groups>
        <group column="substr(regdate,1,6)" />
    </groups>
    </query>

 

Insert 예제

  • document.insertCategory : 문서 카테고리 추가

    1. <query id="insertCategory" action="insert">
      <tables>
          <table name="document_categories" />
      </tables>

      <columns>
          <column name="category_srl" var="category_srl" filter="number" notnull="notnull" />
          <column name="module_srl" var="module_srl" filter="number" default="0" notnull="notnull" />
          <column name="title" var="title" notnull="notnull" minlength="2" maxlength="250" />
          <column name="document_count" var="document_count" default="0" />
          <column name="regdate" var="regdate" default="curdate()" />
          <column name="last_update" var="last_update" default="curdate()" />
          <column name="list_order" var="list_order" default="0" />
      </columns>
      </query>

 

update 예제

  • document.updateCategory : 특정 카테고리의 제목이나 순서, 최근 수정일을 변경

    1. <query id="updateCategory" action="update">
      <tables>
          <table name="document_categories" />
      </tables>

      <columns>
          <column name="title" var="title" />
          <column name="list_order" var="list_order" />
          <column name="last_update" var="last_update" default="curdate()" />
      </columns>

      <conditions>
          <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" />
      </conditions>
      </query>

 

delete 예제

  • document.deleteCategory : 특정 카테고리를 삭제

    1. <query id="deleteCategory" action="delete">
      <tables>
          <table name="document_categories" />
      </tables>

      <conditions>
          <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" />
      </conditions>
      </query>

 



From : http://zbxe.springnote.com/pages/392367


저작자 표시 비영리 변경 금지
신고
Trackback 4 COMMENT : 1