/** * {@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; }
/** * {@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(); $rows = $this->fetchAll(sprintf('SHOW COLUMNS FROM %s', $this->quoteTableName($tableName))); foreach ($rows as $columnInfo) { $phinxType = $this->getPhinxType($columnInfo['Type']); $column = new Column(); $column->setName($columnInfo['Field'])->setNull($columnInfo['Null'] !== 'NO')->setDefault($columnInfo['Default'])->setType($phinxType['name'])->setLimit($phinxType['limit']); if ($columnInfo['Extra'] === 'auto_increment') { $column->setIdentity(true); } $columns[] = $column; } return $columns; }
/** * Add a table column. * * Type can be: string, text, integer, float, decimal, datetime, timestamp, * time, date, binary, boolean. * * Valid options can be: limit, default, null, precision or scale. * * @param string|Column $columnName Column Name * @param string $type Column Type * @param array $options Column Options * @throws \RuntimeException * @throws \InvalidArgumentException * @return Table */ public function addColumn($columnName, $type = null, $options = array()) { // we need an adapter set to add a column if (null === $this->getAdapter()) { throw new \RuntimeException('An adapter must be specified to add a column.'); } // create a new column object if only strings were supplied if (!$columnName instanceof Column) { $column = new Column(); $column->setName($columnName); $column->setType($type); $column->setOptions($options); // map options to column methods } else { $column = $columnName; } // Delegate to Adapters to check column type if (!$this->getAdapter()->isValidColumnType($column)) { throw new \InvalidArgumentException(sprintf('An invalid column type "%s" was specified for column "%s".', $column->getType(), $column->getName())); } $this->columns[] = $column; return $this; }
/** * {@inheritdoc} */ public function getColumns($tableName) { $columns = array(); $rows = $this->fetchAll(sprintf('pragma table_info(%s)', $this->quoteTableName($tableName))); foreach ($rows as $columnInfo) { $column = new Column(); $type = strtolower($columnInfo['type']); $column->setName($columnInfo['name'])->setNull($columnInfo['notnull'] != '1')->setDefault($columnInfo['dflt_value']); $phinxType = $this->getPhinxType($type); $column->setType($phinxType['name'])->setLimit($phinxType['limit']); if ($columnInfo['pk'] == 1) { $column->setIdentity(true); } $columns[] = $column; } return $columns; }
/** * Sets the column name. * * @param string $name * * @return $this */ public function setName($name) { $this->column->setName($name); return $this; }