コード例 #1
0
ファイル: MySQLAdapter.php プロジェクト: triple-i/tarako
 /**
  * カラム生成用のSQLを構築する
  *
  * @param  Column $column
  * @return string
  */
 private function _buildColumnSql(Column $column)
 {
     $sql = $column->getName() . ' ';
     $type = $this->getSqlType($column->getType());
     $sql = sprintf('%s %s', $column->getName(), strtoupper($type['name']));
     // precisionとscale値の確認
     if ($column->getPrecision() && $column->getScale()) {
         $sql .= sprintf('(%s,%s)', $column->getPrecision(), $column->getScale());
     }
     // limit値の確認
     if ($column->getLimit() || isset($type['limit'])) {
         $limit = $column->getLimit() ? $column->getLimit() : $type['limit'];
         $sql .= sprintf('(%s)', $limit);
     }
     // signed値の確認
     $signed = [self::TYPE_INT, self::TYPE_BIGINT, self::TYPE_FLOAT, self::TYPE_DECIMAL];
     if (!$column->isSigned() && in_array($column->getType(), $signed)) {
         $sql .= ' unsigned';
     }
     // null値の確認
     if ($column->isNull() === false) {
         $sql .= ' NOT NULL';
     } else {
         $sql .= ' NULL';
     }
     // auto_incrementの確認
     if ($column->isIdentity()) {
         $sql .= ' AUTO_INCREMENT';
     }
     // default値の確認
     $default = $column->getDefault();
     if (is_numeric($default) || $default == 'CURRENT_TIMESTAMP') {
         $sql .= sprintf(' DEFAULT %s', $column->getDefault());
     } elseif (!is_null($column->getDefault())) {
         $sql .= sprintf(" DEFAULT '%s'", $column->getDefault());
     }
     // comment値の確認
     if ($column->getComment()) {
         $sql .= sprintf(' COMMENT %s', $this->db->quote($column->getComment()));
     }
     // update値の確認
     if ($column->getUpdate()) {
         $sql .= sprintf(' ON UPDATE %s', $column->getUpdate());
     }
     return $sql;
 }