Compare commits
No commits in common. "fa4e686f3535acac54e89d7907635250c4a9d525" and "d4d68a029d3d50eb752b44adcb22f84ab1eb4266" have entirely different histories.
fa4e686f35
...
d4d68a029d
@ -4,7 +4,7 @@ namespace Ulmus\Entity\Sqlite;
|
|||||||
|
|
||||||
use Ulmus\EntityCollection;
|
use Ulmus\EntityCollection;
|
||||||
use Ulmus\Query\{From, Select};
|
use Ulmus\Query\{From, Select};
|
||||||
use Ulmus\{Attribute\Obj\Table, Repository, Ulmus};
|
use Ulmus\{Attribute\Obj\Table, Repository};
|
||||||
use Ulmus\Attribute\Property\{Field, Filter, FilterJoin, Relation, Join, Virtual, Where};
|
use Ulmus\Attribute\Property\{Field, Filter, FilterJoin, Relation, Join, Virtual, Where};
|
||||||
|
|
||||||
#[Table(name: "sqlite_master")]
|
#[Table(name: "sqlite_master")]
|
||||||
@ -27,14 +27,12 @@ class Schema
|
|||||||
#[Field]
|
#[Field]
|
||||||
public ? string $sql;
|
public ? string $sql;
|
||||||
|
|
||||||
|
##[Relation("oneToMany", key: "tableName", foreignKey: "tableName", entity: Column::class)]
|
||||||
#[Virtual(method: "filterColumns")]
|
#[Virtual(method: "filterColumns")]
|
||||||
public EntityCollection $columns;
|
public EntityCollection $columns;
|
||||||
|
|
||||||
public function filterColumns() : EntityCollection
|
public function filterColumns() : EntityCollection
|
||||||
{
|
{
|
||||||
$adapter = Ulmus::$registeredAdapters[$this->loadedFromAdapter];
|
return ( new Repository\SqliteRepository(Column::class) )->pragma('table_info', $this->tableName)->collectionFromQuery();
|
||||||
|
|
||||||
return Column::repository(Repository\SqliteRepository::DEFAULT_ALIAS, $adapter)
|
|
||||||
->pragma('table_info', $this->tableName)->collectionFromQuery();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,7 +3,6 @@
|
|||||||
namespace Ulmus\Entity\Sqlite;
|
namespace Ulmus\Entity\Sqlite;
|
||||||
|
|
||||||
use Ulmus\ConnectionAdapter;
|
use Ulmus\ConnectionAdapter;
|
||||||
use Ulmus\EntityCollection;
|
|
||||||
use Ulmus\Repository;
|
use Ulmus\Repository;
|
||||||
|
|
||||||
#[\Ulmus\Attribute\Obj\Table(name: "sqlite_master")]
|
#[\Ulmus\Attribute\Obj\Table(name: "sqlite_master")]
|
||||||
@ -11,16 +10,12 @@ class Table extends Schema
|
|||||||
{
|
{
|
||||||
public static function repository(string $alias = Repository::DEFAULT_ALIAS, ConnectionAdapter $adapter = null): Repository
|
public static function repository(string $alias = Repository::DEFAULT_ALIAS, ConnectionAdapter $adapter = null): Repository
|
||||||
{
|
{
|
||||||
$repository = new class(static::class, $alias, $adapter) extends Repository\SqliteRepository
|
return new class(static::class, $alias, $adapter) extends Repository\SqliteRepository
|
||||||
{
|
{
|
||||||
public function finalizeQuery(): void
|
public function finalizeQuery(): void
|
||||||
{
|
{
|
||||||
$this->select(Table::field('tableName'))->groupBy(Table::field('tableName'));
|
$this->select(Table::field('tableName'))->groupBy(Table::field('tableName'));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$repository->entityClass = static::class;
|
|
||||||
|
|
||||||
return $repository;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -14,9 +14,6 @@ use Ulmus\{Common\EntityResolver,
|
|||||||
trait EntityTrait {
|
trait EntityTrait {
|
||||||
use EventTrait;
|
use EventTrait;
|
||||||
|
|
||||||
#[Ignore]
|
|
||||||
public string $loadedFromAdapter;
|
|
||||||
|
|
||||||
#[Ignore]
|
#[Ignore]
|
||||||
protected bool $entityStrictFieldsDeclaration = false;
|
protected bool $entityStrictFieldsDeclaration = false;
|
||||||
|
|
||||||
@ -327,6 +324,7 @@ trait EntityTrait {
|
|||||||
#[Ignore]
|
#[Ignore]
|
||||||
public static function field($name, null|string|false $alias = Repository::DEFAULT_ALIAS) : EntityField
|
public static function field($name, null|string|false $alias = Repository::DEFAULT_ALIAS) : EntityField
|
||||||
{
|
{
|
||||||
|
|
||||||
$default = ( $alias === false ? '' : Repository::DEFAULT_ALIAS ); # bw compatibility, to be deprecated
|
$default = ( $alias === false ? '' : Repository::DEFAULT_ALIAS ); # bw compatibility, to be deprecated
|
||||||
|
|
||||||
return new EntityField(static::class, $name, $alias ? Ulmus::repository(static::class)->adapter->adapter()->escapeIdentifier($alias, Adapter\AdapterInterface::IDENTIFIER_FIELD) : $default, Ulmus::resolveEntity(static::class));
|
return new EntityField(static::class, $name, $alias ? Ulmus::repository(static::class)->adapter->adapter()->escapeIdentifier($alias, Adapter\AdapterInterface::IDENTIFIER_FIELD) : $default, Ulmus::resolveEntity(static::class));
|
||||||
|
@ -374,12 +374,14 @@ class Repository
|
|||||||
|
|
||||||
public function yield() : \Generator
|
public function yield() : \Generator
|
||||||
{
|
{
|
||||||
|
$class = $this->entityClass;
|
||||||
|
|
||||||
$this->selectSqlQuery();
|
$this->selectSqlQuery();
|
||||||
|
|
||||||
$this->finalizeQuery();
|
$this->finalizeQuery();
|
||||||
|
|
||||||
foreach(Ulmus::iterateQueryBuilder($this->queryBuilder, $this->adapter) as $entityData) {
|
foreach(Ulmus::iterateQueryBuilder($this->queryBuilder, $this->adapter) as $entityData) {
|
||||||
yield $this->instanciateEntity()->entityFillFromDataset($entityData);
|
yield ( new $class() )->entityFillFromDataset($entityData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -698,7 +700,7 @@ class Repository
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ! in_array(WithOptionEnum::SkipJoinFilter, $options) ) {
|
if ( ! in_array(WithOptionEnum::SkipJoinFilter, $options) ) {
|
||||||
foreach ($this->entityResolver->searchFieldAnnotationList($item, [Attribute\Property\FilterJoin::class, FilterJoin::class]) as $filter) {
|
foreach ($this->entityResolver->searchFieldAnnotationList($item, [Attribute\Property\FilterJoin::class, FilterJoin::class]) as $filter) {
|
||||||
call_user_func_array([$this->entityClass, $filter->method], [$join, $item, true]);
|
call_user_func_array([$this->entityClass, $filter->method], [$join, $item, true]);
|
||||||
}
|
}
|
||||||
@ -862,17 +864,14 @@ class Repository
|
|||||||
|
|
||||||
public function collectionFromQuery(? string $entityClass = null) : EntityCollection
|
public function collectionFromQuery(? string $entityClass = null) : EntityCollection
|
||||||
{
|
{
|
||||||
$entityClass ??= $this->entityClass;
|
$class = $entityClass ?? $this->entityClass;
|
||||||
|
|
||||||
$entityCollection = $entityClass::entityCollection();
|
$entityCollection = $class::entityCollection();
|
||||||
|
|
||||||
$this->finalizeQuery();
|
$this->finalizeQuery();
|
||||||
|
|
||||||
foreach(Ulmus::iterateQueryBuilder($this->queryBuilder, $this->adapter) as $entityData) {
|
foreach(Ulmus::iterateQueryBuilder($this->queryBuilder, $this->adapter) as $entityData) {
|
||||||
$entity = $this->instanciateEntity($entityClass);
|
$entityCollection->append( ( new $class() )->resetVirtualProperties()->entityFillFromDataset($entityData) );
|
||||||
$entity->loadedFromAdapter = $this->adapter->name;
|
|
||||||
|
|
||||||
$entityCollection->append( $entity->resetVirtualProperties()->entityFillFromDataset($entityData) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->eventExecute(Event\Repository\CollectionFromQueryInterface::class, $entityCollection);
|
$this->eventExecute(Event\Repository\CollectionFromQueryInterface::class, $entityCollection);
|
||||||
@ -1045,11 +1044,9 @@ class Repository
|
|||||||
return $this->entityClass::entityCollection(...$arguments);
|
return $this->entityClass::entityCollection(...$arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function instanciateEntity(? string $entityClass = null) : object
|
public function instanciateEntity() : object
|
||||||
{
|
{
|
||||||
$entityClass ??= $this->entityClass;
|
return new $this->entityClass();
|
||||||
|
|
||||||
return new $entityClass;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function hasFilters() : bool
|
public function hasFilters() : bool
|
||||||
@ -1058,7 +1055,7 @@ class Repository
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected function matchEntity(object $entity) {
|
protected function matchEntity(object $entity) {
|
||||||
return $entity::class === $this->entityClass;
|
return get_class($entity) === $this->entityClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function finalizeQuery() : void {}
|
protected function finalizeQuery() : void {}
|
||||||
|
@ -89,7 +89,7 @@ class RelationBuilder
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(\Throwable $e) {
|
catch(\Throwable $e) {
|
||||||
throw new $e(sprintf("An error occurred while calling method from your #[Virtual] attribute in entity '%s::%s'. Caught '%s'", $this->entity::class, $name, $e->getMessage() ));
|
throw new $e(sprintf("An error occurred while calling method from your #[Virtual] attribute in entity '%s::%s'.", $this->entity::class, $name ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user