/** * Creates a table column. * * @param array $column column metadata * * @return ColumnSchema normalized column metadata */ protected function createColumn($column) { $c = new ColumnSchema(['name' => $column['name']]); $c->rawName = $this->quoteColumnName($c->name); $c->allowNull = $column['is_nullable'] == '1'; $c->isPrimaryKey = $column['is_primary_key'] == '1'; $c->isUnique = $column['is_unique'] == '1'; $c->isIndex = $column['constraint_name'] !== null; $c->dbType = $column['type']; if ($column['precision'] !== '0') { if ($column['scale'] !== '0') { // We have a numeric datatype $c->precision = (int) $column['precision']; $c->scale = (int) $column['scale']; } else { $c->size = (int) $column['precision']; } } else { $c->size = $column['max_length'] !== '-1' ? (int) $column['max_length'] : null; } $c->autoIncrement = $column['is_identity'] === '1'; $c->comment = isset($column['Comment']) ? $column['Comment'] === null ? '' : $column['Comment'] : ''; $c->extractFixedLength($column['type']); $c->extractMultiByteSupport($column['type']); $c->extractType($column['type']); if (isset($column['default_definition'])) { $c->extractDefault($column['default_definition']); } return $c; }
/** * @param ColumnSchema $field_info * @param bool $as_quoted_string * @param string $out_as * * @return string */ public function parseFieldForSelect($field_info, $as_quoted_string = false, $out_as = null) { $field = $as_quoted_string ? $this->quoteColumnName($field_info->name) : $field_info->name; $alias = $as_quoted_string ? $this->quoteColumnName($field_info->getName(true)) : $field_info->getName(true); switch ($field_info->dbType) { case 'datetime': case 'datetimeoffset': return "(CONVERT(nvarchar(30), {$field}, 127)) AS {$alias}"; case 'geometry': case 'geography': case 'hierarchyid': return "({$field}.ToString()) AS {$alias}"; default: return parent::parseFieldForSelect($field_info, $as_quoted_string, $out_as); } }