2019-08-21 20:13:00 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Ulmus;
|
|
|
|
|
|
|
|
use Generator;
|
|
|
|
|
|
|
|
abstract class Ulmus
|
|
|
|
{
|
|
|
|
public static string $repositoryClass = "\\Ulmus\\Repository";
|
|
|
|
|
|
|
|
public static string $queryBuilderClass = "\\Ulmus\\QueryBuilder";
|
|
|
|
|
2020-02-13 03:56:53 +00:00
|
|
|
public static array $registeredAdapters = [];
|
|
|
|
|
2019-08-21 20:13:00 +00:00
|
|
|
public static ConnectionAdapter $defaultAdapter;
|
2020-02-13 03:56:53 +00:00
|
|
|
|
2020-01-29 21:11:16 +00:00
|
|
|
public static Entity\ObjectInstanciator $objectInstanciator;
|
|
|
|
|
2019-08-21 20:13:00 +00:00
|
|
|
public static array $resolved = [];
|
|
|
|
|
2020-02-13 03:56:53 +00:00
|
|
|
public static function iterateQueryBuilder(QueryBuilder $queryBuilder, ? ConnectionAdapter $adapter = null) : Generator
|
2019-08-21 20:13:00 +00:00
|
|
|
{
|
|
|
|
$sql = $queryBuilder->render();
|
2020-02-17 13:23:41 +00:00
|
|
|
|
|
|
|
$statement = ( $adapter ?: static::$defaultAdapter )->pdo()->select($sql, $queryBuilder->parameters ?? []);
|
2019-08-21 20:13:00 +00:00
|
|
|
|
|
|
|
while ( $row = $statement->fetch() ) {
|
|
|
|
yield $row;
|
|
|
|
}
|
|
|
|
|
|
|
|
$statement->closeCursor();
|
2020-03-29 02:13:29 +00:00
|
|
|
|
2020-02-17 13:23:41 +00:00
|
|
|
$queryBuilder->reset();
|
|
|
|
|
2019-08-21 20:13:00 +00:00
|
|
|
return [
|
|
|
|
'count' => $statement->rowCount(),
|
|
|
|
];
|
|
|
|
}
|
2019-12-19 14:54:33 +00:00
|
|
|
|
2020-05-20 19:34:50 +00:00
|
|
|
public static function datasetQueryBuilder(QueryBuilder $queryBuilder, ? ConnectionAdapter $adapter = null) : array
|
|
|
|
{
|
|
|
|
$rows = [];
|
|
|
|
|
|
|
|
$sql = $queryBuilder->render();
|
|
|
|
|
|
|
|
$statement = ( $adapter ?: static::$defaultAdapter )->pdo()->select($sql, $queryBuilder->parameters ?? []);
|
|
|
|
|
|
|
|
while ( $row = $statement->fetch() ) {
|
|
|
|
$rows[] = $row;
|
|
|
|
}
|
|
|
|
|
|
|
|
$statement->closeCursor();
|
|
|
|
|
|
|
|
$queryBuilder->reset();
|
|
|
|
|
|
|
|
return $rows;
|
|
|
|
}
|
|
|
|
|
2020-02-13 03:56:53 +00:00
|
|
|
public static function pdo(? ConnectionAdapter $adapter = null) : Common\PdoObject
|
2020-02-06 04:41:57 +00:00
|
|
|
{
|
2020-02-17 13:23:41 +00:00
|
|
|
return ( $adapter ?: static::$defaultAdapter )->pdo();
|
2020-02-06 04:41:57 +00:00
|
|
|
}
|
|
|
|
|
2020-04-09 13:50:09 +00:00
|
|
|
public static function runSelectQuery(QueryBuilder $queryBuilder, ? ConnectionAdapter $adapter = null)
|
|
|
|
{
|
2020-04-09 17:20:07 +00:00
|
|
|
$dataset = static::pdo($adapter)->select($queryBuilder->render(), array_merge($queryBuilder->values ?? [], $queryBuilder->parameters ?? []));
|
|
|
|
$queryBuilder->reset();
|
|
|
|
|
|
|
|
return $dataset;
|
2020-04-09 13:50:09 +00:00
|
|
|
}
|
|
|
|
|
2020-02-13 03:56:53 +00:00
|
|
|
public static function runQuery(QueryBuilder $queryBuilder, ? ConnectionAdapter $adapter = null)
|
2020-04-09 13:50:09 +00:00
|
|
|
{
|
2020-04-09 17:20:07 +00:00
|
|
|
$return = static::pdo($adapter)->runQuery($queryBuilder->render(), array_merge($queryBuilder->values ?? [], $queryBuilder->parameters ?? []));
|
|
|
|
$queryBuilder->reset();
|
|
|
|
|
|
|
|
return $return;
|
2019-12-19 14:54:33 +00:00
|
|
|
}
|
2019-08-21 20:13:00 +00:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
2019-12-19 14:54:33 +00:00
|
|
|
|
2020-01-29 21:11:16 +00:00
|
|
|
public static function instanciateObject(string $type, array $arguments) : object
|
|
|
|
{
|
|
|
|
return ( static::$objectInstanciator ?? static::$objectInstanciator = new Entity\ObjectInstanciator() )->instanciate($type, $arguments);
|
|
|
|
}
|
2020-03-29 02:13:29 +00:00
|
|
|
|
2020-02-07 21:36:38 +00:00
|
|
|
public static function convertObject(object $obj)
|
|
|
|
{
|
|
|
|
return ( static::$objectInstanciator ?? static::$objectInstanciator = new Entity\ObjectInstanciator() )->convert($obj);
|
|
|
|
}
|
2020-01-29 21:11:16 +00:00
|
|
|
|
2020-03-29 02:13:29 +00:00
|
|
|
public static function encodeArray(array $array)
|
|
|
|
{
|
|
|
|
return json_encode($array);
|
|
|
|
}
|
|
|
|
|
2020-02-13 03:56:53 +00:00
|
|
|
public static function registerAdapter(ConnectionAdapter $adapter, bool $default = false) : void
|
|
|
|
{
|
|
|
|
if ($default) {
|
|
|
|
static::$defaultAdapter = $adapter;
|
|
|
|
}
|
|
|
|
|
|
|
|
static::$registeredAdapters[$adapter->name] = $adapter;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected static function fetchQueryBuilder(QueryBuilder $queryBuilder, ? ConnectionAdapter $adapter = null) : array
|
2019-12-19 14:54:33 +00:00
|
|
|
{
|
2020-04-09 17:20:07 +00:00
|
|
|
$result = ( $adapter ?: static::$defaultAdapter )->pdo->select($queryBuilder->render(), $queryBuilder->parameters ?? [])->fetchAll();
|
2020-02-17 13:23:41 +00:00
|
|
|
$queryBuilder->reset();
|
|
|
|
|
|
|
|
return $result;
|
2019-12-19 14:54:33 +00:00
|
|
|
}
|
2019-08-21 20:13:00 +00:00
|
|
|
}
|