next unless(length($tag));
next unless($tag =~ /\S+/);
$tag=$self->sanitise($tag);
- push(@outtags, [ split(/\s*\/\s*/, $tag) ]);
+ my ($tagname, $tagval)=($tag, undef);
+ if($tag=~/^([^\/]+)\/(.*)/)
+ {
+ ($tagname, $tagval)=($1, $2);
+ }
+ push(@outtags, [ $tagname, $tagval ]);
}
return @outtags;
}
sub tag_values
{
my($self, $tagid)=@_;
- my $sql=("SELECT DISTINCT tagvals.name FROM tagvals\n" .
- "INNER JOIN tags_x_tagvals ON tagvals.id=tags_x_tagvals.tagvals_id\n" .
- "WHERE tags_x_tagvals.tags_id=?");
+ my $sql=("SELECT DISTINCT name FROM tags\n" .
+ "WHERE parents_id=?");
my $tags=$self->cmd_rows($sql, $tagid);
my @tags=map { $_->[0]; } @$tags;
@tags=map { length($_) ? $_ : "NOVALUE"; } @tags;
}
# print "TAGS\n", Dumper \@tags;
# print "\nVALS\n", Dumper(\@tags_vals), "\n";
- my $sql=("\tSELECT files_id FROM tags t1\n" .
- "\tINNER JOIN files_x_tags ON t1.id=files_x_tags.tags_id\n" .
- "\tINNER JOIN tags_x_tagvals ON t1.id=tags_x_tagvals.tags_id\n");
+ my $sql=("\tSELECT files_x_tags.files_id FROM tags t1\n" .
+ "\tINNER JOIN files_x_tags ON t1.id=files_x_tags.tags_id\n");
my @clauses=();
if(@tags)
{
for my $pair (@tags_vals)
{
my($tag, $val)=@$pair;
- push(@clauses, "( t1.id=$tag AND tags_x_tagvals.tagvals_id=$val )");
+ push(@clauses, "( t1.parents_id=$tag AND t1.id=$val )");
}
if(@clauses)
{
{
my($self, $id)=@_;
my $sql=("SELECT COUNT(*) FROM tags\n\t" .
- "INNER JOIN tags_x_tagvals ON tags.id=tags_x_tagvals.tags_id\n\t" .
- "INNER JOIN tagvals ON tagvals.id=tags_x_tagvals.tagvals_id\n\t" .
- "WHERE tags.id=?\n");
+ "WHERE tags.parents_id=?\n");
my ($rows)=$self->cmd_onerow($sql, $id);
return $rows;
}
LEFT JOIN files_x_tags ON files_x_tags.tags_id=tags.id
WHERE files_x_tags.files_id IS NULL);
- DELETE FROM tags_x_tagvals WHERE tags_id IN (
- SELECT tags_x_tagvals.tags_id FROM tags_x_tagvals
- LEFT JOIN tags ON tags.id=tags_x_tagvals.tags_id
- WHERE tags.id IS NULL);
-
- DELETE FROM tagvals WHERE id IN (
- SELECT tagvals.id FROM tagvals
- LEFT JOIN tags_x_tagvals ON tags_x_tagvals.tagvals_id=tagvals.id
- WHERE tags_x_tagvals.tagvals_id IS NULL);
EOT
print "SQL: $sql\n";
my @sql=split(/\n\n/, $sql);
name text
);
-CREATE TABLE tagvals (
- id INTEGER PRIMARY KEY,
- name text
-);
-
CREATE TABLE files_x_tags (
files_id INTEGER,
tags_id INTEGER,
FOREIGN KEY(tags_id) REFERENCES tags(id) ON DELETE CASCADE ON UPDATE CASCADE
);
-CREATE TABLE tags_x_tagvals (
- tags_id INTEGER,
- tagvals_id INTEGER,
- FOREIGN KEY(tags_id) REFERENCES tags(id) ON DELETE CASCADE ON UPDATE CASCADE,
- FOREIGN KEY(tagvals_id) REFERENCES tagvals(id) ON DELETE CASCADE ON UPDATE CASCADE
-);
-