Comment May 12, 2014
1. 상황
모듈 개발 중 테이블 스키마와 쿼리를 아래처럼 만들고 excecuteQuery를 때렸습니다.
[schemas/items.xml]
<table name="test_items"> <column name="item_srl" type="number" size="11" notnull="notnull" auto_increment="auto_increment" primary_key="primary_key " /> <column name="display_name" type="varchar" size="50" /> </table>
[queries/insertItem.xml]
<query id="insertItem" action="insert"> <tables> <table name="test_items" /> </tables> <columns> <column name="display_name" var="display_name" maxlength="50"/> </columns> </query>
당연히 insert가 되었을 줄 알았지만 에러가 났습니다.
error: Unknown column 'xxx' in 'field-list'
헐... 'xxx'는 값인데 컬럼이라니.
쿼리문을 찍어 봤습니다.
INSERT INTO `xe_test_items` (`display_name`) VALUES (`xxx`)
값에 `(어퍼스트로피)가 씌워져 있는 것이 문제의 원인이었습니다.
2. 추적
끊질긴 추적 끝에 쿼리 캐쉬 파일(files/cache/queries/)이 다른 것들과 차이가 있음을 발견했습니다.
* 쿼리 캐쉬 파일은 DB.class.php의 checkQueryCacheFile 함수를 통해 만들어 집니다.
정상)
${'document_srl206_argument'} = new Argument('document_srl', $args->{'document_srl'});
${'document_srl206_argument'}->checkFilter('number');
${'document_srl206_argument'}->checkNotNull();
if(!${'document_srl206_argument'}->isValid()) return ${'document_srl206_argument'}->getErrorMessage();
if(${'document_srl206_argument'} !== null) ${'document_srl206_argument'}->setColumnType('number');
if(isset($args->display_name)) {${'display_name14_argument'} = new Argument('display_name', $args->{'display_name'});if(!${'display_name14_argument'}->isValid()) return ${'display_name14_argument'}->getErrorMessage();} elseTagList
AttachmentFile List
스키마 이름은 모듈과 무관합니다. 모듈_테이블명.xml 로 할 필요가 없습니다.
그냥, 스키마 이름을 테이블명과 동일하게만 하면 됩니다.
스키마 이름은 items 이고, 테이블명은 test_items 여서 안 되었던거기에
test_items 로 통일하거나, 아니면 items 로 통일하면 됩니다. ( test 가 모듈명이었나보네요 ^^;)