/** * {@inheritdoc} */ public function getColumns($tableName) { $columns = array(); $sql = sprintf("SELECT column_name, data_type, is_identity, is_nullable,\n column_default, character_maximum_length, numeric_precision, numeric_scale\n FROM information_schema.columns\n WHERE table_name ='%s'", $tableName); $columnsInfo = $this->fetchAll($sql); foreach ($columnsInfo as $columnInfo) { $column = new Column(); $column->setName($columnInfo['column_name'])->setType($this->getPhinxType($columnInfo['data_type']))->setNull($columnInfo['is_nullable'] === 'YES')->setDefault($columnInfo['column_default'])->setIdentity($columnInfo['is_identity'] === 'YES')->setPrecision($columnInfo['numeric_precision'])->setScale($columnInfo['numeric_scale']); if (preg_match('/\\bwith time zone$/', $columnInfo['data_type'])) { $column->setTimezone(true); } if (isset($columnInfo['character_maximum_length'])) { $column->setLimit($columnInfo['character_maximum_length']); } $columns[] = $column; } return $columns; }
/** * {@inheritdoc} */ public function getColumns($tableName) { $columns = array(); $sql = sprintf("SELECT DISTINCT TABLE_SCHEMA AS [schema], TABLE_NAME as [table_name], COLUMN_NAME AS [name], DATA_TYPE AS [type],\n IS_NULLABLE AS [null], COLUMN_DEFAULT AS [default],\n CHARACTER_MAXIMUM_LENGTH AS [char_length],\n NUMERIC_PRECISION AS [precision],\n NUMERIC_SCALE AS [scale], ORDINAL_POSITION AS [ordinal_position],\n COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') as [identity]\n FROM INFORMATION_SCHEMA.COLUMNS\n WHERE TABLE_NAME = '%s'\n ORDER BY ordinal_position", $tableName); $rows = $this->fetchAll($sql); foreach ($rows as $columnInfo) { $column = new Column(); $column->setName($columnInfo['name'])->setType($this->getPhinxType($columnInfo['type']))->setNull($columnInfo['null'] !== 'NO')->setDefault($this->parseDefault($columnInfo['default']))->setIdentity($columnInfo['identity'] === '1')->setComment($this->getColumnComment($columnInfo['table_name'], $columnInfo['name'])); if (!empty($columnInfo['char_length'])) { $column->setLimit($columnInfo['char_length']); } $columns[$columnInfo['name']] = $column; } return $columns; }
/** * Sets the column limit. * * @param integer $limit * * @return $this */ public function setLimit($limit) { $this->column->setLimit($limit); return $this; }