- Bugfixes made while working on lean/console database migrations

This commit is contained in:
Dave Mc Nicoll 2023-08-31 09:15:50 -04:00
parent 8489cb4841
commit cc741566fb
6 changed files with 39 additions and 78 deletions

View File

@ -2,7 +2,12 @@
namespace Ulmus\Adapter;
use Ulmus\{ConnectionAdapter, Entity\InformationSchema\Table, Migration\FieldDefinition, Repository, QueryBuilder};
use Ulmus\{ConnectionAdapter,
Entity\InformationSchema\Table,
Migration\FieldDefinition,
Repository,
QueryBuilder,
Ulmus};
trait DefaultAdapterTrait
{
@ -103,8 +108,8 @@ trait DefaultAdapterTrait
public function generateAlterColumn(FieldDefinition $definition, array $field) : string|\Stringable
{
if ($field['previous']) {
$position = sprintf('AFTER %s', $this->escapeIdentifier($field['previous']['field'], AdapterInterface::IDENTIFIER_FIELD));
if (! empty($field['previous']) ) {
$position = sprintf('AFTER %s', $this->escapeIdentifier($field['previous']->field, AdapterInterface::IDENTIFIER_FIELD));
}
else {
$position = "FIRST";
@ -118,4 +123,28 @@ trait DefaultAdapterTrait
$position,
]);
}
public function writableValue(mixed $value) : mixed
{
switch (true) {
case $value instanceof \UnitEnum:
return Ulmus::convertEnum($value);
case is_object($value):
return Ulmus::convertObject($value);
case is_array($value):
return json_encode($value);
case is_bool($value):
return (int) $value;
}
return $value;
}
public function splitAlterQuery() : bool
{
return false;
}
}

View File

@ -218,26 +218,6 @@ class MsSQL implements AdapterInterface {
}
}
public function writableValue(mixed $value) /*: mixed*/
{
switch (true) {
case $value instanceof \UnitEnum:
return Ulmus::convertEnum($value);
case is_object($value):
return Ulmus::convertObject($value);
case is_array($value):
return json_encode($value);
case is_bool($value):
return (int) $value;
}
return $value;
}
public function defaultEngine(): ? string
{
return null;
@ -252,9 +232,4 @@ class MsSQL implements AdapterInterface {
{
return QueryBuilder\MssqlQueryBuilder::class;
}
public function splitAlterQuery() : bool
{
return false;
}
}

View File

@ -152,32 +152,8 @@ class MySQL implements AdapterInterface {
}
}
public function writableValue(mixed $value) : mixed
{
switch (true) {
case $value instanceof \UnitEnum:
return Ulmus::convertEnum($value);
case is_object($value):
return Ulmus::convertObject($value);
case is_array($value):
return json_encode($value);
case is_bool($value):
return (int) $value;
}
return $value;
}
public function defaultEngine(): ? string
{
return "InnoDB";
}
public function splitAlterQuery() : bool
{
return false;
}
}

View File

@ -137,25 +137,6 @@ class SQLite implements AdapterInterface {
return $typeOnly ? $type : $type . ( $length ? "($length" . ( isset($precision) ? ",$precision" : "" ) . ")" : "" );
}
public function writableValue(mixed $value) /*: mixed*/
{
switch (true) {
case $value instanceof \UnitEnum:
return Ulmus::convertEnum($value);
case is_object($value):
return Ulmus::convertObject($value);
case is_array($value):
return json_encode($value);
case is_bool($value):
return (int) $value;
}
return $value;
}
public function tableSyntax() : array
{
return [

View File

@ -83,6 +83,6 @@ class Table
public ? string $temporary;
#[Relation(type: "oneToMany", key: "name", foreignKey: [ Column::class, 'tableName' ], entity: Column::class)]
#[Where('TABLE_SCHEMA', [ Column::class, 'tableSchema' ])]
#[Where('TABLE_SCHEMA', fieldValue: [ Column::class, 'tableSchema' ])]
public EntityCollection $columns;
}

View File

@ -90,14 +90,14 @@ class FieldDefinition {
public function getDefault() : mixed
{
if ( isset($this->default) ) {
if (is_bool($this->default)) {
return (int) $this->default;
if (isset($this->default)) {
$value = $this->adapter->writableValue($this->default);
if (is_string($value) ) {
$value = $this->adapter->escapeIdentifier($value, AdapterInterface::IDENTIFIER_VALUE);
}
# Specific default cases here ..
return $this->default;
return $value;
}
# Fallback on attribute's default value