public function query()
{
$stmt = null;
$args = func_get_args();
$attempt = 0;
$retry = true;
while ($retry) {
$retry = false;
try {
switch (count($args)) {
case 1:
$stmt = parent::query($args[0]);
break;
case 2:
$stmt = parent::query($args[0], $args[1]);
break;
case 3:
$stmt = parent::query($args[0], $args[1], $args[2]);
break;
case 4:
$stmt = parent::query($args[0], $args[1], $args[2], $args[3]);
break;
default:
$stmt = parent::query();
}
} catch (\Exception $e) {
if ($this->canTryAgain($attempt) && $this->isRetryableException($e, $args[0])) {
$this->close();
++$attempt;
$retry = true;
} else {
throw $e;
}
}
}
return $stmt;
}