포럼
컬럼 리스트와 관련
2011.10.21 11:06
1.5에서 컬럼 리스트가 생겼습니다.
취지는 좋습니다. 그러나 컬럼 리스트를 설정으로 추가 할 수 없어 불편합니다.
예.
문서 테이블에 abc 컬럼을 추가합니다.
이것을 게시판에서 불러오려면 소스를 찾아다니며 수정해야 합니다. 이렇게 되면 게시판 까지 배포해야 되는 셈입니다.
그럼 다른 프로그램에서도 동일한 방법을 사용했다면 사용자는 어떻게 수정해야 할지 난감합니다.
이왕 컬럼리스트를 사용하기로 했다면 모듈 설정에서 컬럼을 추가할 수 있도록 하는 것이 좋은 것 같습니다.
그리고 기존 문서 테이블에 있는 컬럼을 불러와서 사용하고 싶을 때도 있습니다.
예를 문서 테이블로 들었지만 코멘트 테이블도 마찬가지겠지요.
현재 목록 설정에서 설정 할 수 있는 것도 테이블의 컬럼을 모두 보여 주고 선택하는 것이 아니라서 일부 항목은 목록에 나타나지 않습니다.
왜 모듈이나 애드온, 위젯 등으로 하지 문서 테이블에 컬럼을 추가하느냐고 묻는다면, 테스트 결과 게시판 목록이나 열람 시 문서 테이블에 포함해서 한번에 불러오는 것이 훨씬 빠릅니다. 빠르기가 눈에 보이는 정도면 상당한 것이라고 생각합니다.
캠프 때 말하려고 했는데 정식 출시 보다 시기적으로 늦을 것 같아 올렸습니다.
댓글 23
-
guny
2011.10.21 11:14
-
백성찬
2011.10.21 11:17
보여주는 것이 아니고 내부 소스에서 변경 된 것입니다.
예전에는 모든 컬럼을 불러왔는데 지금은 필요한 것만 불러옵니다.
장점은 가벼워지는 것이고 단점은 셋팅되지 않은 컬럼은 사용할 방법이 없다는 것입니다. -
銀童
2011.10.21 12:12
모듈 설정에서 컬럼을 추가한다면 쿼리 보낼때 그 설정 데이터를 가져와야하는데
가벼워지기 위해서 만든게 아무 의미가 없어지지 않나요?
게시물 목록 요구 -> 가져올 컬럼 (모듈 데이터) 확인 -> SQL 과정은
이전의 다 가져오는것보다 오히려 느려질 가능성만 있다고 봅니다.
데이터베이스 전송량의 감소, 부하 감소를 위해서 만든건데
추가적인 DB 억세스를 하게 하는것은 정말 낭비라고 생각되네요.
-
백성찬
2011.10.21 13:15
설정 값은 캐시에 가 있는 것입니다.
추가하고 싶은 사람은 'document_srl', 'module_srl', 'category_srl', ... 등등에 추가 되는 것 뿐입니다. 추가되는 것 없으면 기본으로 설정해놓은 것을 불러 오는 것 뿐입니다.
기본에 포함된 것도 사용하지 않는 사람도 있을 수 있습니다.빠르기야 스킨에 직접 쿼리로 때리는 것이 빠르지요.
-
銀童
2011.10.21 13:19
캐시가 모든 XE 사용자가 사용할수 있다면 모를까
캐시가 없는 환경도 고려해야하지 않나요?
물론 메모리 캐시로 구현한다면 부하가 적겠지만,
어찌됐뜬 쓸모없는 부하가 추가로 생기는건 마찬가지구요.
-
백성찬
2011.10.21 13:23
xe 자체가 캐시로 만들어서 작동하는 구조입니다. 서버에서 메모리를 사용하든 파일을 읽어오든 환경에 따라 다른 것 뿐입니다.
즉 문서 목록이라면 미리 생성 된 document.getDocumentList.1.5.0.6_beta.cache를 가져오는 것입니다.
-
백성찬
2011.10.21 13:52
컬럼을 추가로 불러 올 다른 경우입니다.
xe가 다국어(12개국)로 작성이 가능한데 회원이 작성한 글이 어떤 언어로 작성했는지 모르겠지요?
게시물이 잘 못 되어서 수정을 해야겠다고 생각해봅시다.
모임을 알리는 글이라고 가정합니다.
시간이 잘 못 적혔다고 가정합니다.
회원은 터키어로 작성했습니다.
관리자는 한국어로 수정했습니다.
관리자는 수정이 잘되어 흐뭇하겠지만 터키어로 보는 사람을 수정이 되지 않은 글로 봅니다.
그러나 관리자가 터키어로 작성한 것을 알고, 수정 할 때도 터키어에서 수정을 했다면 수정이 완벽하게 되었을 것 입니다.
해외이거나 영문판 os를 사용 할 경우 처음 작성할 때 영문으로 적히는 경우도 허다 할 것입니다.
즉 기본에서는 lang_code를 불러오지 않습니다. 알아보려고 해도 알 수 가 없지요.
예로 http://www.bek.me/index.php?mid=hpsfree 게시판의 게시물은 상단에 작성할 때의 언어를 보여줍니다. 그러면 수정 권한이 있는 사람이 글을 수정할 때 작성 된 언어로 변경해서 수정을 하겠지요.
컬럼을 필요에 따라 추가로 불러와 사용해야 될 이유를 말한 것일 뿐입니다. -
銀童
2011.10.21 14:22
파일 캐시의 경우... 가 정말 부하를 적게 먹는다고 생각하시나요?
쿼리 별로 생성되는것도 아니고
함수 별로 컬럼 목록이 다르니까
함수별로 생성이 되야하는건데 그걸 각각 불러서 함수를 실행한다라. -_-;
i/o 부하는 왜 부하로 생각하지 않으시는지 모르겠습니다.
파일 캐시를 아예 떠올리지도 못한 이유는 그걸 캐시로 쓸 생각 자체를 못해봐서 ..
메모리 캐시라면 모를까 파일 단위로는 부하가 추가적으로 야기될꺼라고 생각하는데요.
-_-; 개인적으로는 아무래도 납득하기 힘듭니다.
-
백성찬
2011.10.21 14:34
무슨 말인지 잘 이해가 되지 않습니다.
컬럼 추가설정을 떠나서 캐시방식이 문제가 있다면 근본적으로 xe 코어 자체를 뜯어고쳐야지요.
캐시를 사용하는 것이 현재 xe의 방식입니다.
데이터에 접근할 때 마다 전체 소스를 다 훑어서 쿼리를 만드는 구조가 아닙니다.
예로 document.getDocumentList.1.5.0.6_beta.cache 열람해보고 생성된 날짜와 수정한 날짜를 보십시오.
무슨 내용이 있고 언제 파일이 갱신이 되는지.
참고로 xe 1.5.0.6이 10월 19일 배포되었고 제 서버에 10월 19일에 최종 수정되었습니다. 오늘은 10월 21일이죠.
물론 해당 파일을 삭제하면 오늘 다시 생성 될 것입니다. -
銀童
2011.10.21 14:37
아 저 캐시가 예를드신게 아니라 기존에 있는 쿼리 캐시 말인가요.
그걸 쓸수 없는 이유가
같은 쿼리어도 컬럼 리스트를 다르게 입력해서 사용하는 예가 XE 에는 얼마든 있습니다.
즉. 별도의 캐시 파일을 추가해서 처리해야한다는 이야기지요.
같은 쿼리 = 같은 컬럼이 성립한다면, 기존의 쿼리 캐시를 개조해서 사용해도 되겠지만,
그게 아니니, 드리는 말씀입니다.
-
백성찬
2011.10.21 14:40
추가를 원해서 설정을 했다면 해당 캐시 파일의 내용에 추가가 될 뿐입니다.
직접 소스를 수정해서 추가하는 것이나 관리자에서 추가를 편리하게 하는 것이 다를 뿐인 것입니다. -
銀童
2011.10.21 14:45
캐시 파일에 내용에 추가가 되는게 아니라니까요 ..
같은 getNoticeList query 라고 해도 columnList 는 캐시에서 처리되는게 아니라 배열로 받아서 그 캐시를 읽어온다음에 처리합니다.
DB class 를 보시면
$cache_file = $this->checkQueryCacheFile($query_id, $xml_file);
$result = $this->_executeQuery($cache_file, $args, $query_id, $arg_columns);
$arg_columns 는 쿼리 캐시 이후에 처리하도록 되어있습니다.XE DB 캐시는 SQL 문장을 캐시하는게 아니라 XML 을 XE 규칙에 따른 PHP 형태로 컴파일 해둔걸 캐시할 뿐입니다.즉, column_list 는 쿼리 캐시와는 전혀 상관이 없지요.그 생성된 PHP 에 적용되서최종적으로 쿼리 문장이 나오는겁니다. -
銀童
2011.10.21 14:43
정리해보면, 파일 캐시를 쓰던 어쩌든,
현재의 컬럼 리스트 구조를 보면
$output = executeQueryArray('document.getNoticeList', $args, $columnList);
이런식으로 columnList 를 보내는만큼
document.getNoticeList query 캐시에 columnList 를 저장하는것이 아니라
저 함수를 호출하는 시점에서 $columList 를 뭘 불러올지 결정해야합니다.
즉, 그이야기는
호출 시점별로 별개의 설정을 구현해야한다는 이야기로,
호출하는 시점에 따라서 캐시 파일을 별도로 만들어줘야지요.
이게 효율적인 구조라고 보이진 않습니다.
차라리 필요한 부분을 별도로 우회해서 특수한 케이스에 뽑아내는게 훨씬 효율적으로 보입니다.
-
백성찬
2011.10.21 14:48
그것이 관리자가 설정하는 시점에 한번만 되는 것입니다.
기본으로 불러오지 않는 컬럼을 사용하려고 할 때.
소스를 수정하지 않는다는 가정하에서는 사용하는 스킨에서 다시 추가 컬럼을 매번 불러와야 하므로 이것이야 말로 부하를 가중시키는 것입니다. -
銀童
2011.10.21 14:49
? 어떻게 한번만이죠?
.. 대체 어떤 알고리즘으로 구현을 하시려는건지 고견을 좀 들어보고싶습니다.
제가 생각한 알고리즘은 전부 부하가 걱정되서,
점점 라이트한 추세로 나가야할 XE 에 어울리지 않는것 같은데
한번 세부적인 구현 알고리즘을 들어봐도 될까요?
-
백성찬
2011.10.21 14:53
혹시 캠프에 오시면 개발자님들과 xe 코어 구조에 대해 토론을 해보십시오.
$this->columnList = array('document_srl', 'module_srl', 'category_srl', 'title', 'title_bold',
'title_color', 'content', 'readed_count'+ ', 'voted_count', 'comment_count', 'trackback_count',
'uploaded_count', 'nick_name', 'member_srl', 'homepage', 'regdate', 'ipaddress', 'list_order',
'allow_trackback', 'status', '+ 'comment_status', 'update_order');
에 필요에 의해서 lang_code를 추가했다고 매번 불필요한 부담이 생깁니까? 물론 컬럼의 데이터를 가져오는 것과 가져오지 않는 것은 차이가 있겠지만 필요하니 가져와야지요. -
銀童
2011.10.21 14:57
...
코어 구조에 대해서 모르고 말하시는거라고 생각하시고 말씀하시는게 솔직히 좀 불쾌하네요.
위에서도 설명해드렸지만 column list 는 쿼리 캐시 이후에 적용이 됩니다.
예로 들어주신 쿼리 캐시 파일에 컬럼 리스트를 넣을수 없는 이유는,
현재 구조상으로 쿼리 캐시 파일 로드 -> 컬럼 리스트 적용
의 순서기 때문이죠
이것을 컬럼 리스트를 쿼리 캐시에 삽입할수 없는 이유는
같은 쿼리더라도 다양한 컬럼 리스트가 적용되서 상황에 따라서 쓰이기 때문입니다.
즉 그것을 관리자가 커스텀화 하기 위해서는
특정 목적(함수)에서 호출하는 시점에서 컬럼 리스트를 관리자 데이터에서 설정된 데이터로 가져오게 작업할수밖에 없습니다.
이것이 추가적인 부하 야기가 아니면 뭔가요? -_-?
lang_code 를 가져오느냐 마느냐가 부하가 아니라
그것을 관리자 모드에서 유저가 커스텀 할수 있게 지원하는 것 자체가 부하를 유발시킨다는겁니다.
차라리 lang_code 가 다국어 환경에서 필요하니 기본적으로 가져올것에 추가해야한다면 의견에 동조할수 있겠지만,
그걸 관리자 모드에서 수정할수 있게 하자는 의견에는 어찌 해도 동조하기가 힘드네요.
-
백성찬
2011.10.21 15:02
<?php if(!defined('__ZBXE__')) exit();$query = new Query();$query->setQueryId("getDocumentList");$query->setAction("select");$query->setPriority("");if(isset($args->module_srl)) {$module_srl15_argument = new ConditionArgument('module_srl', $args->module_srl, 'in');$module_srl15_argument->checkFilter('number');$module_srl15_argument->createConditionValue();if(!$module_srl15_argument->isValid()) return $module_srl15_argument->getErrorMessage();} else$module_srl15_argument = null;if($module_srl15_argument !== null) $module_srl15_argument->setColumnType('number');if(isset($args->exclude_module_srl)) {$exclude_module_srl16_argument = new ConditionArgument('exclude_module_srl', $args->exclude_module_srl, 'notin');$exclude_module_srl16_argument->checkFilter('number');$exclude_module_srl16_argument->createConditionValue();if(!$exclude_module_srl16_argument->isValid()) return $exclude_module_srl16_argument->getErrorMessage();} else$exclude_module_srl16_argument = null;if($exclude_module_srl16_argument !== null) $exclude_module_srl16_argument->setColumnType('number');if(isset($args->category_srl)) {$category_srl17_argument = new ConditionArgument('category_srl', $args->category_srl, 'in');$category_srl17_argument->createConditionValue();if(!$category_srl17_argument->isValid()) return $category_srl17_argument->getErrorMessage();} else$category_srl17_argument = null;if($category_srl17_argument !== null) $category_srl17_argument->setColumnType('number');if(isset($args->s_is_notice)) {$s_is_notice18_argument = new ConditionArgument('s_is_notice', $args->s_is_notice, 'equal');$s_is_notice18_argument->createConditionValue();if(!$s_is_notice18_argument->isValid()) return $s_is_notice18_argument->getErrorMessage();} else$s_is_notice18_argument = null;if($s_is_notice18_argument !== null) $s_is_notice18_argument->setColumnType('char');if(isset($args->member_srl)) {$member_srl19_argument = new ConditionArgument('member_srl', $args->member_srl, 'equal');$member_srl19_argument->checkFilter('number');$member_srl19_argument->createConditionValue();if(!$member_srl19_argument->isValid()) return $member_srl19_argument->getErrorMessage();} else$member_srl19_argument = null;if($member_srl19_argument !== null) $member_srl19_argument->setColumnType('number');if(isset($args->statusList)) {$statusList20_argument = new ConditionArgument('statusList', $args->statusList, 'in');$statusList20_argument->createConditionValue();if(!$statusList20_argument->isValid()) return $statusList20_argument->getErrorMessage();} else$statusList20_argument = null;if($statusList20_argument !== null) $statusList20_argument->setColumnType('varchar');if(isset($args->division)) {$division21_argument = new ConditionArgument('division', $args->division, 'more');$division21_argument->createConditionValue();if(!$division21_argument->isValid()) return $division21_argument->getErrorMessage();} else$division21_argument = null;if($division21_argument !== null) $division21_argument->setColumnType('number');if(isset($args->last_division)) {$last_division22_argument = new ConditionArgument('last_division', $args->last_division, 'below');$last_division22_argument->createConditionValue();if(!$last_division22_argument->isValid()) return $last_division22_argument->getErrorMessage();} else$last_division22_argument = null;if($last_division22_argument !== null) $last_division22_argument->setColumnType('number');if(isset($args->s_title)) {$s_title23_argument = new ConditionArgument('s_title', $args->s_title, 'like');$s_title23_argument->createConditionValue();if(!$s_title23_argument->isValid()) return $s_title23_argument->getErrorMessage();} else$s_title23_argument = null;if($s_title23_argument !== null) $s_title23_argument->setColumnType('varchar');if(isset($args->s_content)) {$s_content24_argument = new ConditionArgument('s_content', $args->s_content, 'like');$s_content24_argument->createConditionValue();if(!$s_content24_argument->isValid()) return $s_content24_argument->getErrorMessage();} else$s_content24_argument = null;if($s_content24_argument !== null) $s_content24_argument->setColumnType('+ 'bigtext');if(isset($args->s_user_name)) {$s_user_name25_argument = new ConditionArgument('s_user_name', $args->s_user_name, 'like');$s_user_name25_argument->createConditionValue();if(!$s_user_name25_argument->isValid()) return $s_user_name25_argument->getErrorMessage();} else$s_user_name25_argument = null;if($s_user_name25_argument !== null) $s_user_name25_argument->setColumnType('varchar');if(isset($args->s_user_id)) {$s_user_id26_argument = new ConditionArgument('s_user_id', $args->s_user_id, 'like');$s_user_id26_argument->createConditionValue();if(!$s_user_id26_argument->isValid()) return $s_user_id26_argument->getErrorMessage();} else$s_user_id26_argument = null;if($s_user_id26_argument !== null) $s_user_id26_argument->setColumnType('varchar');if(isset($args->s_nick_name)) {$s_nick_name27_argument = new ConditionArgument('s_nick_name', $args->s_nick_name, 'like');$s_nick_name27_argument->createConditionValue();if(!$s_nick_name27_argument->isValid()) return $s_nick_name27_argument->getErrorMessage();} else$s_nick_name27_argument = null;if($s_nick_name27_argument !== null) $s_nick_name27_argument->setColumnType('varchar');if(isset($args->s_email_addres)) {$s_email_addres28_argument = new ConditionArgument('s_email_addres', $args->s_email_addres, 'like');$s_email_addres28_argument->createConditionValue();if(!$s_email_addres28_argument->isValid()) return $s_email_addres28_argument->getErrorMessage();} else$s_email_addres28_argument = null;if($s_email_addres28_argument !== null) $s_email_addres28_argument->setColumnType('varchar');if(isset($args->s_homepage)) {$s_homepage29_argument = new ConditionArgument('s_homepage', $args->s_homepage, 'like');$s_homepage29_argument->createConditionValue();if(!$s_homepage29_argument->isValid()) return $s_homepage29_argument->getErrorMessage();} else$s_homepage29_argument = null;if($s_homepage29_argument !== null) $s_homepage29_argument->setColumnType('varchar');if(isset($args->s_tags)) {$s_tags30_argument = new ConditionArgument('s_tags', $args->s_tags, 'like');$s_tags30_argument->createConditionValue();if(!$s_tags30_argument->isValid()) return $s_tags30_argument->getErrorMessage();} else$s_tags30_argument = null;if($s_tags30_argument !== null) $s_tags30_argument->setColumnType('text');if(isset($args->s_member_srl)) {$s_member_srl31_argument = new ConditionArgument('s_member_srl', $args->s_member_srl, 'equal');$s_member_srl31_argument->createConditionValue();if(!$s_member_srl31_argument->isValid()) return $s_member_srl31_argument->getErrorMessage();} else$s_member_srl31_argument = null;if($s_member_srl31_argument !== null) $s_member_srl31_argument->setColumnType('number');if(isset($args->s_readed_count)) {$s_readed_count32_argument = new ConditionArgument('s_readed_count', $args->s_readed_count, 'more');$s_readed_count32_argument->createConditionValue();if(!$s_readed_count32_argument->isValid()) return $s_readed_count32_argument->getErrorMessage();} else$s_readed_count32_argument = null;if($s_readed_count32_argument !== null) $s_readed_count32_argument->setColumnType('number');if(isset($args->s_voted_count)) {$s_voted_count33_argument = new ConditionArgument('s_voted_count', $args->s_voted_count, 'more');$s_voted_count33_argument->createConditionValue();if(!$s_voted_count33_argument->isValid()) return $s_voted_count33_argument->getErrorMessage();} else$s_voted_count33_argument = null;if($s_voted_count33_argument !== null) $s_voted_count33_argument->setColumnType('number');if(isset($args->s_comment_count)) {$s_comment_count34_argument = new ConditionArgument('s_comment_count', $args->s_comment_count, 'more');$s_comment_count34_argument->createConditionValue();if(!$s_comment_count34_argument->isValid()) return $s_comment_count34_argument->getErrorMessage();} else$s_comment_count34_argument = null;if($s_comment_count34_argument !== null) $s_comment_count34_argument->setColumnType('number');if(isset($args->s_trackback_count)) {$s_trackback_count35_argument = new ConditionArgument('s_trackback_count', $args->s_trackback_count, 'more');$s_trackback_count35_argument->createConditionValue();if(!$s_trackback_count35_argument->isValid()) return $s_trackback_count35_argument->getErrorMessage();} else$s_trackback_count35_argument = null;if($s_trackback_count35_argument !== null) $s_trackback_count35_argument->setColumnType('number');if(isset($args->s_uploaded_count)) {$s_uploaded_count36_argument = new ConditionArgument('s_uploaded_count', $args->s_uploaded_count, 'more');$s_uploaded_count36_argument->createConditionValue();if(!$s_uploaded_count36_argument->isValid()) return $s_uploaded_count36_argument->getErrorMessage();} else$s_uploaded_count36_argument = null;if($s_uploaded_count36_argument !== null) $s_uploaded_count36_argument->setColumnType('number');if(isset($args->s_regdate)) {$s_regdate37_argument = new ConditionArgument('s_regdate', $args->s_regdate, 'like_prefix');$s_regdate37_argument->createConditionValue();if(!$s_regdate37_argument->isValid()) return $s_regdate37_argument->getErrorMessage();} else$s_regdate37_argument = null;if($s_regdate37_argument !== null) $s_regdate37_argument->setColumnType('date');if(isset($args->s_last_update)) {$s_last_update38_argument = new ConditionArgument('s_last_update', $args->s_last_update, 'like_prefix');$s_last_update38_argument->createConditionValue();if(!$s_last_update38_argument->isValid()) return $s_last_update38_argument->getErrorMessage();} else$s_last_update38_argument = null;if($s_last_update38_argument !== null) $s_last_update38_argument->setColumnType('date');if(isset($args->s_ipaddress)) {$s_ipaddress39_argument = new ConditionArgument('s_ipaddress', $args->s_ipaddress, 'like_prefix');$s_ipaddress39_argument->createConditionValue();if(!$s_ipaddress39_argument->isValid()) return $s_ipaddress39_argument->getErrorMessage();} else$s_ipaddress39_argument = null;if($s_ipaddress39_argument !== null) $s_ipaddress39_argument->setColumnType('varchar');if(isset($args->start_date)) {$start_date40_argument = new ConditionArgument('start_date', $args->start_date, 'more');$start_date40_argument->createConditionValue();if(!$start_date40_argument->isValid()) return $start_date40_argument->getErrorMessage();} else$start_date40_argument = null;if($start_date40_argument !== null) $start_date40_argument->setColumnType('date');if(isset($args->end_date)) {$end_date41_argument = new ConditionArgument('end_date', $args->end_date, 'less');$end_date41_argument->createConditionValue();if(!$end_date41_argument->isValid()) return $end_date41_argument->getErrorMessage();} else$end_date41_argument = null;if($end_date41_argument !== null) $end_date41_argument->setColumnType('date');$page44_argument = new Argument('page', $args->page);$page44_argument->ensureDefaultValue('1');if(!$page44_argument->isValid()) return $page44_argument->getErrorMessage();$page_count45_argument = new Argument('page_count', $args->page_count);$page_count45_argument->ensureDefaultValue('10');if(!$page_count45_argument->isValid()) return $page_count45_argument->getErrorMessage();$list_count46_argument = new Argument('list_count', $args->list_count);$list_count46_argument->ensureDefaultValue('20');if(!$list_count46_argument->isValid()) return $list_count46_argument->getErrorMessage();$sort_index42_argument = new Argument('sort_index', $args->sort_index);$sort_index42_argument->ensureDefaultValue('+ 'list_order');if(!$sort_index42_argument->isValid()) return $sort_index42_argument->getErrorMessage();$order_type43_argument = new SortArgument('order_type43', $args->order_type);$order_type43_argument->ensureDefaultValue('asc');if(!$order_type43_argument->isValid()) return $order_type43_argument->getErrorMessage();$query->setColumns(array(new StarExpression()));$query->setTables(array(new Table('+ '`xe_documents`', '`documents`')));$query->setConditions(array(new ConditionGroup(array(new ConditionWithArgument('`module_srl`',$module_srl15_argument,"in"),new ConditionWithArgument('`module_srl`',$exclude_module_srl16_argument,"notin", 'and'),new ConditionWithArgument('`category_srl`',$category_srl17_argument,"in", 'and'),new ConditionWithArgument('`is_notice`',$s_is_notice18_argument,"equal", 'and'),new ConditionWithArgument('`member_srl`',$member_srl19_argument,"equal", 'and'),new ConditionWithArgument('`status`',$statusList20_argument,"in", 'and'))),new ConditionGroup(array(new ConditionWithArgument('`list_order`',$division21_argument,"more", 'and'),new ConditionWithArgument('`list_order`',$last_division22_argument,"below", 'and')),'and'),new ConditionGroup(array(new ConditionWithArgument('`title`',$s_title23_argument,"like"),new ConditionWithArgument('`content`',$s_content24_argument,"like", 'or'),new ConditionWithArgument('`user_name`',$s_user_name25_argument,"like", 'or'),new ConditionWithArgument('`user_id`',$s_user_id26_argument,"like", 'or'),new ConditionWithArgument('`nick_name`',$s_nick_name27_argument,"like", 'or'),new ConditionWithArgument('`email_address`',$s_email_addres28_argument,"like", 'or'),new ConditionWithArgument('`homepage`',$s_homepage29_argument,"like", 'or'),new ConditionWithArgument('`tags`',$s_tags30_argument,"like", 'or'),new ConditionWithArgument('`member_srl`',$s_member_srl31_argument,"equal", 'or'),new ConditionWithArgument('`readed_count`',$s_readed_count32_argument,"more", 'or'),new ConditionWithArgument('`voted_count`',$s_voted_count33_argument,"more", 'or'),new ConditionWithArgument('`comment_count`',$s_comment_count34_argument,"more", 'or'),new ConditionWithArgument('`trackback_count`'+ ',$s_trackback_count35_argument,"more", 'or'),new ConditionWithArgument('`uploaded_count`',$s_uploaded_count36_argument,"more", 'or'),new ConditionWithArgument('`regdate`',$s_regdate37_argument,"like_prefix", 'or'),new ConditionWithArgument('`last_update`',$s_last_update38_argument,"like_prefix", 'or'),new ConditionWithArgument('`ipaddress`',$s_ipaddress39_argument,"like_prefix", 'or')),'and'),new ConditionGroup(array(new ConditionWithArgument('`last_update`',$start_date40_argument,"more", 'and'),new ConditionWithArgument('`last_update`',$end_date41_argument,"less", 'and')),'and')));$query->setGroups(array());$query->setOrder(array(new OrderByColumn($sort_index42_argument, $order_type43_argument)));$query->setLimit(new Limit($list_count46_argument, $page44_argument, $page_count45_argument));return $query; ?>추가하면 여기에 저장되어 매번 변경안합니다. -
銀童
2011.10.21 15:03
위에 설명했지만
저기에는 컬럼리스트 정보는 저장되지 않습니다.
DB.class.php 의
function _executeQuery($cache_file, $source_args, $query_id, $arg_columns) {
함수를 확인해보세요
$output = include($cache_file);
캐시 파일을 로드하고
case 'select' :
$arg_columns = is_array($arg_columns)?$arg_columns:array();
$output->setColumnList($arg_columns);
select 인 경우에 가져온 칼럼 정보를 거기에 적용시켜서
최종 SQL 을 만들어냅니다.
-
백성찬
2011.10.21 15:39
일반적으로 생각을 해보십시오.매번 할 것을 뭐하러 캐시파일을 만들겠습니까? 바로 실행하고 말지.공사장 입구에서 차를 회차시키듯이 위쪽에 캐시파일이 있으면 돌려보내는 곳이 있을 것입니다. -
銀童
2011.10.21 15:44
무슨 말씀이신가요?
잘 이해하지 못하겠습니다.
-
백성찬
2011.10.21 16:01
만약 100개의 게시판이 있다면 쿼리캐시를 100개를 만들어 놓고 부르는 것이 낫지 매번 부르는 것은 비합리적이다는 뜻입니다.
-
銀童
2011.10.21 16:05
.. 아니 왜 그 이야기로 넘어갔는지 이해가 잘 안되는데요.
어찌되었든 제가 드리고 싶은 말은 다 드렸으니
이쯤에서 마무리 할까 합니다. 너무 길어지기도 했고.
어..이런것두 있엇나요..
어디서 볼수 있죠?