View | Details | Raw Unified | Return to bug 4890
Collapse All | Expand All

(-)SpamAssassin/SQLBasedAddrList.pm.persistenthandles (-13 / +16 lines)
Lines 190-199 Link Here
190
190
191
  return $entry unless ($email && $ip);
191
  return $entry unless ($email && $ip);
192
192
193
  my $sql = "SELECT count, totscore FROM $self->{tablename}
193
  $self->{select_sth} || do {
194
  	my $sql = "SELECT count, totscore FROM $self->{tablename}
194
              WHERE username = ? AND email = ? AND ip = ?";
195
              WHERE username = ? AND email = ? AND ip = ?";
195
  my $sth = $self->{dbh}->prepare($sql);
196
  	$self->{select_sth} = $self->{dbh}->prepare($sql);
196
  my $rc = $sth->execute($self->{_username}, $email, $ip);
197
  };
198
  my $rc = $self->{select_sth}->execute($self->{_username}, $email, $ip);
197
199
198
  if (!$rc) { # there was an error, but try to go on
200
  if (!$rc) { # there was an error, but try to go on
199
    my $err = $self->{dbh}->errstr;
201
    my $err = $self->{dbh}->errstr;
Lines 202-208 Link Here
202
    $entry->{totscore} = 0;
204
    $entry->{totscore} = 0;
203
  }
205
  }
204
  else {
206
  else {
205
    my $aryref = $sth->fetchrow_arrayref();
207
    my $aryref = $self->{select_sth}->fetchrow_arrayref();
206
208
207
    if (defined($aryref)) { # we got some data back
209
    if (defined($aryref)) { # we got some data back
208
      $entry->{count} = $aryref->[0] || 0;
210
      $entry->{count} = $aryref->[0] || 0;
Lines 214-220 Link Here
214
      dbg("auto-whitelist: sql-based get_addr_entry: no entry found for $addr");
216
      dbg("auto-whitelist: sql-based get_addr_entry: no entry found for $addr");
215
    }
217
    }
216
  }
218
  }
217
  $sth->finish();
218
219
219
  dbg("auto-whitelist: sql-based $addr scores ".$entry->{count}.'/'.$entry->{totscore});
220
  dbg("auto-whitelist: sql-based $addr scores ".$entry->{count}.'/'.$entry->{totscore});
220
221
Lines 249-260 Link Here
249
  return $entry unless ($email && $ip);
250
  return $entry unless ($email && $ip);
250
251
251
  if ($entry->{exists_p}) { # entry already exists, so just update
252
  if ($entry->{exists_p}) { # entry already exists, so just update
252
    my $sql = "UPDATE $self->{tablename} SET count = count + 1,
253
    $self->{update_sth} || do {
254
    	my $sql = "UPDATE $self->{tablename} SET count = count + 1,
253
                                             totscore = totscore + ?
255
                                             totscore = totscore + ?
254
                WHERE username = ? AND email = ? AND ip = ?";
256
                WHERE username = ? AND email = ? AND ip = ?";
255
    
257
    
256
    my $sth = $self->{dbh}->prepare($sql);
258
    	$self->{update_sth} = $self->{dbh}->prepare($sql);
257
    my $rc = $sth->execute($score, $self->{_username}, $email, $ip);
259
    };
260
    my $rc = $self->{update_sth}->execute($score, $self->{_username}, $email, $ip);
258
    
261
    
259
    if (!$rc) {
262
    if (!$rc) {
260
      my $err = $self->{dbh}->errstr;
263
      my $err = $self->{dbh}->errstr;
Lines 263-281 Link Here
263
    else {
266
    else {
264
      dbg("auto-whitelist: sql-based add_score: new count: ". $entry->{count} .", new totscore: ".$entry->{totscore}." for ".$entry->{addr});
267
      dbg("auto-whitelist: sql-based add_score: new count: ". $entry->{count} .", new totscore: ".$entry->{totscore}." for ".$entry->{addr});
265
    }
268
    }
266
    $sth->finish();
267
  }
269
  }
268
  else { # no entry yet, so insert a new entry
270
  else { # no entry yet, so insert a new entry
269
    my $sql = "INSERT INTO $self->{tablename} (username,email,ip,count,totscore) VALUES (?,?,?,?,?)";
271
    $self->{insert_sth} || do {
270
    my $sth = $self->{dbh}->prepare($sql);
272
    	my $sql = "INSERT INTO $self->{tablename} (username,email,ip,count,totscore) VALUES (?,?,?,?,?)";
271
    my $rc = $sth->execute($self->{_username},$email,$ip,1,$score);
273
    	$self->{insert_sth} = $self->{dbh}->prepare($sql);
274
    };
275
    my $rc = $self->{insert_sth}->execute($self->{_username},$email,$ip,1,$score);
272
    if (!$rc) {
276
    if (!$rc) {
273
      my $err = $self->{dbh}->errstr;
277
      my $err = $self->{dbh}->errstr;
274
      dbg("auto-whitelist: sql-based add_score: SQL error: $err");
278
      dbg("auto-whitelist: sql-based add_score: SQL error: $err");
275
    }
279
    }
276
    $entry->{exists_p} = 1;
280
    $entry->{exists_p} = 1;
277
    dbg("auto-whitelist: sql-based add_score: created new entry for ".$entry->{addr}." with totscore: $score");
281
    dbg("auto-whitelist: sql-based add_score: created new entry for ".$entry->{addr}." with totscore: $score");
278
    $sth->finish();
279
  }
282
  }
280
  
283
  
281
  return $entry;
284
  return $entry;

Return to bug 4890