Вход Регистрация
Файл: vendor/doctrine/dbal/src/Driver/OCI8/Result.php
Строк: 123
<?php

declare(strict_types=1);

namespace 
DoctrineDBALDriverOCI8;

use 
DoctrineDBALDriverException;
use 
DoctrineDBALDriverFetchUtils;
use 
DoctrineDBALDriverOCI8ExceptionError;
use 
DoctrineDBALDriverResult as ResultInterface;

use function 
oci_cancel;
use function 
oci_error;
use function 
oci_fetch_all;
use function 
oci_fetch_array;
use function 
oci_num_fields;
use function 
oci_num_rows;

use const 
OCI_ASSOC;
use const 
OCI_FETCHSTATEMENT_BY_COLUMN;
use const 
OCI_FETCHSTATEMENT_BY_ROW;
use const 
OCI_NUM;
use const 
OCI_RETURN_LOBS;
use const 
OCI_RETURN_NULLS;

final class 
Result implements ResultInterface
{
    
/** @var resource */
    
private $statement;

    
/**
     * @internal The result can be only instantiated by its driver connection or statement.
     *
     * @param resource $statement
     */
    
public function __construct($statement)
    {
        
$this->statement $statement;
    }

    
/**
     * {@inheritDoc}
     */
    
public function fetchNumeric()
    {
        return 
$this->fetch(OCI_NUM);
    }

    
/**
     * {@inheritDoc}
     */
    
public function fetchAssociative()
    {
        return 
$this->fetch(OCI_ASSOC);
    }

    
/**
     * {@inheritDoc}
     */
    
public function fetchOne()
    {
        return 
FetchUtils::fetchOne($this);
    }

    
/**
     * {@inheritDoc}
     */
    
public function fetchAllNumeric(): array
    {
        return 
$this->fetchAll(OCI_NUMOCI_FETCHSTATEMENT_BY_ROW);
    }

    
/**
     * {@inheritDoc}
     */
    
public function fetchAllAssociative(): array
    {
        return 
$this->fetchAll(OCI_ASSOCOCI_FETCHSTATEMENT_BY_ROW);
    }

    
/**
     * {@inheritDoc}
     */
    
public function fetchFirstColumn(): array
    {
        return 
$this->fetchAll(OCI_NUMOCI_FETCHSTATEMENT_BY_COLUMN)[0];
    }

    public function 
rowCount(): int
    
{
        
$count oci_num_rows($this->statement);

        if (
$count !== false) {
            return 
$count;
        }

        return 
0;
    }

    public function 
columnCount(): int
    
{
        
$count oci_num_fields($this->statement);

        if (
$count !== false) {
            return 
$count;
        }

        return 
0;
    }

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

    
/**
     * @return mixed|false
     *
     * @throws Exception
     */
    
private function fetch(int $mode)
    {
        
$result oci_fetch_array($this->statement$mode OCI_RETURN_NULLS OCI_RETURN_LOBS);

        if (
$result === false && oci_error($this->statement) !== false) {
            throw 
Error::new($this->statement);
        }

        return 
$result;
    }

    
/** @return array<mixed> */
    
private function fetchAll(int $modeint $fetchStructure): array
    {
        
oci_fetch_all(
            
$this->statement,
            
$result,
            
0,
            -
1,
            
$mode OCI_RETURN_NULLS $fetchStructure OCI_RETURN_LOBS,
        );

        return 
$result;
    }
}
Онлайн: 1
Реклама