[Jifty-commit] r5058 - Jifty-DBI/branches/tisql/lib/Jifty/DBI

Jifty commits jifty-commit at lists.jifty.org
Wed Feb 6 11:13:20 EST 2008


Author: ruz
Date: Wed Feb  6 11:13:20 2008
New Revision: 5058

Modified:
   Jifty-DBI/branches/tisql/lib/Jifty/DBI/Tisql.pm

Log:
* add filter_conditions_tree method

Modified: Jifty-DBI/branches/tisql/lib/Jifty/DBI/Tisql.pm
==============================================================================
--- Jifty-DBI/branches/tisql/lib/Jifty/DBI/Tisql.pm	(original)
+++ Jifty-DBI/branches/tisql/lib/Jifty/DBI/Tisql.pm	Wed Feb  6 11:13:20 2008
@@ -229,4 +229,37 @@
     return \@res;
 }
 
+sub filter_conditions_tree {
+    my ($self, $tree, $cb, $inner) = @_;
+
+    my $skip_next = 0;
+
+    my @res;
+    foreach my $entry ( @$tree ) {
+        next if $skip_next-- > 0;
+
+        if ( ref $entry eq 'ARRAY' ) {
+            my $tmp = $self->filter_conditions( $entry, $cb, 1 );
+            if ( !$tmp || (ref $tmp eq 'ARRAY' && !@$tmp) ) {
+                pop @res;
+                $skip_next = 1 unless @res;
+            } else {
+                push @res, $tmp;
+            }
+        } elsif ( ref $entry eq 'HASH' ) {
+            if ( $cb->( $entry ) ) {
+                push @res, $entry;
+            } else {
+                pop @res;
+                $skip_next = 1 unless @res;
+            }
+        } else {
+            push @res, $entry;
+        }
+    }
+    return $res[0] if @res == 1 && ($inner || ref $res[0] eq 'ARRAY');
+    return \@res;
+}
+
+
 1;


More information about the Jifty-commit mailing list