Result.php 3.69 KB
Newer Older
1 2 3 4 5 6 7
<?php

declare(strict_types=1);

namespace Doctrine\DBAL;

use Doctrine\DBAL\Abstraction\Result as ResultInterface;
8
use Doctrine\DBAL\Driver\Exception as DriverException;
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
use Doctrine\DBAL\Driver\Result as DriverResult;
use Traversable;

final class Result implements ResultInterface
{
    /** @var DriverResult */
    private $result;

    /** @var Connection */
    private $connection;

    public function __construct(DriverResult $result, Connection $connection)
    {
        $this->result     = $result;
        $this->connection = $connection;
    }

    /**
     * {@inheritDoc}
     *
     * @throws DBALException
     */
    public function fetchNumeric()
    {
        try {
            return $this->result->fetchNumeric();
        } catch (DriverException $e) {
36
            $this->connection->handleDriverException($e);
37 38 39 40 41 42 43 44 45 46 47 48 49
        }
    }

    /**
     * {@inheritDoc}
     *
     * @throws DBALException
     */
    public function fetchAssociative()
    {
        try {
            return $this->result->fetchAssociative();
        } catch (DriverException $e) {
50
            $this->connection->handleDriverException($e);
51 52 53 54 55 56 57 58 59 60 61
        }
    }

    /**
     * {@inheritDoc}
     */
    public function fetchOne()
    {
        try {
            return $this->result->fetchOne();
        } catch (DriverException $e) {
62
            $this->connection->handleDriverException($e);
63 64 65 66 67 68 69 70 71 72 73 74 75
        }
    }

    /**
     * {@inheritDoc}
     *
     * @throws DBALException
     */
    public function fetchAllNumeric(): array
    {
        try {
            return $this->result->fetchAllNumeric();
        } catch (DriverException $e) {
76
            $this->connection->handleDriverException($e);
77 78 79 80 81 82 83 84 85 86 87 88 89
        }
    }

    /**
     * {@inheritDoc}
     *
     * @throws DBALException
     */
    public function fetchAllAssociative(): array
    {
        try {
            return $this->result->fetchAllAssociative();
        } catch (DriverException $e) {
90
            $this->connection->handleDriverException($e);
91 92 93 94 95 96 97 98 99 100 101 102 103
        }
    }

    /**
     * {@inheritDoc}
     *
     * @throws DBALException
     */
    public function fetchFirstColumn(): array
    {
        try {
            return $this->result->fetchFirstColumn();
        } catch (DriverException $e) {
104
            $this->connection->handleDriverException($e);
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
        }
    }

    /**
     * @return Traversable<int,array<int,mixed>>
     *
     * @throws DBALException
     */
    public function iterateNumeric(): Traversable
    {
        try {
            while (($row = $this->result->fetchNumeric()) !== false) {
                yield $row;
            }
        } catch (DriverException $e) {
120
            $this->connection->handleDriverException($e);
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
        }
    }

    /**
     * @return Traversable<int,array<string,mixed>>
     *
     * @throws DBALException
     */
    public function iterateAssociative(): Traversable
    {
        try {
            while (($row = $this->result->fetchAssociative()) !== false) {
                yield $row;
            }
        } catch (DriverException $e) {
136
            $this->connection->handleDriverException($e);
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
        }
    }

    /**
     * @return Traversable<int,mixed>
     *
     * @throws DBALException
     */
    public function iterateColumn(): Traversable
    {
        try {
            while (($value = $this->result->fetchOne()) !== false) {
                yield $value;
            }
        } catch (DriverException $e) {
152
            $this->connection->handleDriverException($e);
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
        }
    }

    public function rowCount(): int
    {
        return $this->result->rowCount();
    }

    public function columnCount(): int
    {
        return $this->result->columnCount();
    }

    public function free(): void
    {
        $this->result->free();
    }
}