블로그 이미지
JEEN

서울에 사는 꽃청년의 IT찌질모험기

Rss feed Tistory
IT/Perl 2010.06.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) 를 이용했을 시에는 적용되지 않습니다. (당연한가;;)
신고
TOTAL 466,854 TODAY 28

티스토리 툴바