- Adapter some code to allow more flexibility for the new LDAP adapter from ulmus-ldap. - Insert's fields are now escaped by default. - A new RelationBuilder was added, a lot of code from the EntityTrait was moved into this. Some code from the Repository class will need to be moved there too.
129 lines
4.1 KiB
PHP
129 lines
4.1 KiB
PHP
<?php
|
|
|
|
namespace Ulmus;
|
|
|
|
use Generator;
|
|
|
|
abstract class Ulmus
|
|
{
|
|
public static string $repositoryClass = "\\Ulmus\\Repository";
|
|
|
|
public static string $queryBuilderClass = "\\Ulmus\\QueryBuilder";
|
|
|
|
public static array $registeredAdapters = [];
|
|
|
|
public static ConnectionAdapter $defaultAdapter;
|
|
|
|
public static Entity\ObjectInstanciator $objectInstanciator;
|
|
|
|
public static array $resolved = [];
|
|
|
|
public static function iterateQueryBuilder(Query\QueryBuilderInterface $queryBuilder, ? ConnectionAdapter $adapter = null) : Generator
|
|
{
|
|
$rendered = $queryBuilder->render();
|
|
|
|
$statement = ( $adapter ?: static::$defaultAdapter )->connector()->select($rendered, $queryBuilder->parameters ?? []);
|
|
|
|
$i = 0;
|
|
|
|
while ( $row = $statement->fetch() ) {
|
|
yield $row;
|
|
}
|
|
|
|
$statement->closeCursor();
|
|
|
|
$queryBuilder->reset();
|
|
|
|
return [
|
|
'count' => $statement->rowCount(),
|
|
];
|
|
}
|
|
|
|
public static function datasetQueryBuilder(Query\QueryBuilderInterface $queryBuilder, ? ConnectionAdapter $adapter = null) : array
|
|
{
|
|
$rows = [];
|
|
|
|
$rendered = $queryBuilder->render();
|
|
|
|
$statement = ( $adapter ?: static::$defaultAdapter )->connector()->select($rendered, $queryBuilder->parameters ?? []);
|
|
|
|
while ( $row = $statement->fetch() ) {
|
|
$rows[] = $row;
|
|
}
|
|
|
|
$statement->closeCursor();
|
|
|
|
$queryBuilder->reset();
|
|
|
|
return $rows;
|
|
}
|
|
|
|
public static function connector(? ConnectionAdapter $adapter = null) : object
|
|
{
|
|
return ( $adapter ?: static::$defaultAdapter )->connector();
|
|
}
|
|
|
|
public static function runSelectQuery(Query\QueryBuilderInterface $queryBuilder, ? ConnectionAdapter $adapter = null)
|
|
{
|
|
$dataset = static::connector($adapter)->select($queryBuilder->render(), array_merge($queryBuilder->values ?? [], $queryBuilder->parameters ?? []));
|
|
$queryBuilder->reset();
|
|
|
|
return $dataset;
|
|
}
|
|
|
|
public static function runQuery(Query\QueryBuilderInterface $queryBuilder, ? ConnectionAdapter $adapter = null)
|
|
{
|
|
$return = static::connector($adapter)->runQuery($queryBuilder->render(), array_merge($queryBuilder->values ?? [], $queryBuilder->parameters ?? []));
|
|
$queryBuilder->reset();
|
|
|
|
return $return;
|
|
}
|
|
|
|
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) : Query\QueryBuilderInterface
|
|
{
|
|
return new static::$queryBuilderClass(...$arguments);
|
|
}
|
|
|
|
public static function instanciateObject(string $type, array $arguments) : object
|
|
{
|
|
return ( static::$objectInstanciator ?? static::$objectInstanciator = new Entity\ObjectInstanciator() )->instanciate($type, $arguments);
|
|
}
|
|
|
|
public static function convertObject(object $obj)
|
|
{
|
|
return ( static::$objectInstanciator ?? static::$objectInstanciator = new Entity\ObjectInstanciator() )->convert($obj);
|
|
}
|
|
|
|
public static function encodeArray(array $array)
|
|
{
|
|
return json_encode($array);
|
|
}
|
|
|
|
public static function registerAdapter(ConnectionAdapter $adapter, bool $default = false) : void
|
|
{
|
|
if ($default) {
|
|
static::$defaultAdapter = $adapter;
|
|
}
|
|
|
|
static::$registeredAdapters[$adapter->name] = $adapter;
|
|
}
|
|
|
|
protected static function fetchQueryBuilder(Query\QueryBuilderInterface $queryBuilder, ? ConnectionAdapter $adapter = null) : array
|
|
{
|
|
$result = ( $adapter ?: static::$defaultAdapter )->connector->select($queryBuilder->render(), $queryBuilder->parameters ?? [])->fetchAll();
|
|
$queryBuilder->reset();
|
|
|
|
return $result;
|
|
}
|
|
}
|