8 my $dsn = $ENV{'DBI_DSN'};
9 $dsn = 'dbi:Pg:dbname=news' unless defined $dsn;
11 my $db = DBI->connect($dsn,'','',{AutoCommit => 0,RaiseError=>1});
15 $db->do("set CLIENT_ENCODING to 'SQL_ASCII'");
21 $wildmat =~ s/\./\\\./g;
22 $wildmat =~ s/\?/\./g;
23 $wildmat =~ s/\*/\.\*/g;
30 my @pats = split(/,/,$wildmat); # TODO look for escaped commas
33 # TODO special case '*' since it always matches
35 while ($pats[0] =~ /^!/) { shift @pats } # init neg can't match
40 my $like = wildmat_to_re($_);
45 $sql = "(^(?!$like)($sql)\$)";
49 $sql = "^($sql)\$" unless $negated;
53 my ($peer, $feed, $port) = @ARGV;
55 $feed = '*,!control,!junk' unless $feed;
56 my $feedre = wildmat($feed);
58 my $add = $db->prepare('insert into feeds (name) values (?)');
59 my $setport = $db->prepare('update feeds set port = ? where name = ?');
60 my $setfeed = $db->prepare('update feeds set wildmat = ?, wildmatre = ? where name = ?');
61 my $exists = $db->prepare('select * from feeds where name = ?');
63 $exists->execute($peer);
65 if (!$exists->fetchrow_array) {
69 $setport->execute($port,$peer) if $port;
70 $setfeed->execute($feed,$feedre,$peer) if $feed;
78 host text primary key, -- TODO just make this a url? mailto:
79 port integer default 119,
80 enabled boolean not null default true,
81 stream boolean not null default false, -- use CHECK/TAKETHIS
82 groups text default '*', -- wildmat
83 wildmat text default '*',
84 wildmatre text default '.', -- parsed wildmat
89 -- TODO feed moderated/unmoderated
90 -- see http://www.faqs.org/docs/linux_network/x18341.html
91 maxsize integer, -- maximum article size to feed
92 localonly boolean default false,
93 path text, -- regular expression default host?
94 frequency interval default '1 hour'::interval, -- int secs?