+ my $create_table;
+ if ( $timestamp ) {
+ $timestamp =~ s/^(\d{4})-(\d{2})-(\d{2}).*$/$1_$2_$3/;
+ my $part = $table . '_' . $timestamp;
+ $create_table = qq{
+ create table $part () inherits ($table) ;
+ };
+ $create_table .= $self->_create_index( $table, $timestamp );
+ $table = $part;
+ warn "# using partition $table";
+ }
+
+ if ( my $cols = $self->redis->get("columns.$table") ) {
+ @c = split(/\s+/,$cols);
+ } else {
+ my $sth = $self->dbh->prepare( "select * from $table limit 1" );
+ eval { $sth->execute; };
+ if ( $@ ) {
+ warn "ERROR $@\n# try $create_table\n";
+ $self->dbh->do( $create_table );
+ $sth->execute;
+ }
+
+ @c = @{ $sth->{NAME_lc} };
+ $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 );
+ }