X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=lib%2FMojoFacets%2FData.pm;h=761ded7e8513fbf9025b41ca590207e74684881d;hb=69082e371e2a8fc717f79ce308c7c045ddd72101;hp=2d3b4c75a42df0c8e5af62d1345bc19d75671592;hpb=337cd8c3373edd449a28af7e3554e64e8b8300c8;p=MojoFacets.git diff --git a/lib/MojoFacets/Data.pm b/lib/MojoFacets/Data.pm index 2d3b4c7..761ded7 100644 --- a/lib/MojoFacets/Data.pm +++ b/lib/MojoFacets/Data.pm @@ -279,11 +279,18 @@ sub _loaded { warn "rebuild stats for $path ignored caller $caller\n"; } else { warn "rebuild stats for $path FORCED by modified caller $caller\n"; - $loaded->{$path}->{stats} = __stats( $loaded->{$path}->{data}->{items} ); +# $loaded->{$path}->{stats} = __stats( $loaded->{$path}->{data}->{items} ); + $loaded->{$path}->{rebuild_stats} = 1; $loaded->{$path}->{modified} = 1; } } + if ( defined $loaded->{$path}->{rebuild_stats} ) { + warn "rebuild_stats $path"; + $loaded->{$path}->{stats} = __stats( $loaded->{$path}->{data}->{items} ); + delete $loaded->{$path}->{rebuild_stats}; + } + if ( ! defined $loaded->{$path}->{$name} ) { warn "$path $name isn't loaded\n"; $self->_load_path( $path ); @@ -542,6 +549,21 @@ sub __all_filters { join(',', sort(@_), 'order', $order); } +sub __commit_path_code { + my ( $path, $i, $code, $commit_changed ) = @_; + + my $items = $loaded->{$path}->{data}->{items} || die "no items for $path"; + my $row = $items->[$i]; + my $update; + eval $code; + foreach ( keys %$update ) { + $$commit_changed->{$_}++; + $loaded->{$path}->{data}->{items}->[$i]->{$_} = $update->{$_}; + } + warn "XX ",dump( $loaded->{$path}->{data}->{items}->[$i] ); + warn "__commit_path_code $path ",dump( $update ); +} + sub items { my $self = shift; @@ -624,7 +646,7 @@ sub items { my $data = $self->_loaded('data'); my $code = $self->_param_scalar('code',''); - $code =~ s{[\r\n]+$}{}s; + $code =~ s{[\r\n]+$}{\n}s; my $commit = $self->param('commit'); my $test = $self->param('test'); @@ -650,13 +672,7 @@ sub items { my $out; foreach ( 0 .. $#$filtered ) { my $i = $filtered->[$_]; - my $row = $data->{items}->[$i]; - my $update; - eval $code; - foreach ( keys %$update ) { - $commit_changed->{$_}++; - $row->{$_} = $update->{$_}; - } + __commit_path_code( $path, $i, $code, \$commit_changed ); } $self->_save_change({ @@ -726,7 +742,7 @@ sub items { } # this might move before $out to recalculate stats on source dataset? - __path_modified( $path, 2 ); + __path_rebuild_stats( $path ); my $c = { map { $_ => 1 } @columns }; my @added_columns = sort grep { ! $c->{$_} } keys %$commit_changed; warn "# added_columns ",dump( @added_columns ); @@ -970,6 +986,8 @@ sub __path_modified { warn "# __path_modified $path $value\n"; } +sub __path_rebuild_stats { $loaded->{ $_[0] }->{rebuild_stats} = 1 }; + sub _save_change { my ($self,$change) = @_; @@ -1030,8 +1048,7 @@ sub edit { __invalidate_path_column( $path, $name ); $status = 201; # created - # modified = 2 -- force rebuild of stats - __path_modified( $path, 2 ); + __path_rebuild_stats( $path ); $new_content = join("\xB6",@$v);