class

Prostore::Adapter::Base

Inherits Reference < Object

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

new(db : DB::Database)
Source

Instance methods

backup(dest : String) : Nil

Write a point-in-time backup to dest (an absolute file path). SQLite uses VACUUM INTO; PostgreSQL shells out to pg_dump.

Source
bookkeeping_id_column_def

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.

Source
insert_returning_id(executor : Executor, sql : String, args : Array) : Int64

Array-args overload for callers that build their argument list dynamically (e.g., the record-layer INSERT helper).

Source
insert_returning_id(executor : Executor, sql : String, *args) : Int64

INSERT a row and return its newly-assigned ID. SQLite uses last_insert_rowid(); Postgres uses RETURNING id. The adapter encapsulates the difference.

Source
introspect_all(executor : Executor = @db) : Array(LiveTable)
Source
introspect_table(name : String, executor : Executor = @db) : LiveTable
Source
introspect_table_names(executor : Executor = @db) : Array(String)
Source
like_operator

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.

Source
placeholder(n : Int32) : String

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.

Source
placeholders(count : Int32) : String

Convenience: comma-joined sequence of count placeholders, e.g. "?, ?, ?" on SQLite or "$1, $2, $3" on Postgres.

Source
quote_ident(name : String) : String
Source
quote_string(s : String) : String
Source
render_create_index(table : String, index : Schema::Index) : String
Source
render_create_table(definition : Schema::Definition) : String
Source
session_setup(conn : DB::Connection) : Nil

Connection-establishment hook. Adapters override to set per-connection session state (SQLite's PRAGMA foreign_keys = ON).

Source
supports_add_constraint_not_valid?
Source
supports_alter_drop_column?
Source
supports_alter_set_not_null?
Source
supports_concurrent_index?
Source

Nested types