Known Limitations#

Scope Boundaries#

  • DBLayer is not an ORM. It does not provide Active Record entities, relationship graph loading, or model lifecycle abstractions.

  • DBLayer does not include a migration framework yet.

Connection and Consistency Notes#

  • Connection pooling is most useful in long-running workers and daemons. In classic PHP-FPM request lifecycles, pooled reuse is usually less impactful.

  • Read-replica consistency is not guaranteed by default. For read-after-write behavior, use sticky mode, transactions, or force reads to write PDO.

  • Read-only transaction mode is best-effort and driver-dependent. SQLite is effectively a no-op for transaction read-only flags, while MySQL/PostgreSQL use best-effort session/transaction commands.

Performance Notes#

  • Statement cache is intentionally disabled by default. Enable it only after benchmark and lifecycle validation for your driver/workload.

  • Query comments are useful for tracing, but still add SQL text overhead. Measure with comments on/off before enabling at high throughput.