NAME

Net::Blossom::Server::Backend::SQLite - SQLite storage backend for Blossom servers

SYNOPSIS

use Net::Blossom::Server;
use Net::Blossom::Server::Backend::SQLite;

my $storage = Net::Blossom::Server::Backend::SQLite->new(
    database => '/var/lib/blossom/blossom.sqlite',
    base_url => 'https://cdn.example.com',
);
$storage->deploy_schema;

my $server = Net::Blossom::Server->new(storage => $storage);

DESCRIPTION

Net::Blossom::Server::Backend::SQLite is a SQLite storage backend for Net::Blossom::Server. It stores Blossom blob bytes and metadata in a SQLite database and implements the Net::Blossom::Server::Storage contract.

SQLite access is provided through DBI and DBD::SQLite.

This backend is intended for self-contained single-node deployments, local development, and tests. It can be a reasonable production choice when blob sizes, traffic, and write concurrency are controlled.

Blob bodies are stored in SQLite BLOB values. This keeps storage simple, but large media archives or high-traffic public servers should usually use Postgres or a backend that stores blob bytes outside the metadata database.

The backend coordinates separate Net::Blossom::Server::Backend::SQLite::MetadataStore and Net::Blossom::Server::Backend::SQLite::BlobStore components on one DBI handle. Applications normally use this top-level storage class.

UPGRADING FROM 0.001000 OR 0.001001

deploy_schema automatically moves blob bodies from the blossom_blobs table into blossom_blob_data. Existing descriptors and owners are preserved. Back up the database before upgrading.

CONSTRUCTOR

new

my $storage = Net::Blossom::Server::Backend::SQLite->new(
    database => $path,
    base_url => $url,
);

Creates a storage object. database is the SQLite database file path. base_url is the public HTTP or HTTPS URL prefix used when descriptors are created. It may include a path prefix, but not userinfo, query, or fragment parts. Trailing slashes are removed.

Instead of database, callers may pass an existing DBI handle as dbh. The handle must be a SQLite handle with AutoCommit enabled.

METHODS

dbh

my $dbh = $storage->dbh;

Returns the DBI handle used by the backend.

base_url

my $url = $storage->base_url;

Returns the normalized descriptor URL prefix.

metadata_store

Returns the SQLite metadata-store component.

blob_store

Returns the SQLite blob-store component.

deploy_schema

$storage->deploy_schema;

Creates the required SQLite tables and indexes if they do not already exist. This method is safe to call more than once and migrates the earlier combined schema when needed.

begin_upload

my $upload = $storage->begin_upload(%context);

Starts a blob upload and returns an upload writer. The server core writes bytes to the writer and later calls commit with validated blob metadata.

get_blob

my $result = $storage->get_blob($sha256);

Returns a Net::Blossom::Server::BlobResult for $sha256, or undef when the blob is absent.

get_blob_range

Returns one requested byte range as a scalar, or undef when the blob is absent. SQLite extracts the range without returning the complete BLOB to Perl.

head_blob

my $descriptor = $storage->head_blob($sha256);

Returns a Net::Blossom::BlobDescriptor without returning the blob body, or undef when the blob is absent.

delete_blob

my $deleted = $storage->delete_blob($sha256, pubkey => $pubkey);

Deletes one owner relationship when pubkey is supplied. The blob bytes are deleted when the final owner is removed. Without pubkey, the blob and all owners are deleted.

list_blobs

my $descriptors = $storage->list_blobs($pubkey, limit => 100);

Returns descriptors owned by $pubkey, sorted by uploaded descending and sha256 ascending. cursor and limit follow the Net::Blossom::Server::Storage contract.

INTERNAL METHODS

BUILDARGS

Normalizes constructor arguments for Class::Tiny.