예제 #1
0
 /**
  * {@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;
 }
예제 #3
0
 /**
  * {@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;
 }
예제 #4
0
파일: Table.php 프로젝트: stephenorr/phinx
 /**
  * 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;
 }
예제 #5
0
 /**
  * {@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;
 }