Module: Pg
- Defined in:
- lib/tep/pg.rb
Overview
Tep ships the PG battery – a libpq wrapper that mirrors the ruby-pg gem’s public surface (PG::Connection / PG::Result / PG::Error and SQLSTATE-keyed subclasses) so an eventual ActiveRecord-on-spinel port reuses the existing AR pg adapter with minimal divergence.
Implementation:
- lib/tep/tep_pg.c -- the libpq C shim (integer-handle slot
tables, rotating return-string buffer, param accumulator).
- this file -- the Ruby surface.
Why not the ‘pg` gem? It’s a CRuby native extension against MRI’s ABI; spinel produces a static binary with no MRI runtime. The C-shim model (same pattern as Tep::SQLite) replaces “load a gem” with “link a .o at compile time.”
Namespace note: PG lives at the top level (matching ‘require ’pg’‘ from gem-shaped code), not under Tep::. This is the one battery that bends the Tep::Foo convention to keep AR-portability free.
See docs/PG-BATTERY.md for the full design + per-method compatibility table.