54 lines
1.5 KiB
PHP
54 lines
1.5 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace Ulmus;
|
||
|
|
||
|
use Generator;
|
||
|
|
||
|
abstract class Ulmus
|
||
|
{
|
||
|
public static string $repositoryClass = "\\Ulmus\\Repository";
|
||
|
|
||
|
public static string $queryBuilderClass = "\\Ulmus\\QueryBuilder";
|
||
|
|
||
|
public static ConnectionAdapter $defaultAdapter;
|
||
|
|
||
|
public static array $resolved = [];
|
||
|
|
||
|
protected static function fetchQueryBuilder(QueryBuilder $queryBuilder, ?ConnectionAdapter $adapter = null) : array
|
||
|
{
|
||
|
$sql = $queryBuilder->render();
|
||
|
return ( $adapter ?: static::$defaultAdapter )->pdo->select($sql, $queryBuilder->parameters ?? [])->fetchAll();
|
||
|
}
|
||
|
|
||
|
public static function iterateQueryBuilder(QueryBuilder $queryBuilder, ?ConnectionAdapter $adapter = null) : Generator
|
||
|
{
|
||
|
$sql = $queryBuilder->render();
|
||
|
$statement = ( $adapter ?: static::$defaultAdapter )->pdo->select($sql, $queryBuilder->parameters ?? []);
|
||
|
|
||
|
while ( $row = $statement->fetch() ) {
|
||
|
yield $row;
|
||
|
}
|
||
|
|
||
|
$statement->closeCursor();
|
||
|
|
||
|
return [
|
||
|
'count' => $statement->rowCount(),
|
||
|
];
|
||
|
}
|
||
|
|
||
|
public static function resolveEntity(string $entityClass) : Common\EntityResolver
|
||
|
{
|
||
|
return static::$resolved[$entityClass] ?? static::$resolved[$entityClass] = new Common\EntityResolver($entityClass);
|
||
|
}
|
||
|
|
||
|
public static function repository(...$arguments) : Repository
|
||
|
{
|
||
|
return new static::$repositoryClass(...$arguments);
|
||
|
}
|
||
|
|
||
|
public static function queryBuilder(...$arguments) : QueryBuilder
|
||
|
{
|
||
|
return new static::$queryBuilderClass(...$arguments);
|
||
|
}
|
||
|
}
|