public function query($sql, ...$params)
{
list($sql, $params) = $this->preprocess($sql, ...$params);
try {
$result = new ResultSet($this, $sql, $params);
} catch (PDOException $e) {
$this->onQuery($this, $e);
throw $e;
}
$this->onQuery($this, $result);
return $result;
}