1 package ID3FS::Path::Node;
9 my $class=ref($proto) || $proto;
22 my($self, $name, $val)=@_;
27 return $self->{$name};
30 sub left { return shift->set("left", shift); }
31 sub right { return shift->set("right", shift); }
32 sub op { return shift->set("op", shift); }
38 my $left=$self->left();
39 my $right=$self->right();
40 return "" unless($left || $right);
41 my $str .= $self->print_node($left);
42 $str .= (" " . $op->{name} . " ") if($op);
43 $str .= $self->print_node($right);
44 if($op || ($left && $right))
46 $str="(" . $str . ")";
54 return "" unless(defined($node));
55 return $node->print() if(ref($node) eq "ID3FS::Path::Node");
61 my($self, $andlevel, $parent_is_tag)=@_;
62 $andlevel=1 unless(defined($andlevel));
63 $parent_is_tag=0 unless(defined($parent_is_tag));
64 my ($leftandlevel, $rightandlevel);
65 my ($leftstr, $rightstr);
67 my $left=$self->left();
68 my $right=$self->right();
69 return ("", $andlevel) unless($left || $right);
70 ($leftstr, $leftandlevel) = $self->node_to_sql($left, $andlevel);
71 $andlevel=$self->max($andlevel, $leftandlevel);
72 if(defined($op) && (($op->{name} eq "AND") || ($op->{name} eq "NOT")))
76 ($rightstr, $rightandlevel) = $self->node_to_sql($right, $andlevel);
78 $str .= (" " . $op->{name} . " ") if($op);
80 if($op || ($left && $right))
82 $str="(" . $str . ")";
84 return($str, $self->max($leftandlevel, $rightandlevel));
89 my($self, $node, $andlevel)=@_;
90 return ("", $andlevel) unless(defined($node));
91 return $node->to_sql($andlevel) if(ref($node) eq "ID3FS::Path::Node");
92 # FIXME: switch to id when debugged
93 # return( ( "fxt" . $andlevel . "=\"" . $node->{id} . "\""), $andlevel);
94 return( ( "fxt" . $andlevel . "=\"" . $node->{name} . "\""), $andlevel);
100 return(($a > $b) ? $a : $b);