diff --git a/psalm.xml.dist b/psalm.xml.dist index 0cd64623472..6591e47a5cc 100644 --- a/psalm.xml.dist +++ b/psalm.xml.dist @@ -655,10 +655,12 @@ + + diff --git a/src/Driver/PgSQL/Connection.php b/src/Driver/PgSQL/Connection.php index c6e170b5dde..703e327c7c5 100644 --- a/src/Driver/PgSQL/Connection.php +++ b/src/Driver/PgSQL/Connection.php @@ -17,8 +17,10 @@ use function pg_escape_bytea; use function pg_escape_literal; use function pg_get_result; +use function pg_last_error; use function pg_result_error; use function pg_send_prepare; +use function pg_send_query; use function pg_version; use function sprintf; use function uniqid; @@ -67,7 +69,18 @@ public function prepare(string $sql): Statement public function query(string $sql): Result { - return $this->prepare($sql)->execute(); + if (@pg_send_query($this->connection, $sql) !== true) { + throw new Exception(pg_last_error($this->connection)); + } + + $result = @pg_get_result($this->connection); + assert($result !== false); + + if ((bool) pg_result_error($result)) { + throw Exception::fromResult($result); + } + + return new Result($result); } /** {@inheritdoc} */ @@ -82,7 +95,7 @@ public function quote($value, $type = ParameterType::STRING) public function exec(string $sql): int { - return $this->prepare($sql)->execute()->rowCount(); + return $this->query($sql)->rowCount(); } /** {@inheritdoc} */