Phalcon\Db\Adapter\Pdo\Oracle::describeColumns PHP Method

describeColumns() public method

var_dump($connection->describeColumns('posts'));
public describeColumns ( string $table, string $schema = null ) : Phalcon\Db\ColumnInterface[]
$table string
$schema string
return Phalcon\Db\ColumnInterface[]
    public function describeColumns($table, $schema = null)
    {
        $columns = [];
        $oldColumn = null;
        /**
         * 0:column_name,
         * 1:data_type,
         * 2:data_length,
         * 3:data_precision,
         * 4:data_scale,
         * 5:nullable,
         * 6:constraint_type,
         * 7:default,
         * 8:position;
         */
        $sql = $this->_dialect->describeColumns($table, $schema);
        foreach ($this->fetchAll($sql, Db::FETCH_NUM) as $field) {
            $definition = ['bindType' => 2];
            $columnSize = $field[2];
            $columnPrecision = $field[3];
            $columnScale = $field[4];
            $columnType = $field[1];
            /**
             * Check the column type to get the correct Phalcon type
             */
            while (true) {
                if (false !== strpos($columnType, 'NUMBER')) {
                    $definition['type'] = Column::TYPE_DECIMAL;
                    $definition['isNumeric'] = true;
                    $definition['size'] = $columnPrecision;
                    $definition['scale'] = $columnScale;
                    $definition['bindType'] = 32;
                    break;
                }
                if (false !== strpos($columnType, 'INTEGER')) {
                    $definition['type'] = Column::TYPE_INTEGER;
                    $definition['isNumeric'] = true;
                    $definition['size'] = $columnPrecision;
                    $definition['bindType'] = 1;
                    break;
                }
                if (false !== strpos($columnType, 'VARCHAR2')) {
                    $definition['type'] = Column::TYPE_VARCHAR;
                    $definition['size'] = $columnSize;
                    break;
                }
                if (false !== strpos($columnType, 'FLOAT')) {
                    $definition['type'] = Column::TYPE_FLOAT;
                    $definition['isNumeric'] = true;
                    $definition['size'] = $columnSize;
                    $definition['scale'] = $columnScale;
                    $definition['bindType'] = 32;
                    break;
                }
                if (false !== strpos($columnType, 'TIMESTAMP')) {
                    $definition['type'] = Column::TYPE_TIMESTAMP;
                    break;
                }
                if (false !== strpos($columnType, 'DATE')) {
                    $definition['type'] = Column::TYPE_DATE;
                    break;
                }
                if (false !== strpos($columnType, 'RAW')) {
                    $definition['type'] = Column::TYPE_TEXT;
                    break;
                }
                if (false !== strpos($columnType, 'BLOB')) {
                    $definition['type'] = Column::TYPE_TEXT;
                    break;
                }
                if (false !== strpos($columnType, 'CLOB')) {
                    $definition['type'] = Column::TYPE_TEXT;
                    break;
                }
                if (false !== strpos($columnType, 'CHAR')) {
                    $definition['type'] = Column::TYPE_CHAR;
                    $definition['size'] = $columnSize;
                    break;
                }
                $definition['type'] = Column::TYPE_TEXT;
                break;
            }
            if (null === $oldColumn) {
                $definition['first'] = true;
            } else {
                $definition['after'] = $oldColumn;
            }
            /**
             * Check if the field is primary key
             */
            if ('P' == $field[6]) {
                $definition['primary'] = true;
            }
            /**
             * Check if the column allows null values
             */
            if ('N' == $field[5]) {
                $definition['notNull'] = true;
            }
            $columns[] = new Column($field[0], $definition);
            $oldColumn = $field[0];
        }
        return $columns;
    }