--- trunk/index_DBI.pm 2003/03/22 22:51:48 44 +++ trunk/index_DBI.pm 2003/03/22 23:40:14 45 @@ -10,6 +10,7 @@ use DBI; my %Table; # index tables which where visited in this run +my %sth_cache; # cache prepared statements sub new { my $class = shift; @@ -73,22 +74,25 @@ if (! $Table{$field}) { $self->delete_and_create($field); + + my $sql = "select item from $field where upper(item)=upper(?)"; + $sth_cache{$field."select"} = $self->{dbh}->prepare($sql) || die $self->{dbh}->errstr(); + + $sql = "insert into $field (item,ident,count) values (?,?,?)"; + $sth_cache{$field."insert"} = $self->{dbh}->prepare($sql) || die $self->{dbh}->errstr(); + + $sql = "update $field set count = count + 1 where item = ? and ident = ?"; + $sth_cache{$field."update"} = $self->{dbh}->prepare($sql) || die $self->{dbh}->errstr(); } $Table{$field}++; - my $sql = "select item from $field where upper(item)=upper(?)"; - my $sth = $self->{dbh}->prepare($sql) || die $self->{dbh}->errstr(); - $sth->execute($index_data) || die "sql: $sql; ".$self->{dbh}->errstr(); - if (! $sth->fetchrow_hashref) { - my $sql = "insert into $field (item,ident,count) values (?,?,?)"; - my $sth = $self->{dbh}->prepare($sql) || die $self->{dbh}->errstr(); + $sth_cache{$field."select"}->execute($index_data) || die "cache: $field select; ".$self->{dbh}->errstr(); + if (! $sth_cache{$field."select"}->fetchrow_hashref) { $index_data = substr($index_data,0,255); - $sth->execute($index_data,$ident,1) || die "sql: $sql; ".$self->{dbh}->errstr(); + $sth_cache{$field."insert"}->execute($index_data,$ident,1) || die "cache: $field insert; ".$self->{dbh}->errstr(); #print stderr "in index: $index_data\n"; } else { - my $sql = "update $field set count = count + 1 where item = ? and ident = ?"; - my $sth = $self->{dbh}->prepare($sql) || die $self->{dbh}->errstr(); - $sth->execute($index_data,$ident) || die "sql: $sql; ".$self->{dbh}->errstr(); + $sth_cache{$field."update"}->execute($index_data,$ident) || die "cache: $field update; ".$self->{dbh}->errstr(); } }