From: Ian Beckwith Date: Tue, 19 Oct 2010 20:14:31 +0000 (+0100) Subject: rename in_or to want_all_tags, tweak X-Git-Tag: debian/1.0-1~16 X-Git-Url: http://erislabs.net/gitweb/?p=id3fs.git;a=commitdiff_plain;h=2eb69e8fc1f41c6947afbb88c0cf59565d2eda7a rename in_or to want_all_tags, tweak --- diff --git a/lib/ID3FS/Path.pm b/lib/ID3FS/Path.pm index a961792..744946c 100644 --- a/lib/ID3FS/Path.pm +++ b/lib/ID3FS/Path.pm @@ -499,7 +499,7 @@ sub tags } my $hasvals=$self->expecting_values(); my $sql="SELECT tags.name FROM "; - if($self->in_or()) + if($self->want_all_tags()) { $sql .= "files_x_tags\n"; } @@ -739,19 +739,27 @@ sub empty return 1; } -# if path is .../OR/ or .../OR/NOT -sub in_or +# if path is .../OR/ or .../OR/NOT or .../AND/NOT +sub want_all_tags { my($self)=@_; my $tail=$self->tail(); return 0 unless($tail); - return 0 unless($tail->type() == $TYPE_BOOL); - return 1 if($tail->name() eq "OR"); - return 0 unless($tail->name() eq "NOT"); my $parent=$self->tail_parent(); - return 0 unless($parent); - return 0 unless($parent->type() == $TYPE_BOOL); - return 1 if($parent->name() eq "OR"); + my $parent_valid = ($parent && $parent->type() == $TYPE_BOOL); + if($tail->type() == $TYPE_BOOL) + { + return 1 if($tail->name() eq "OR"); + return 0 unless($tail->name() eq "NOT"); + return 0 unless($parent_valid); + return 1 if($parent->name() eq "OR"); + return 1 if($parent->name() eq "AND"); + } + elsif($tail->type() == $TYPE_TAG) + { + return 0 unless($parent_valid); + return 1 if($parent->name() eq "NOT"); + } return 0; }