<?php /** @license MIT * Copyright 2017 J. King, Dustin Wilson et al. * See LICENSE and AUTHORS files for details */ declare(strict_types=1); namespace JKingWeb\Arsse\Db\SQLite3; class PDOStatement extends \JKingWeb\Arsse\Db\PDOStatement { use ExceptionBuilder; use \JKingWeb\Arsse\Db\PDOError; /** @codeCoverageIgnore */ public function runArray(array $values = []): \JKingWeb\Arsse\Db\Result { // because PDO uses sqlite3_prepare() internally instead of sqlite3_prepare_v2(), // we have to retry ourselves in cases of schema changes // the SQLite3 class is not similarly affected $attempts = 0; retry: try { return parent::runArray($values); } catch (\JKingWeb\Arsse\Db\ExceptionRetry $e) { if (++$attempts > 50) { throw $e; } else { $this->st = $this->db->prepare($this->st->queryString); goto retry; } } } }