Bot::BasicBot::Pluggable::Module::SimpleBlog::Store::SQLite - SQLite storage for Bot::BasicBot::Pluggable::Module::SimpleBlog.


Bot-BasicBot-Pluggable-Module-SimpleBlog documentation Contained in the Bot-BasicBot-Pluggable-Module-SimpleBlog distribution.

Index


Code Index:

NAME

Top

Bot::BasicBot::Pluggable::Module::SimpleBlog::Store::SQLite - SQLite storage for Bot::BasicBot::Pluggable::Module::SimpleBlog.

SYNOPSIS

Top

  use Bot::BasicBot::Pluggable::Module::SimpleBlog::Store::SQLite;

  my $blog_store =
    Bot::BasicBot::Pluggable::Module::SimpleBlog::Store::SQLite->new(
      "/home/bot/brane.db" );

DESCRIPTION

Top

Store URLs in a sqlite database for Bot::BasicBot::Pluggable::Module::SimpleBot.

IMPORTANT NOTE WHEN UPGRADING FROM PRE-0.02 VERSIONS

Top

I'd made a thinko in version 0.01 in one of the column names in the table used to store the URLs in the database, so you'll have to delete your store file and start again. It didn't seem worth automatically detecting and fixing this since I only released 0.01 yesterday and I don't expect anyone to have installed it yet.

METHODS

Top

new
  my $blog_store =
    Bot::BasicBot::Pluggable::Module::SimpleBlog::Store::SQLite->new(
      "/home/bot/brane.db" );

You must supply a filename writeable by the user the bot runs as. The file need not already exist; it will be created and the correct database schema set up as necessary.

Croaks if DBD::SQLite fails to connect to the file.

dbh
  my $dbh = $store->dbh;

Returns the store's database handle.

store
  $store->store( timestamp => $timestamp,
                 name      => $who,
                 channel   => $channel,
                 url       => $url,
                 comment   => $comment );

Stores the given information in the database. Croaks on error.

BUGS

Top

No retrieval methods yet.

SEE ALSO

Top

* Bot::BasicBot::Pluggable::Module::SimpleBlog

AUTHOR

Top

Kake Pugh (kake@earth.li).

COPYRIGHT

Top


Bot-BasicBot-Pluggable-Module-SimpleBlog documentation Contained in the Bot-BasicBot-Pluggable-Module-SimpleBlog distribution.
package Bot::BasicBot::Pluggable::Module::SimpleBlog::Store::SQLite;

use strict;
use vars qw( $VERSION );
$VERSION = '0.02';

use base qw(Bot::BasicBot::Pluggable::Module::Base);

use Carp;
use DBD::SQLite;

sub new {
    my ($class, $filename) = @_;

    my $dbh = DBI->connect("dbi:SQLite:dbname=$filename", "", "")
      or croak "ERROR: Can't connect to sqlite database: " . DBI->errstr;

    my $self = { };
    bless $self, $class;

    $self->{dbh} = $dbh;
    $self->ensure_db_schema_correct or return;
    return $self;
}

sub dbh {
    my $self = shift;
    return $self->{dbh};
}

sub ensure_db_schema_correct {
    my $self = shift;
    my $dbh  = $self->{dbh};

    my $sql = "SELECT name FROM sqlite_master WHERE type='table'
                              AND name='blogged'";
    my $sth = $dbh->prepare($sql)
      or croak "ERROR: " . $dbh->errstr;
    $sth->execute;
    my ($ok) = $sth->fetchrow_array;
    return 1 if $ok;

    $dbh->do("CREATE TABLE blogged
                  ( timestamp text, name text, channel text, url text, comment text )" )
      or croak "ERROR: " . $dbh->errstr;
    return 1;
}

sub store {
    my ($self, %args) = @_;
    my $dbh = $self->{dbh};

    my $sth = $dbh->prepare( qq{
                INSERT INTO blogged (timestamp, name, channel, url, comment)
                              VALUES (?, ?, ?, ?, ?)
        }) or return "Error: can't insert into database: " . $dbh->errstr;

    $sth->execute( @args{ qw( timestamp name channel url comment ) } )
      or croak "Error: can't insert into database: " . $dbh->errstr;

    return 1;
}

1;