- WIp on Migration for mssql

This commit is contained in:
Dave Mc Nicoll 2025-05-26 18:21:37 +00:00
parent fb4985160a
commit c719e4a6d1
4 changed files with 33 additions and 6 deletions

View File

@ -2,11 +2,23 @@
namespace Ulmus\Entity\Mssql; namespace Ulmus\Entity\Mssql;
use Ulmus\Attribute\Obj\Table as TableObj;
use Ulmus\Attribute\Property\Field; use Ulmus\Attribute\Property\Field;
use Ulmus\ConnectionAdapter;
use Ulmus\Entity\Mysql\id; use Ulmus\Entity\Mysql\id;
use Ulmus\Repository;
use Ulmus\Ulmus;
#[TableObj(name: "columns", schema: "information_schema")]
class Column extends \Ulmus\Entity\InformationSchema\Column class Column extends \Ulmus\Entity\InformationSchema\Column
{ {
/*
public static function repository(string $alias = Repository::DEFAULT_ALIAS, ConnectionAdapter $adapter = null): Repository
{
$adapter = Ulmus::$registeredAdapters[$this->loadedFromAdapter];
return Ulmus::repository(static::class, $alias, $adapter);
}*/
# TODO ! Handle FUNCTIONAL default value # TODO ! Handle FUNCTIONAL default value
protected function canHaveDefaultValue(): bool protected function canHaveDefaultValue(): bool

View File

@ -5,13 +5,22 @@ namespace Ulmus\Entity\Mssql;
use Ulmus\EntityCollection, use Ulmus\EntityCollection,
Ulmus\Entity\Field\Datetime; Ulmus\Entity\Field\Datetime;
use Ulmus\{Attribute\Obj\Table as TableObj,}; use Ulmus\{Attribute\Obj\Table as TableObj, Ulmus};
use Ulmus\Attribute\Property\{Field, Filter, FilterJoin, Relation, Join, Virtual, Where}; use Ulmus\Attribute\Property\{Field, Filter, FilterJoin, Relation, Join, Virtual, Where};
use Ulmus\Repository;
#[TableObj(name: "tables", database: "information_schema")] #[TableObj(name: "tables", schema: "information_schema")]
class Table extends \Ulmus\Entity\InformationSchema\Table class Table extends \Ulmus\Entity\InformationSchema\Table
{ {
#[Relation(type: "oneToMany", key: "name", foreignKey: [ Column::class, 'tableName' ], entity: Column::class)] #[Relation(type: "oneToMany", key: "name", foreignKey: [ Column::class, 'tableName' ], entity: Column::class)]
#[Where('TABLE_SCHEMA', generateValue: [ Table::class, 'getSchema' ])] #[Where('TABLE_SCHEMA', generateValue: [ Table::class, 'getSchema' ])]
##[Filter(method: "filterColumns")]
public EntityCollection $columns; public EntityCollection $columns;
public function filterColumns() : Repository
{
$adapter = Ulmus::$registeredAdapters[$this->loadedFromAdapter];
return Column::repository(Repository\MssqlRepository::DEFAULT_ALIAS, $adapter);
}
} }

View File

@ -6,6 +6,7 @@ use Ulmus\Attribute\Property\{
Field, OrderBy, Where, Having, Relation, Filter, Join, FilterJoin, WithJoin Field, OrderBy, Where, Having, Relation, Filter, Join, FilterJoin, WithJoin
}; };
use Psr\SimpleCache\CacheInterface; use Psr\SimpleCache\CacheInterface;
use Ulmus\Adapter\AdapterInterface;
use Ulmus\Common\EntityResolver; use Ulmus\Common\EntityResolver;
use Ulmus\Entity\EntityInterface; use Ulmus\Entity\EntityInterface;
use Ulmus\Repository\RepositoryInterface; use Ulmus\Repository\RepositoryInterface;
@ -25,7 +26,7 @@ class Repository implements RepositoryInterface
public ? ConnectionAdapter $adapters; public ? ConnectionAdapter $adapters;
public readonly QueryBuilder\QueryBuilderInterface $queryBuilder; public QueryBuilder\QueryBuilderInterface $queryBuilder;
protected EntityResolver $entityResolver; protected EntityResolver $entityResolver;
@ -36,6 +37,11 @@ class Repository implements RepositoryInterface
$this->alias = $alias; $this->alias = $alias;
$this->entityResolver = Ulmus::resolveEntity($entity); $this->entityResolver = Ulmus::resolveEntity($entity);
$this->setAdapter($adapter);
}
public function setAdapter(? ConnectionAdapter $adapter = null) : void {
if ($adapter) { if ($adapter) {
$this->adapter = $adapter; $this->adapter = $adapter;

View File

@ -264,7 +264,7 @@ class RelationBuilder
{ {
$relation->entity ??= $this->resolver->reflectedClass->getProperties()[$name]->getTypes()[0]->type; $relation->entity ??= $this->resolver->reflectedClass->getProperties()[$name]->getTypes()[0]->type;
$this->repository = $relation->entity::repository(); $this->repository ??= $relation->entity::repository();
$this->applyWhere(); $this->applyWhere();
@ -282,7 +282,7 @@ class RelationBuilder
if (isset($value)) { if (isset($value)) {
#$this->repository->where( is_object($relation->foreignKey) ? $relation->foreignKey : $relation->entity::field($relation->foreignKey), $value ); #$this->repository->where( is_object($relation->foreignKey) ? $relation->foreignKey : $relation->entity::field($relation->foreignKey), $value );
$this->repository->where( $relation->foreignKey($this->repository), $value ); $this->repository->where($relation->foreignKey($this->repository), $value);
} }
else { else {
$this->repository->where(Sql::raw('TRUE'), Sql::raw('FALSE')); $this->repository->where(Sql::raw('TRUE'), Sql::raw('FALSE'));
@ -296,7 +296,7 @@ class RelationBuilder
{ {
extract($this->relationAnnotations($name, $relation)); extract($this->relationAnnotations($name, $relation));
$this->repository = $relationRelation->entity::repository(); $this->repository ??= $relationRelation->entity::repository();
$bridgeAlias = $relation->bridgeField ?? uniqid("bridge_"); $bridgeAlias = $relation->bridgeField ?? uniqid("bridge_");