Merge branch 'devel' of h1dev:/srv/APKPM/
[APKPM.git] / lib / APKPM / Store.pm
index 9e5ac67..962e7c5 100644 (file)
@@ -9,6 +9,8 @@ use Redis;
 
 with 'APKPM::Gearman';
 
+my $redis_ttl = 30 * 60; # 30 min
+
 sub prefix { 'Store_' }
 
 sub process_name {
@@ -64,7 +66,9 @@ order by
 }
 
 sub pg_insert {
-       my ( $self, $table, $h ) = @_;
+       my ( $self, $base_table, $h ) = @_;
+
+       my $table = $base_table;
 
        my @c;
 
@@ -85,7 +89,7 @@ sub pg_insert {
                warn "# using partition $table";
        }
 
-       if ( my $cols = $self->redis->get("pg.$table") ) {
+       if ( my $cols = $self->redis->get("columns.$table") ) {
                @c = split(/\s+/,$cols);
        } else {
                my $sth = $self->dbh->prepare( "select * from $table limit 1" );
@@ -97,8 +101,12 @@ sub pg_insert {
                }
 
                @c = @{ $sth->{NAME_lc} };
-               $self->redis->set( "pg.$table" => join(' ',@c) );
-               $self->redis->expire( "pg.$table" => 15 * 60 ); # refresh every 15 min
+               $self->redis->set( "columns.$table" => join(' ',@c) );
+               $self->redis->expire( "columns.$table" => $redis_ttl );
+
+               # web interface requires base table columns
+               $self->redis->set( "columns.$base_table" => join(' ',@c) );
+               $self->redis->expire( "columns.$base_table" => $redis_ttl );
        }
 
        my $sql = "INSERT INTO $table (" . join(',',@c) . ') values (' . join(',', map { '?' } 0 .. $#c) . ')';
@@ -109,9 +117,9 @@ sub pg_insert {
        $h_lc->{ lc $_ } = $h->{$_} foreach keys %$h;
 
        if ( my $username = $h->{username} ) {
-               my $key = join('.', 'table', $table, $username);
+               my $key = join('.', 'table', $base_table, $username);
                $self->redis->set( $key => $self->e_json($h) );
-               $self->redis->expire( $key => 15 * 60 ); # 15 min timeout
+               $self->redis->expire( $key => $redis_ttl );
        }
 
        $h_lc->{h} = $self->to_hstore( $h_lc->{h} ) if exists $h_lc->{h};