/**
  * {@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;
 }
示例#2
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;
 }
 /**
  * Sets the column limit.
  *
  * @param integer $limit
  *
  * @return $this
  */
 public function setLimit($limit)
 {
     $this->column->setLimit($limit);
     return $this;
 }