App-PM-Announce

 view release on metacpan or  search on metacpan

lib/App/PM/Announce/History.pm  view on Meta::CPAN

CREATE TABLE event (
    id                  INTEGER PRIMARY KEY AUTOINCREMENT,
    uuid                TEXT NOT NULL,
    data                TEXT NOT NULL DEFAULT '{}',
    insert_datetime     DATE NOT NULL DEFAULT current_timestamp,
    update_datetime     DATE,

    UNIQUE (uuid)
);
---
CREATE TRIGGER event_update_trigger AFTER UPDATE ON event
BEGIN
    UPDATE event SET update_datetime = current_timestamp;
END;
_END_

    for my $statement ($script->statements) {
        $dbh->do( $statement) or die $dbh->errstr;
    }
}

sub insert {
    my $self = shift;
    my $uuid = shift;
    my %data = @_;

    my $db = $self->db;
    my $data = $json->encode( \%data );

    $db->query( 'INSERT INTO event (uuid, data) VALUES (?, ?)', $uuid, $data ) or die $db->error;
}

sub find_or_insert {
    my $self = shift;
    my $uuid = shift;

    my $result = $self->_fetch( $uuid );
    return $result if $result;
    $self->insert( $uuid );
    return $self->fetch( $uuid );
}

sub _fetch {
    my $self = shift;
    my $uuid = shift;

    my $db = $self->db;
    return $self->inflate( $db->query( 'SELECT * FROM event WHERE uuid = ? LIMIT 1', $uuid )->hash );
}

sub fetch {
    my $self = shift;
    my $uuid = shift;

    my $result = $self->_fetch( $uuid );
    die "Couldn't fetch $uuid" unless $result;

    return $result;
}

sub update {
    my $self = shift;
    my $uuid = shift;
    my %data = @_;

    my $db = $self->db;
    my $result = $self->fetch( $uuid ) or die "Couldn't find record for $uuid";
    my $data = $json->encode( { %{ $result->{data} }, %data } );

    $db->query( 'UPDATE event SET data = ? WHERE uuid = ?', $data, $uuid ) or die $db->error;
}

sub inflate {
    my $self = shift;
    my $result = shift;
    $result->{data} = $json->decode( $result->{data} ) if $result && $result->{data};
    return $result;
}

sub all {
    my $self = shift;

    my $db = $self->db;
    return map { $self->inflate( $_ ) } $db->query( 'SELECT * FROM event ORDER BY insert_datetime' )->hashes;
}

sub find {
    my $self = shift;
    my $query = shift;

    my $db = $self->db;
    return $self->inflate( $db->query( 'SELECT * FROM event WHERE uuid LIKE ? ORDER BY insert_datetime DESC LIMIT 1', "$query%" )->hash );
}

1;
__END__

CREATE TRIGGER match_player_nm_trigger AFTER INSERT ON match_player
BEGIN
    UPDATE match_player SET nm = (SELECT coalesce(max(nm) + 1, 1) FROM match_player WHERE mtch_id = new.mtch_id) WHERE rowid = new.rowid;
END;

[% PRIMARY_KEY = "INTEGER PRIMARY KEY AUTOINCREMENT" %]
[% KEY = "INTEGER" %]

    id                  [% PRIMARY_KEY %],

[% CLEAR %]
--
CREATE TABLE topic (
    id                  [% PRIMARY_KEY %],
    site                TEXT KEY,
    site_topic_id       TEXT KEY,
    title               TEXT,
    category            TEXT,
    remote_post_count   INT DEFAULT 0,
    rank                INT DEFAULT 0,
    rank_dtime          DATE,
    insert_dtime        DATE NOT NULL DEFAULT current_timestamp,
    update_dtime        DATE,
    appendix            TEXT NOT NULL DEFAULT '{}',



( run in 2.418 seconds using v1.01-cache-2.11-cpan-9581c071862 )