summaryrefslogtreecommitdiff
path: root/lib/VNDB/DB/Docs.pm
blob: d7c220ffa7df4d2151ef0d30fd24f3fcffcd9544 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

package VNDB::DB::Docs;

use strict;
use warnings;
use Exporter 'import';

our @EXPORT = qw|dbDocGet dbDocGetRev|;


# Can only fetch a single document.
# $doc = $self->dbDocGet(id => $id);
sub dbDocGet {
  my $self = shift;
  my %o = @_;

  my $r = $self->dbAll('SELECT id, title, content FROM docs WHERE id = ?', $o{id});
  return wantarray ? ($r, 0) : $r;
}


# options: id, rev
sub dbDocGetRev {
  my $self = shift;
  my %o = @_;

  $o{rev} ||= $self->dbRow('SELECT MAX(rev) AS rev FROM changes WHERE type = \'d\' AND itemid = ?', $o{id})->{rev};

  my $r = $self->dbAll(q|
    SELECT de.id, d.title, d.content, de.hidden, de.locked,
           extract('epoch' from c.added) as added, c.requester, c.comments, u.username, c.rev, c.ihid, c.ilock, c.id AS cid,
           NOT EXISTS(SELECT 1 FROM changes c2 WHERE c2.type = c.type AND c2.itemid = c.itemid AND c2.rev = c.rev+1) AS lastrev
      FROM changes c
      JOIN docs de ON de.id = c.itemid
      JOIN docs_hist d ON d.chid = c.id
      JOIN users u ON u.id = c.requester
      WHERE c.type = 'd' AND c.itemid = ? AND c.rev = ?|,
     $o{id}, $o{rev}
  );
  return wantarray ? ($r, 0) : $r;
}

1;