| Bryar documentation | Contained in the Bryar distribution. |
Bryar::DataSource::DBI - Retrieve blog posts and comments from database
CREATE TABLE posts (
id mediumint(8) unsigned NOT NULL auto_increment,
content text,
title varchar(255),
epoch timestamp,
category varchar(255),
author varchar(20),
PRIMARY KEY(id)
);
CREATE TABLE comments (
id mediumint(8) unsigned NOT NULL auto_increment,
document mediumint(8),
content text,
epoch timestamp,
url varchar(255),
author varchar(20),
PRIMARY KEY(id)
);
Class::DBI::mysql and Class::DBI::AbstractSearch source: Bryar::DataSource::DBI in your Bryar config. | Bryar documentation | Contained in the Bryar distribution. |
package Bryar::Comment::DBI; use base qw(Class::DBI::mysql Bryar::Comment); __PACKAGE__->set_db('Main','dbi:mysql:bryar'); __PACKAGE__->set_up_table('comments'); package Bryar::Document::DBI; use base qw(Class::DBI::mysql); use Class::DBI::AbstractSearch; __PACKAGE__->set_db('Main','dbi:mysql:bryar'); __PACKAGE__->set_up_table('posts'); __PACKAGE__->has_many('comments' => 'Bryar::Comment::DBI' => 'document'); use Bryar::Document; push @Bryar::Document::DBI::ISA, "Bryar::Document"; package Bryar::DataSource::DBI; use Time::Piece;
sub search { my ($self, $config, %params) = @_; return Bryar::Document::DBI->retrieve($params{id}) if $params{id}; my %condition = (1 => 1); # To make sure we have something $condition{epoch} = {between => [ _epoch2ts($params{since}), _epoch2ts($params{before}) ] } if $params{since}; $condition{"lower(content)"} = {like => "%". lc $params{content}."%"} if $params{content}; my %limits; $limit{limit} = $params{limit} if $params{limit}; Bryar::Document::DBI->search_where(\%condition, \%limit); } sub _epoch2ts { Time::Piece->new(shift)->strftime("%Y%m%d%H%M%S"); } sub add_comment { my ($self, $config, %params) = @_; Bryar::Document::Comment->new(\%params); }