/** * カラム生成用の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; }