From 9ae98c5aa5a031e834dbc2a4dbd7e009a88b3394 Mon Sep 17 00:00:00 2001 From: Ian Beckwith Date: Tue, 19 Oct 2010 17:19:31 +0100 Subject: [PATCH] more code tidying --- lib/ID3FS/Path.pm | 34 ++++++++-------------------------- lib/ID3FS/Path/Node.pm | 4 +--- 2 files changed, 9 insertions(+), 29 deletions(-) diff --git a/lib/ID3FS/Path.pm b/lib/ID3FS/Path.pm index b2cd2ec..7e6c71d 100644 --- a/lib/ID3FS/Path.pm +++ b/lib/ID3FS/Path.pm @@ -24,6 +24,7 @@ our ($STATE_INVALID, $STATE_ROOT, $STATE_TAG, $STATE_TAGVAL, $STATE_BOOLEAN, $STATE_ALBUMS, $STATE_TRACKLIST, $STATE_FILE, $STATE_ALL)=(0..8); +# operator precedence our %priorities=( "OR" => 0, "AND" => 1, "NOT" => 2 ); our $PATH_ALLTRACKS= "TRACKS"; @@ -117,8 +118,7 @@ sub dirents elsif($state==$STATE_BOOLEAN) { my $parent=$self->tail(); - unless($self->is($TYPE_BOOL, $parent) && - $parent->{name} eq "NOT") + unless($self->is($TYPE_BOOL, $parent) && $parent->{name} eq "NOT") { @dents=("NOT"); } @@ -138,7 +138,7 @@ sub dirents } else { - print "DIRENTS: UNHANDLED STATE: $state\n"; + print "id3fsd: INTERNAL ERROR: DIRENTS: UNHANDLED STATE: $state\n"; } return(\@dents, \@fents); } @@ -147,11 +147,11 @@ sub dirents sub parse { my($self)=@_; + $self->state($STATE_ROOT); + return if($self->{path} eq "/"); @{$self->{components}}=split(/\//, $self->{path}); shift @{$self->{components}}; # drop empty field before leading / # print "PATH: $self->{path}\n"; - $self->state($STATE_ROOT); - return if($self->{path} eq "/"); my @parts=@{$self->{components}}; my($tag, $tagval); $self->{elements}=[]; @@ -354,8 +354,8 @@ sub parse } } - # remove trailing boolean my @elements=@{$self->{elements}}; + # remove trailing boolean while(@elements && $self->is($TYPE_BOOL, $elements[$#elements])) { pop @elements; @@ -363,14 +363,6 @@ sub parse # sort elements by precedence @elements=$self->sort_elements(@elements); $self->{tagtree}=$self->elements_to_tree(\@elements); - if($self->{tagtree}) - { -# use Data::Dumper; -# print "TREE\n"; -# print Dumper $self->{tagtree}; -# my ($conditions, @joins)=$self->{tagtree}->to_sql(); -# print "CONDITIONS(", scalar(@joins), "): ", $conditions, "\n"; - } } sub state @@ -384,6 +376,7 @@ sub state return $self->{state}; } +# link up precedence-sorted list into a binary tree sub elements_to_tree { my($self, $elements)=@_; @@ -423,7 +416,6 @@ sub sort_elements } elsif($self->is($TYPE_BOOL, $thing)) { - # bool while(@opstack && ($priorities{$thing->{name}} <= $priorities{$opstack[$#opstack]->{name}})) { @@ -686,7 +678,6 @@ sub filename "GROUP BY paths.name, files.name"); print "FILENAME SQL: $sql\n" if($self->{verbose}); my ($path, $name)=$self->{db}->cmd_onerow($sql, $id); - my $id3fs_path=join('/', map { $_->{name}; } @{$self->{elements}}); return($self->{db}->relativise($path, $name, $mountpoint, $self->{path})); } # should never happen @@ -766,16 +757,7 @@ sub filter my @outdirs=(); for my $dir (@dirs) { -# print "\nFILTER (",$self->state(), "): $base / $dir\n"; - if($self->empty("$base/$dir")) - { -# print "empty: $base / $dir\n"; - } - else - { -# print "non-empty, accepting: $base / $dir\n"; - push(@outdirs, $dir); - } + push(@outdirs, $dir) unless($self->empty("$base/$dir")); } return(@outdirs); } diff --git a/lib/ID3FS/Path/Node.pm b/lib/ID3FS/Path/Node.pm index eb703c2..774af3a 100644 --- a/lib/ID3FS/Path/Node.pm +++ b/lib/ID3FS/Path/Node.pm @@ -71,16 +71,14 @@ sub to_sql my($self, $hasvals, $not, @joins)=@_; $not=0 unless(defined($not)); my @outjoins=(); - my $str=''; - # init unless(@joins) { @outjoins = @joins = ("INNER"); } + my $str=''; if($self->type() != $TYPE_BOOL) { - my $cnt=scalar(@joins)+1; $str .= "t" . scalar(@joins) . ".id='" . $self->{id} . "'"; if($not && !$hasvals) { -- 2.11.0