PHPColibri/framework

View on GitHub
Database/Concrete/MySQL/Connection/Metadata.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php
namespace Colibri\Database\Concrete\MySQL\Connection;

use Colibri\Database\AbstractDb\Driver\Connection\Metadata as AbstractMetadata;

class Metadata extends AbstractMetadata
{
    /** @noinspection PhpDocMissingThrowsInspection */

    /**
     * Возвращает информацию о полях таблицы.
     * Returns table columns info.
     *
     * @param string $tableName
     *
     * @return array
     */
    protected function &retrieveColumnsMetadata($tableName)
    {
        /* @noinspection PhpUnhandledExceptionInspection */
        $result = $this->connection->query('SHOW COLUMNS FROM ' . $tableName);
        $result = $result->fetchAll();

        $fields       = [];
        $fieldTypes   = [];
        $fieldLengths = [];

        $cnt = count($result);
        for ($i = 0; $i < $cnt; $i++) {
            $fName                = &$result[$i]['Field'];
            $fType                = &$result[$i]['Type'];
            $fields[]             = &$fName;
            $fieldTypes[$fName]   = explode('(', $fType)[0];
            $fieldLengths[$fName] = $this->extractFieldTypeLength($fType);
        }

        $returnArray = [ // compact() ???
            'fields'       => &$fields,
            'fieldTypes'   => &$fieldTypes,
            'fieldLengths' => &$fieldLengths,
        ];

        return $returnArray;
    }

    /**
     * @param string $strFieldType
     *
     * @return int|null
     */
    private function extractFieldTypeLength(&$strFieldType)
    {
        $len = explode(')', $strFieldType);
        $len = explode('(', $len[0]);

        return (int)(count($len) > 1 ? $len[1] : null);
    }
}