/** * Gets the column name in Oracle. * * @param ColumnInterface $column * @return string * * @throws Exception */ public function getColumnDefinition(ColumnInterface $column) { $type = $column->getType(); $size = $column->getSize(); switch ($type) { case Column::TYPE_INTEGER: $columnSql = 'INTEGER'; break; case Column::TYPE_DATE: $columnSql = 'DATE'; break; case Column::TYPE_VARCHAR: $columnSql = 'VARCHAR2(' . $size . ')'; break; case Column::TYPE_DECIMAL: $scale = $column->getScale(); $columnSql = 'NUMBER(' . $size . ',' . $scale . ')'; break; case Column::TYPE_DATETIME: $columnSql = 'TIMESTAMP'; break; case Column::TYPE_TIMESTAMP: $columnSql = 'TIMESTAMP'; break; case Column::TYPE_CHAR: $columnSql = 'CHAR(' . $size . ')'; break; case Column::TYPE_TEXT: $columnSql = 'TEXT'; break; case Column::TYPE_FLOAT: $scale = $column->getScale(); $columnSql = 'FLOAT(' . $size . ',' . $scale . ')'; break; case Column::TYPE_BOOLEAN: $columnSql = 'TINYINT(1)'; break; default: throw new Exception('Unrecognized Oracle data type at column ' . $column->getName()); } return $columnSql; }
public function getAttributes($type, $visibility, \Phalcon\Db\ColumnInterface $field, $annotate = false, $customFieldName = null) { $fieldName = $customFieldName ?: $field->getName(); if ($annotate) { $templateAttributes = <<<EOD /** * * @var %s%s%s * @Column(type="%s"%s, nullable=%s) */ %s \$%s; EOD; return PHP_EOL . sprintf($templateAttributes, $type, $field->isPrimary() ? PHP_EOL . ' * @Primary' : '', $field->isAutoIncrement() ? PHP_EOL . ' * @Identity' : '', $type, $field->getSize() ? ', length=' . $field->getSize() : '', $field->isNotNull() ? 'false' : 'true', $visibility, $fieldName) . PHP_EOL; } else { $templateAttributes = <<<EOD /** * * @var %s */ %s \$%s; EOD; return PHP_EOL . sprintf($templateAttributes, $type, $visibility, $fieldName) . PHP_EOL; } }
/** * Generates SQL to modify a column in a table. * * @param string $tableName * @param string $schemaName * @param mixed $column * @param mixed $currentColumn * * @return string */ public function modifyColumn($tableName, $schemaName, \Phalcon\Db\ColumnInterface $column, \Phalcon\Db\ColumnInterface $currentColumn = null) { $sql = 'ALTER TABLE ' . $this->prepareTable($tableName, $schemaName) . ' ALTER COLUMN [' . $column->getName() . '] ' . $this->getColumnDefinition($column); if ($column->hasDefault()) { $defaultValue = $column->getDefault(); if (strpos(strtoupper($defaultValue), 'CURRENT_TIMESTAMP') !== false) { $sql .= ' DEFAULT CURRENT_TIMESTAMP'; } else { $sql .= ' DEFAULT "' . addcslashes($defaultValue, '"') . '"'; } } if ($column->isNotNull()) { $sql .= ' NOT NULL'; } if ($column->isAutoIncrement()) { $sql .= ' IDENTITY(1,1)'; } return $sql; }