render(); $statement = ( $adapter ?: static::$defaultAdapter )->pdo()->select($sql, $queryBuilder->parameters ?? []); while ( $row = $statement->fetch() ) { yield $row; } $statement->closeCursor(); $queryBuilder->reset(); return [ 'count' => $statement->rowCount(), ]; } 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; } public static function pdo(? ConnectionAdapter $adapter = null) : Common\PdoObject { return ( $adapter ?: static::$defaultAdapter )->pdo(); } public static function runSelectQuery(QueryBuilder $queryBuilder, ? ConnectionAdapter $adapter = null) { $dataset = static::pdo($adapter)->select($queryBuilder->render(), array_merge($queryBuilder->values ?? [], $queryBuilder->parameters ?? [])); $queryBuilder->reset(); return $dataset; } public static function runQuery(QueryBuilder $queryBuilder, ? ConnectionAdapter $adapter = null) { $return = static::pdo($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) : QueryBuilder { 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(QueryBuilder $queryBuilder, ? ConnectionAdapter $adapter = null) : array { $result = ( $adapter ?: static::$defaultAdapter )->pdo->select($queryBuilder->render(), $queryBuilder->parameters ?? [])->fetchAll(); $queryBuilder->reset(); return $result; } }