---
name: "Mail::SpamAssassin::BayesStore::BDB"
section: "3pm"
platform: "linux"
package: "spamassassin"
version: "4.0.2-3"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Mail::SpamAssassin::BayesStore::BDB"
---

# Mail::SpamAssassin::BayesStore::BDB(3pm)

BerkeleyDB Bayesian Storage Module Implementation

## NAME

Mail::SpamAssassin::BayesStore::BDB - BerkeleyDB Bayesian Storage Module Implementation

## DESCRIPTION

This module implements a BDB based bayesian storage module.

## METHODS

### new

public class (Mail::SpamAssassin::BayesStore::SQL) new (Mail::Spamassassin::Plugin::Bayes `$bayes`)

Description: This methods creates a new instance of the Mail::SpamAssassin::BayesStore::BDB object.  It expects to be passed an instance of the Mail::SpamAssassin:Bayes object which is passed into the Mail::SpamAssassin::BayesStore parent object.

### tie\_db\_readonly

public instance (Boolean) tie\_db\_readonly ();

Description: This method ensures that the database connection is properly setup and working.

### tie\_db\_writable

public instance (Boolean) tie\_db\_writable ()

Description: This method ensures that the database connection is properly setup and working. If necessary it will initialize the database so that they can begin using the database immediately.

### \_open\_db

private instance (Boolean) \_open\_db (Boolean `$writable`)

Description: This method ensures that the database connection is properly setup and working.  It will initialize a users bayes variables so that they can begin using the database immediately.

### untie\_db

public instance () untie\_db ()

Description: Closes any open db handles.  You can safely call this at any time.

### calculate\_expire\_delta

public instance (%) calculate\_expire\_delta (\
   Integer `$newest_atime`, Integer `$start`, Integer `$max_expire_mult`)

Description: This method performs a calculation on the data to determine the optimum atime for token expiration.

### token\_expiration

public instance (Integer, Integer,\
                  Integer, Integer) token\_expiration (\\% `$opts`,\
                                                      Integer `$newdelta`,\
                                                      @ `@vars`)

Description: This method performs the database specific expiration of tokens based on the passed in `$newdelta` and `@vars`.

### sync\_due

public instance (Boolean) sync\_due ()

Description: This method determines if a database sync is currently required.

Unused for BDB implementation.

### seen\_get

public instance (String) seen\_get (string `$msgid`)

Description: This method retrieves the stored value, if any, for `$msgid`.  The return value is the stored string ('s' for spam and 'h' for ham) or undef if `$msgid` is not found.

### seen\_put

public (Boolean) seen\_put (string `$msgid`, char `$flag`)

Description: This method records `$msgid` as the type given by `$flag`.  `$flag` is one of two values 's' for spam and 'h' for ham.

### seen\_delete

public instance (Boolean) seen\_delete (string `$msgid`)

Description: This method removes `$msgid` from the database.

### get\_storage\_variables

public instance (@) get\_storage\_variables ()

Description: This method retrieves the various administrative variables used by the Bayes process and database.

The values returned in the array are in the following order:

0: scan count base

1: number of spam

2: number of ham

3: number of tokens in db

4: last expire atime

5: oldest token in db atime

6: db version value

7: last journal sync

8: last atime delta

9: last expire reduction count

10: newest token in db atime

### dump\_tokens

public instance () dump\_tokens (String `$template`, String `$regex`, Array `@vars`)

Description: This method loops over all tokens, computing the probability for the token and then printing it out according to the passed in token.

### set\_last\_expire

public instance (Boolean) set\_last\_expire (Integer `$time`)

Description: This method sets the last expire time.

### get\_running\_expire\_tok

public instance (String `$time`) get\_running\_expire\_tok ()

Description: This method determines if an expire is currently running and returns the last time set.

There can be multiple times, so we just pull the greatest (most recent) value.

### set\_running\_expire\_tok

public instance (String `$time`) set\_running\_expire\_tok ()

Description: This method sets the time that an expire starts running.

### remove\_running\_expire\_tok

