adapter = $adapter; # Patch coming soon $type = $data->getTypes()[0]; $this->name = $data->name; $this->builtIn = $type->builtIn; $this->tags = $data->getAttributes(); if (isset($data->value)) { $this->default = $data->value; } $field = $this->getFieldTag(); $adapter->whitelistAttributes($field->attributes); $this->type = $field->type ?? $type->type; $this->length = $field->length ?? null; $this->precision = $field->precision ?? null; $this->nullable = $data->allowsNull() ?: $field->nullable; $this->update = $field->attributes['update'] ?? null; } public function getSqlName() : string { return $this->getColumnName(); } public function getSqlType(bool $typeOnly = false) : string { return $this->adapter->mapFieldType($this, $typeOnly); } public function getSqlParams() : string { $default = $this->getDefault(); $syntax = $this->adapter->tableSyntax(); return implode(' ', array_filter([ $this->isUnsigned() ? $syntax['unsigned'] : null, $this->nullable ? "NULL" : "NOT NULL", $this->update ? "ON UPDATE {$this->update}" : null, $default !== null ? "DEFAULT $default" : null, $this->isPrimaryKey() ? $syntax['pk'] : null, $this->isAutoIncrement() ? $syntax['ai'] : null, ])); } public function getFieldTag() : Attribute\Property\Field|null { $field = array_filter($this->tags, fn($item) => $item->object instanceof Attribute\Property\Field); return array_pop($field)->object; } public function getColumnName() : ? string { return $this->getFieldTag()->name ?? $this->name; } public function getDefault() : mixed { if (isset($this->default)) { $value = $this->adapter->writableValue($this->default); if (is_string($value) ) { $value = $this->adapter->escapeIdentifier($value, AdapterInterface::IDENTIFIER_VALUE); } return $value; } # Fallback on attribute's default value return $this->getFieldTag()->default ?? ( $this->nullable ? "NULL" : null ) ; } public function isPrimaryKey() : bool { return $this->getFieldTag()->attributes['primary_key'] ?? false; } public function isAutoIncrement() : bool { return $this->getFieldTag()->attributes['auto_increment'] ?? false; } public function isUnique() : bool { return $this->getFieldTag()->attributes['unique'] ?? false; } public function isUnsigned() : bool { return $this->getFieldTag()->attributes['unsigned'] ?? false; } }