sort_elements: skip elements with children
[id3fs.git] / lib / ID3FS / Path.pm
index 09553ed..9078720 100644 (file)
@@ -312,6 +312,7 @@ sub parse
     {
        ($self->{sqlconditions},
         $self->{andsneeded}) = $self->{tagtree}->to_sql();
+#      print "TREE: ",  $self->{tagtree}->print(), "\n";
 #      print("SQL CONDITION(", $self->{andsneeded}, "): ",
 #            $self->{sqlconditions}, "\n");
 #      use Data::Dumper;
@@ -359,6 +360,11 @@ sub sort_elements
     {
        if(ref($thing) eq "ID3FS::PathElement::Tag")
        {
+           # Handle tag values by dropping parent
+           if(@input && ref($input[$#input]) eq "ID3FS::PathElement::Tag")
+           {
+               $thing=shift @input;
+           }
            push(@output, $thing);
        }
        elsif(ref($thing) eq "ID3FS::PathElement::Boolean")
@@ -376,7 +382,7 @@ sub sort_elements
     {
        push(@output, pop(@opstack));
     }
-#    print "STACK: ", join(', ', map { $_->{name}; } @output), "\n";
+#   print "STACK: ", join(', ', map { $_->{name}; } @output), "\n";
     return @output;
 }
 
@@ -445,8 +451,8 @@ sub tags
     }
     my $hasvals=$self->tag_has_values();
     my $parent=$self->trailing_tag_parent();
-    print "THASVALS: $hasvals\n";
-    print "TPARENT: ", (defined($parent)? $parent : "NO"), "\n";
+#    print "THASVALS: $hasvals\n";
+#    print "TPARENT: ", (defined($parent)? $parent : "NO"), "\n";
     my @ids=();
     my $sql=("SELECT tags.name FROM (\n" .
             $self->tags_subselect() .
@@ -456,14 +462,14 @@ sub tags
     my (@allused)=$self->used_tags();
     my @used=grep { ref($_) ne "ARRAY"; } @allused;
     my @used_with_vals=grep { ref($_) eq "ARRAY"; } @allused;
-    print "tags(): USED: ", join(", ", @used), "\n";
-    print "tags(): USED_WITH_VALS: ", join(", ", map { "[".$_->[0]. ", ".$_->[1]."]";} @used_with_vals), "\n";
+#    print "tags(): USED: ", join(", ", @used), "\n";
+#    print "tags(): USED_WITH_VALS: ", join(", ", map { "[".$_->[0]. ", ".$_->[1]."]";} @used_with_vals), "\n";
     my @orclauses=();
     my @andclauses=();
     my $id=$self->trailing_tag_id();
     if($hasvals)
     {
-       print "HAS_VALUES\n";
+#      print "HAS_VALUES\n";
        my @values=map { "'".$_->[1]."'"; } grep { $_->[0] == $id; } @used_with_vals;
        my $clause="(tags.parents_id='$id'";
        if(@values)
@@ -475,7 +481,7 @@ sub tags
     }
     else
     {
-       print "HASNT VALUES\n";;
+#      print "HASNT VALUES\n";;
        if(@used)
        {
            push(@orclauses, "(NOT (tags.parents_id='' AND tags.id IN (" . join(', ', @used) . ")))");
@@ -680,7 +686,7 @@ sub tags_subselect
     if($hasvals)
     {
        $tag=$self->trailing_tag_id();
-       print "Trailing id: $tag\n";
+#      print "Trailing id: $tag\n";
     }
     my ($sqlclause, $joinsneeded)=(undef, 1);
     ($sqlclause, $joinsneeded) = $tree->to_sql($tag) if($tree);