count; } public function reset(): void { $this->count = 0; } public function record(): void { ++$this->count; } public function wrap(Driver $driver): Driver { return new class($driver, $this) extends AbstractDriverMiddleware { public function __construct(Driver $driver, private QueryCounter $counter) { parent::__construct($driver); } public function connect(array $params): DriverConnection { return new class(parent::connect($params), $this->counter) extends AbstractConnectionMiddleware { public function __construct(DriverConnection $connection, private QueryCounter $counter) { parent::__construct($connection); } public function prepare(string $sql): DriverStatement { return new class(parent::prepare($sql), $this->counter) extends AbstractStatementMiddleware { public function __construct(DriverStatement $statement, private QueryCounter $counter) { parent::__construct($statement); } public function execute(): Result { $this->counter->record(); return parent::execute(); } }; } public function query(string $sql): Result { $this->counter->record(); return parent::query($sql); } public function exec(string $sql): int|string { $this->counter->record(); return parent::exec($sql); } }; } }; } }