@{$self->{elements}}=$self->sort_elements(@{$self->{elements}});
my $thing=$self->elements_to_tree([ @{$self->{elements}} ]);
$self->{tagtree}=$self->elements_to_tree([ @{$self->{elements}} ]);
-# print($self->{tagtree}->print(), "\n") if $self->{tagtree};
+ if($self->{tagtree})
+ {
+ ($self->{sqlconditions},
+ $self->{andsneeded}) = $self->{tagtree}->to_sql();
+ print("SQL CONDITION(", $self->{andsneeded}, "): ",
+ $self->{sqlconditions}, "\n");
+ }
}
sub state
return $node->{name};
}
+sub to_sql
+{
+ my($self, $andlevel)=@_;
+ $andlevel=1 unless(defined($andlevel));
+ my ($leftandlevel, $rightandlevel);
+ my ($leftstr, $rightstr);
+ my $op=$self->op();
+ my $left=$self->left();
+ my $right=$self->right();
+ return ("", $andlevel) unless($left || $right);
+ ($leftstr, $leftandlevel) = $self->node_to_sql($left, $andlevel);
+ $andlevel=$self->max($andlevel, $leftandlevel);
+ if(defined($op) && (($op->{name} eq "AND") || ($op->{name} eq "NOT")))
+ {
+ $andlevel++;
+ }
+ ($rightstr, $rightandlevel) = $self->node_to_sql($right, $andlevel);
+ my $str=$leftstr;
+ $str .= (" " . $op->{name} . " ") if($op);
+ $str .= $rightstr;
+ if($op || ($left && $right))
+ {
+ $str="(" . $str . ")";
+ }
+ return($str, $self->max($leftandlevel, $rightandlevel));
+}
+
+sub node_to_sql
+{
+ my($self, $node, $andlevel)=@_;
+ return ("", $andlevel) unless(defined($node));
+ return $node->to_sql($andlevel) if(ref($node) eq "ID3FS::Path::Node");
+ # FIXME: switch to id when debugged
+# return( ( "fxt" . $andlevel . "=\"" . $node->{id} . "\""), $andlevel);
+ return( ( "fxt" . $andlevel . "=\"" . $node->{name} . "\""), $andlevel);
+}
+
+sub max
+{
+ my($self, $a, $b)=@_;
+ return(($a > $b) ? $a : $b);
+}
+
1;