Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
45.45% covered (warning)
45.45%
5 / 11
CRAP
78.05% covered (success)
78.05%
32 / 41
MySQLMultiQueryResultSet
0.00% covered (danger)
0.00%
0 / 1
45.45% covered (warning)
45.45%
5 / 11
24.23
78.05% covered (success)
78.05%
32 / 41
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
3 / 3
 hasNext
0.00% covered (danger)
0.00%
0 / 1
3.03
85.71% covered (success)
85.71%
6 / 7
 getNext
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 close
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
 getBooleanValue
0.00% covered (danger)
0.00%
0 / 1
2.03
80.00% covered (success)
80.00%
4 / 5
 getIntegerValue
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
 getFloatValue
0.00% covered (danger)
0.00%
0 / 1
2.06
75.00% covered (success)
75.00%
3 / 4
 getStringValue
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 getDateTime
0.00% covered (danger)
0.00%
0 / 1
2.06
75.00% covered (success)
75.00%
3 / 4
 getObject
0.00% covered (danger)
0.00%
0 / 1
2.06
75.00% covered (success)
75.00%
3 / 4
 getArray
0.00% covered (danger)
0.00%
0 / 1
6
0.00% covered (danger)
0.00%
0 / 4
<?php
declare(strict_types = 1);
namespace Siesta\Driver\MySQL;
use Siesta\Database\ResultSet;
use Siesta\Util\ArrayUtil;
use Siesta\Util\SiestaDateTime;
/**
 * @author Gregor Müller
 */
class MySQLMultiQueryResultSet implements ResultSet
{
    /**
     * @var \mysqli
     */
    private $connection;
    /**
     * @var \mysqli_result
     */
    private $mysqliResult;
    /**
     * @var array
     */
    protected $next;
    /**
     * @param \mysqli $connection
     */
    public function __construct(\mysqli $connection)
    {
        $this->connection = $connection;
        $this->mysqliResult = $this->connection->store_result();
    }
    /**
     * @return bool
     */
    public function hasNext() : bool
    {
        // nothing in here return false
        if (!$this->mysqliResult) {
            return false;
        }
        // get next row
        $this->next = $this->mysqliResult->fetch_assoc();
        if ($this->next) {
            return true;
        }
        // close result set
        $this->mysqliResult->close();
        // no more results
        return false;
    }
    /**
     * @return array
     */
    public function getNext() : array
    {
        return $this->next;
    }
    /**
     *
     */
    public function close()
    {
        while ($this->connection->more_results()) {
            $this->connection->next_result();
            $this->connection->use_result();
        }
    }
    /**
     * @param string $key
     *
     * @return bool
     */
    public function getBooleanValue(string $key) : bool
    {
        $value = ArrayUtil::getFromArray($this->next, $key);
        if (is_null($value)) {
            return null;
        }
        $value = intval($value);
        return ($value !== 0);
    }
    /**
     * @param string $key
     *
     * @return int|null
     */
    public function getIntegerValue(string $key)
    {
        $value = ArrayUtil::getFromArray($this->next, $key);
        if (is_null($value)) {
            return null;
        }
        return (integer)$value;
    }
    /**
     * @param $key
     *
     * @return float|null
     */
    public function getFloatValue(string $key)
    {
        $value = ArrayUtil::getFromArray($this->next, $key);
        if (is_null($value)) {
            return null;
        }
        return (float)$value;
    }
    /**
     * @param $key
     *
     * @return null|string
     */
    public function getStringValue(string $key)
    {
        return ArrayUtil::getFromArray($this->next, $key);
    }
    /**
     * @param $key
     *
     * @return null|SiestaDateTime
     */
    public function getDateTime(string $key)
    {
        $value = ArrayUtil::getFromArray($this->next, $key);
        if (is_null($value)) {
            return null;
        }
        return new SiestaDateTime($value);
    }
    /**
     * @param string $key
     *
     * @return mixed|null
     */
    public function getObject(string $key)
    {
        $value = $this->getStringValue($key);
        if ($value === null) {
            return null;
        }
        return unserialize($value);
    }
    /**
     * @param string $key
     *
     * @return array|null
     */
    public function getArray(string $key)
    {
        $value = $this->getStringValue($key);
        if ($value === null) {
            return null;
        }
        return json_decode($value, true);
    }
}