+ $self->_perm_scalar('show', 'table');
+
+ # fix offset when changing limit
+ $offset = int( $offset / $limit ) * $limit;
+
+ my $sorted = $self->_data_sorted_by( $order );
+
+ my @filter_names;
+ if ( $filters ) {
+ foreach my $name ( keys %$filters ) {
+ if ( ! defined $loaded->{$path}->{stats}->{ $name } ) {
+ warn "skip filter $name not found in $path\n";
+ next;
+ }
+ push @filter_names, $name;
+ }
+ warn "filter_names ",dump( @filter_names );
+ foreach my $name ( @filter_names ) {
+ next if ref $loaded->{$path}->{filters}->{$name} eq 'ARRAY';
+ $self->_filter_on_data( $name, @{ $filters->{$name} } );
+ }
+ }
+
+ my $filtered_names = join(' ',sort @filter_names);
+
+# warn "# filtered_names $filtered_names ", dump( $loaded->{$path}->{filtered}->{$filtered_names} );
+
+ if ( ! defined $loaded->{$path}->{filtered}->{$filtered_names} ) {
+
+ my $path_filters = $loaded->{$path}->{filters};
+
+ warn "create combined filter for $filtered_names\n";
+
+ my @filtered;
+ foreach my $i ( 0 .. $#$sorted ) {
+ my $pos = $sorted->[$i];
+
+ if ( $#filter_names == -1 ) {
+ push @filtered, $pos;
+ next;
+ }
+
+ my $skip = 0;
+ foreach ( @filter_names ) {
+ $skip ||= 1 if ! defined $path_filters->{$_}->{$pos};
+ }
+ next if $skip;