글
IT/Perl 2010. 6. 24. 20:34[ Perl ] 그리고 거기에 TimeStamp 가 있었다 // DBIx::Class
2008/08/06 - [IT/Perl] - [ Perl ] Perl 에서의 ORM , DBIx::Class에 대해서... #3 - Component
요즘 출퇴근길에 The Definitive Guide to Catalyst 를 보고 있습니다. 테스트코드의 중요성을 역설하는 많은 부분을 엿볼 수 있었습니다. 아니.. 뭐 그보다 다른 사람들은 어떻게 Catalyst 를 쓰냐는 것이 궁금하기도 해서 여러 소스를 디벼보기도 하며 참고하기도 하는데요. 그런 면도 있는 반면에 저 자신이 2-3년 계속 익숙하게 써오던 구문들을 고집하기도 합니다.
위의 링크에서 볼 수 있는 자체정의한 AutoStoreDateTime 부분이 바로 그렇습니다.
매번 DBIx::Class 를 사용하는 프로젝트마다 저렇게 따로 정의해놓고 쓰는 습관이 있었습니다. 이게 바로 대표적인 2-3년 동안 계속 써오던 그런 고집이죠.
The Definitive Guide To catalyst 를 보면서 TimeStamp(=DBIx::Class::TimeStamp) 의 존재를 알게되었고,
이것이 AutoStoreDateTime 으로 따로 컴포넌트를 정의할 필요성을 박살내버려주었습니다.
package My::Schema;
__PACKAGE__->load_components(qw( TimeStamp ... Core ));
__PACKAGE__->add_columns(
id => { data_type => 'integer' },
t_created => { data_type => 'datetime', set_on_create => 1 },
t_updated => { data_type => 'datetime',
set_on_create => 1, set_on_update => 1 },
);
TimeStamp 컴포넌트를 읽어주고 DateTime 타입의 컬럼에다가
set_on_create / set_on_update 만 지정해주면 되는 것이죠.
말 그대로 INSERT 쿼리에서는 set_on_create 가 UPDATE 쿼리에서는 set_on_update 가 지정된 컬럼의 값이 자동으로 갱신됩니다.
DBIx::Class::TimeStamp 자체는 사실 DBIx::Class::DynamicDefault 에 조금 손을 댄 것 뿐이니...
이렇게 저렇게 다른 컬럼에 값을 바꿔보고 싶다든가 할때는 DBIC::DynamicDefault 를 참고해보는 것도 좋지 않을까 합니다.
// 그런 의미에서 급하게 [개인적인 일]에서 사용되던 코드들을 모조리 DBIx::Class::TimeStamp 로 바꿔버렸습니다.
역시 쓸데없는 자기전용 컴포넌트 // 네임스페이스 생성은 독입니다. 세상은 꾸준히 바뀌어가니... =3
** 추기 (2010/09/06)
아, 이건 DBIC 의 bulk_insert(populate) 를 이용했을 시에는 적용되지 않습니다. (당연한가;;)
'IT > Perl' 카테고리의 다른 글
요즘 작업중인 프로젝트의 Catalyst 구성에 대해서 (0) | 2010.08.14 |
---|---|
[ Perl ] 그리고 거기에 TimeStamp 가 있었다 // DBIx::Class (0) | 2010.06.24 |
[ Perl ] 일본에서의 「Perl」상표 등록문제 (0) | 2010.06.22 |
[ #perl-kr/perl ] 이제 슬슬 병진조약에 대해서 말해볼까 (0) | 2010.05.29 |
RECENT COMMENT