Prostore::Adapter::Base
Abstract backend adapter (ADR-0007).
Implementations: SQLite (Prostore::Adapter::SQLite::Adapter) and
PostgreSQL (Prostore::Adapter::Postgres::Adapter). The adapter
exposes a uniform surface that the planner, runner, and drift detector
consume; backend-specific operational behaviors (e.g., Postgres
CREATE INDEX CONCURRENTLY) are hidden behind capability flags and
per-step planner branching.
Methods that issue SQL accept an Executor — anything that responds
to exec and query_*. In practice this is DB::Database,
DB::Connection, or DB::Transaction. The runner pins all DDL to a
single checked-out connection (see Prostore::Connection#with_connection)
to avoid pool deadlock when multi-step operations call back into the
adapter from inside a transaction.
Constructors
Instance methods
Write a point-in-time backup to dest (an absolute file path).
SQLite uses VACUUM INTO; PostgreSQL shells out to pg_dump.
Column DDL fragment for an auto-incrementing BIGINT primary key on
the bookkeeping tables. SQLite emits INTEGER PRIMARY KEY AUTOINCREMENT
while Postgres emits BIGSERIAL PRIMARY KEY (or identity). Each
adapter overrides.
Array-args overload for callers that build their argument list dynamically (e.g., the record-layer INSERT helper).
INSERT a row and return its newly-assigned ID. SQLite uses
last_insert_rowid(); Postgres uses RETURNING id. The adapter
encapsulates the difference.
The operator for a case-insensitive substring match in a WHERE
clause. SQLite's LIKE is case-insensitive for ASCII by default;
PostgreSQL exposes ILIKE for the same purpose.
The n-th positional parameter placeholder in the adapter's SQL
syntax. SQLite uses ? (position-implicit). PostgreSQL uses
$1, $2, … (position-explicit). crystal-db does NOT translate
between them, so SQL strings shared by both adapters must build
placeholders via this method.
Convenience: comma-joined sequence of count placeholders, e.g.
"?, ?, ?" on SQLite or "$1, $2, $3" on Postgres.
Connection-establishment hook. Adapters override to set per-connection
session state (SQLite's PRAGMA foreign_keys = ON).