public instance (Boolean) remove\_running\_expire\_tok ()

Description: This method removes the row in the database that indicates that and expire is currently running.

### tok\_get

public instance (Integer, Integer, Integer) tok\_get (String `$token`)

Description: This method retrieves a specified token (`$token`) from the database and returns its spam\_count, ham\_count and last access time.

### tok\_get\_all

public instance (\\@) tok\_get (@ `$tokens`)

Description: This method retrieves the specified tokens (`$tokens`) from storage and returns an array ref of arrays spam count, ham count and last access time.

### tok\_count\_change

public instance (Boolean) tok\_count\_change (\
   Integer `$dspam`, Integer `$dham`, String `$token`, String `$newatime`)

Description: This method takes a `$spam_count` and `$ham_count` and adds it to `$tok` along with updating `$tok`s atime with `$atime`.

### multi\_tok\_count\_change

public instance (Boolean) multi\_tok\_count\_change (\
   Integer `$dspam`, Integer `$dham`, \\% `$tokens`, String `$newatime`)

Description: This method takes a `$dspam` and `$dham` and adds it to all of the tokens in the `$tokens` hash ref along with updating each tokens atime with `$atime`.

### nspam\_nham\_get

public instance ($spam\_count, `$ham_count`) nspam\_nham\_get ()

Description: This method retrieves the total number of spam and the total number of ham learned.

### nspam\_nham\_change

public instance (Boolean) nspam\_nham\_change (Integer `$num_spam`,\
                                              Integer `$num_ham`)

Description: This method updates the number of spam and the number of ham in the database.

### tok\_touch

public instance (Boolean) tok\_touch (String `$token`,\
                                      String `$atime`)

Description: This method updates the given tokens (`$token`) atime.

The assumption is that the token already exists in the database.

We will never update to an older atime

### tok\_touch\_all

public instance (Boolean) tok\_touch (\\@ `$tokens`\
                                      String `$atime`)

Description: This method does a mass update of the given list of tokens `$tokens`, if the existing token atime is \< `$atime`.

The assumption is that the tokens already exist in the database.

We should never be touching more than N\_SIGNIFICANT\_TOKENS, so we can make some assumptions about how to handle the data (ie no need to batch like we do in tok\_get\_all)

### cleanup

public instance (Boolean) cleanup ()

Description: This method performs any cleanup necessary before moving onto the next operation.

### get\_magic\_re

public instance (String) get\_magic\_re ()

Description: This method returns a regexp which indicates a magic token.

Unused in BDB implementation.

### sync

public instance (Boolean) sync (\\% `$opts`)

Description: This method performs a sync of the database

### perform\_upgrade

public instance (Boolean) perform\_upgrade (\\% `$opts`);

Description: Performs an upgrade of the database from one version to another, not currently used in this implementation.

### clear\_database

public instance (Boolean) clear\_database ()

Description: This method deletes all records for a particular user.

Callers should be aware that any errors returned by this method could causes the database to be inconsistent for the given user.

### backup\_database

public instance (Boolean) backup\_database ()

Description: This method will dump the users database in a machine readable format.

### restore\_database

public instance (Boolean) restore\_database (String `$filename`, Boolean `$showdots`)

Description: This method restores a database from the given filename, `$filename`.

Callers should be aware that any errors returned by this method could causes the database to be inconsistent for the given user.

### db\_readable

public instance (Boolean) **db\_readable()**

Description: This method returns a boolean value indicating if the database is in a readable state.

### db\_writable

public instance (Boolean) **db\_writable()**

Description: This method returns a boolean value indicating if the database is in a writable state.

### \_extract\_atime

private instance () \_extract\_atime (String `$token`,\
                                     String `$value`,\
                                     String `$index`)

Description: This method ensures that the database connection is properly setup and working. If appropriate it will initialize a users bayes variables so that they can begin using the database immediately.

### \_put\_token

FIXME: This is rarely a good interface, because of the churn that will often happen in the "magic" tokens.  Open-code this stuff in the presence of loops.
