NAME
Database::BI::Extract -- SQLite materialisation cache for Database::BI
SYNOPSIS
use Database::BI::Extract;
my $cache = Database::BI::Extract->new(model_dir => '.bi');
# Check cache
my $path = $cache->get($spec, $mtime, $size);
unless ($path) {
my $bytes = ...; # build the SQLite file
$path = $cache->put($spec, $mtime, $size, $bytes);
}
DESCRIPTION
Stores SQLite materialisation files (extracts) under model_dir/extracts/. The cache key is an MD5 of the dataset spec, its source mtime, and its size. Deleting the extracts directory leaves the application fully functional.
The application reads the extract of an accelerated dataset through get, and script/bi-extract builds one through put; see "Accelerated datasets" in Database::BI. The caller decides when to build an extract, and the class only stores and finds the bytes.
METHODS
new
API SPECIFICATION
INPUT
{ model_dir => 'string' } # required; extracts live in <model_dir>/extracts/
OUTPUT
A Database::BI::Extract object. Croaks model_dir is required without model_dir. Nothing is created on disc until put.
path
API SPECIFICATION
INPUT
$spec # the dataset spec, e.g. 'table:sales'
$mtime # source modification time (undef is 0)
$size # source size in bytes (undef is 0)
OUTPUT
'string' # <model_dir>/extracts/<md5 of spec, mtime and size>.db
The path is computed, not checked: the file need not exist.
get
API SPECIFICATION
INPUT
The same three arguments as path.
OUTPUT
'string' | undef # the path when that file exists, otherwise undef
A changed mtime or size gives a different path, so a stale extract is a miss.
put
API SPECIFICATION
INPUT
$spec, $mtime, $size # as for path
$bytes # required; the SQLite file's contents
OUTPUT
'string' # the path written
Creates extracts/ when it is missing. Croaks sqlite_bytes are required when $bytes is undefined or empty, and croaks naming the path when the directory or file cannot be written.
evict
API SPECIFICATION
INPUT
$spec # accepted but not used: see below
OUTPUT
'integer' # the number of files removed (0 when there is no extracts/)
A fingerprint cannot be traced back to its spec, so evict removes every .db file in extracts/, not only $spec's.
AUTHOR
Nigel Horne <njh@nigelhorne.com>
LICENCE AND COPYRIGHT
Copyright 2026 Nigel Horne. Usage is subject to the GPL2 licence terms.