DatabasePool
class DatabasePool extends ConnectionPool
Database connection pool.
For in-memory SQLite, manages a shared PDO behind a single pooled owner. Non-pooled paths (Capsule, SimpleConnectionResolver) bypass this entirely and get isolated connections as expected.
Properties
| protected Connection> | $channel | from ConnectionPool | |
| protected PoolOptions | $options | from ConnectionPool | |
| protected array<int, true> | $managedConnections | from ConnectionPool | |
| protected array<int, true> | $borrowedConnections | from ConnectionPool | |
| protected int | $creatingCount | from ConnectionPool | |
| protected bool | $closed | from ConnectionPool | |
| protected UsageTracker|null | $usageTracker | from ConnectionPool | |
| protected bool | $usageTrackerInitialized | from ConnectionPool | |
| protected IdleConnectionMonitor|null | $idleMonitor | from ConnectionPool | |
| protected array | $config | ||
| protected Timer|null | $heartbeatTimer | ||
| protected int|null | $heartbeatTimerId | ||
| protected bool | $heartbeatStarted | ||
| protected PDO|null | $sharedInMemorySqlitePdo | Shared PDO for in-memory SQLite. |
Methods
Enable background maintenance after pool initialization succeeds.
Check one idle connection and discard it when unhealthy.
Close the database pool and clear its shared resources.
Get the current number of connections managed by the pool.
Get the number of connections currently available in the pool.
Create a usage policy for this database pool.
Create a new pooled connection.
Return an idle connection without changing its activity timestamps.
Convert seconds to nanoseconds without overflowing integer arithmetic.
Build a monotonic deadline without overflowing at long durations or uptimes.
Ensure that a connection belongs to this pool before destroying it.
Get the shared PDO for in-memory SQLite, or null for other drivers/configurations.
Create the shared PDO for in-memory SQLite via the factory.
Check if this pool is for an in-memory SQLite database.
Ensure a derived read pool does not point at an in-memory SQLite database.
Start the heartbeat timer if configured.
Clear the heartbeat timer.
Run one heartbeat sweep over currently idle connections.
Details
at line 48
__construct(Container $container, string $name)
Create a database connection pool.
in
ConnectionPool at line 60
string
getName()
Get the pool name.
at line 114
void
start()
Enable background maintenance after pool initialization succeeds.
in
ConnectionPool at line 84
Connection
borrow()
Borrow a connection from the pool.
in
ConnectionPool at line 126
void
release(Connection $connection)
Release a connection back to the pool.
in
ConnectionPool at line 143
void
discard(Connection $connection)
Discard a borrowed connection from the pool.
in
ConnectionPool at line 154
void
trimExcessIdle()
Close excess idle connections without checking their age.
Stop when the managed count reaches the retained minimum or no idle connections remain.
in
ConnectionPool at line 169
void
checkIdleConnection()
Check one idle connection and discard it when unhealthy.
at line 201
void
close()
Close the database pool and clear its shared resources.
in
ConnectionPool at line 243
bool
isClosed()
Determine if the pool is closed.
in
ConnectionPool at line 251
int
getManagedCount()
Get the current number of connections managed by the pool.
in
ConnectionPool at line 259
int
getBorrowedCount()
Return the number of connections borrowed by callers.
in
ConnectionPool at line 267
PoolOptions
getOptions()
Get the pool configuration options.
in
ConnectionPool at line 275
int
getIdleCount()
Get the number of connections currently available in the pool.
in
ConnectionPool at line 283
int
getWaitingCount()
Get the number of coroutines waiting for a connection.
in
ConnectionPool at line 293
array
getStats()
Return the pool's current resource counts and closed state.
at line 161
protected UsageTracker|null
createUsageTracker()
Create a usage policy for this database pool.
at line 131
protected Connection
createConnection()
Create a new pooled connection.
in
ConnectionPool at line 323
protected Connection|false
popIdleConnection()
Pop and validate one idle connection.
in
ConnectionPool at line 347
protected void
requeueConnection(Connection $connection)
Return an idle connection without changing its activity timestamps.
in
ConnectionPool at line 365
protected void
destroyConnection(Connection $connection)
Destroy a managed connection and release its capacity.
in
ConnectionPool at line 387
protected void
report(Throwable|string $error)
Report a pool maintenance or cleanup failure without throwing.
in
ConnectionPool at line 398
protected StdoutLoggerInterface|null
getLogger()
Get the logger instance if available.
in
ConnectionPool at line 485
protected int
nanoseconds(float $seconds)
Convert seconds to nanoseconds without overflowing integer arithmetic.
in
ConnectionPool at line 495
protected int
deadline(float $seconds)
Build a monotonic deadline without overflowing at long durations or uptimes.
in
ConnectionPool at line 508
protected int
ensureManaged(Connection $connection)
Ensure that a connection belongs to this pool before destroying it.
at line 123
PDO|null
getSharedInMemorySqlitePdo()
Get the shared PDO for in-memory SQLite, or null for other drivers/configurations.
at line 150
protected PDO
createSharedInMemorySqlitePdo()
Create the shared PDO for in-memory SQLite via the factory.
Uses the normal PDO resolver pipeline so initial construction and refresh produce the same connection subclass.
at line 169
protected bool
isInMemorySqlite(array $config)
Check if this pool is for an in-memory SQLite database.
at line 183
protected void
ensureNotDerivedInMemorySqlitePool(ConnectionName $name, array $config)
Ensure a derived read pool does not point at an in-memory SQLite database.
at line 219
protected void
startHeartbeat()
Start the heartbeat timer if configured.
at line 262
protected void
clearHeartbeat()
Clear the heartbeat timer.
at line 276
protected void
heartbeat()
Run one heartbeat sweep over currently idle connections.
at line 295
protected void
heartbeatConnection(PooledConnection $connection)
Heartbeat one idle connection.
at line 328
protected void
discardHeartbeatConnection(PooledConnection $connection)
Discard an idle connection from the pool.