From 69082e371e2a8fc717f79ce308c7c045ddd72101 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Fri, 25 Jun 2010 00:39:12 +0200 Subject: [PATCH] cleanup changes and apply code on dataset This involved creating few more __ MojoFacets::Data methods --- lib/MojoFacets/Changes.pm | 31 +++++++++++++++++++++---- lib/MojoFacets/Data.pm | 41 +++++++++++++++++++++++---------- templates/changes/index.html.ep | 17 +++++++------- 3 files changed, 63 insertions(+), 26 deletions(-) diff --git a/lib/MojoFacets/Changes.pm b/lib/MojoFacets/Changes.pm index 5e43b2e..8b4cab8 100644 --- a/lib/MojoFacets/Changes.pm +++ b/lib/MojoFacets/Changes.pm @@ -20,10 +20,15 @@ sub index { my $path = $self->param('path') || $self->session('path'); my $commit = $self->param('commit'); my ( $items, $unique2id ); - if ( my $apply_on_path = $self->param('apply_on_path') ) { - $items = $MojoFacets::Data::loaded->{$apply_on_path}->{data}->{items}; - die "no $apply_on_path" unless $items; - warn "using $items for $apply_on_path\n"; + if ( $path ) { + $items = $MojoFacets::Data::loaded->{$path}->{data}->{items}; + if ( ! $items ) { + warn "$path not loaded"; + $self->session('path', $path); + $self->redirect_to('/data/index'); + return; + } + warn "using $items for $path\n"; } my $invalidate_columns; my $changes; @@ -58,8 +63,24 @@ sub index { } $e->{_status} = $status; $stats->{$status}++; + } elsif ( my $code = $e->{code} ) { + if ( $commit ) { + my $commit_changed; + my $t = time(); + foreach my $i ( 0 .. $#$items ) { + MojoFacets::Data::__commit_path_code( $path, $i, $code, \$commit_changed ); + } + $t = time() - $t; + $self->stash( 'commit_changed', $commit_changed ); + warn "commit_changed in $t s ",dump( $e->{commit_changed}, $commit_changed ); + $e->{commit_changed_this} = $commit_changed; + MojoFacets::Data::__invalidate_path_column( $path, $_ ) foreach keys %$commit_changed; + MojoFacets::Data::__path_rebuild_stats( $path ); + } + $stats->{code}++; } else { warn "no unique in ", dump($e); + $stats->{no_unique}++; } push @$changes, $e; } @@ -73,7 +94,7 @@ sub index { my @loaded = MojoFacets::Data::__loaded_paths(); warn "# loaded paths ",dump @loaded; - $self->render( changes => $changes, loaded => \@loaded, stats => $stats ); + $self->render( path => $path, changes => $changes, loaded => \@loaded, stats => $stats ); } sub remove { 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); diff --git a/templates/changes/index.html.ep b/templates/changes/index.html.ep index d867c3e..f4e5881 100644 --- a/templates/changes/index.html.ep +++ b/templates/changes/index.html.ep @@ -1,14 +1,12 @@ % layout 'ui'; - % my $dump = param('dump'); -% my $apply_on_path = param('apply_on_path') || session('path');
- on - on + @@ -16,7 +14,7 @@ -% if ( $apply_on_path ) { +% if ( $path ) { -% if ( ! param('commit') ) { +% if ( ! param('commit') && param('apply') ) { -% } else { +% } elsif ( param('commit') ) { -Changes commited to <%= $apply_on_path %> +Changes commited to <%= $path %> +
<%= dumper stash('commit_changed') %>
% } % } -- 2.20.1