- Worked on support for multiple adapters based on @Table() annotation's entity
This commit is contained in:
parent
d01e99b18f
commit
79fdabe786
|
@ -8,6 +8,8 @@ class Table implements \Ulmus\Annotation\Annotation {
|
|||
|
||||
public string $schema;
|
||||
|
||||
public string $adapter;
|
||||
|
||||
public function __construct($name = null)
|
||||
{
|
||||
if ( $name !== null ) {
|
||||
|
|
|
@ -136,6 +136,23 @@ class EntityResolver {
|
|||
return $table->name;
|
||||
}
|
||||
|
||||
public function databaseAdapter() : ? \Ulmus\ConnectionAdapter
|
||||
{
|
||||
if ( null !== $table = $this->getAnnotationFromClassname( Table::class ) ) {
|
||||
if ( $table->adapter ?? null ) {
|
||||
if ( null === ( $adapter = \Ulmus\Ulmus::$registeredAdapters[$table->adapter] ?? null ) ) {
|
||||
throw new \Exception("Requested database adapter ( {$table->adapter} ) is not registered.");
|
||||
}
|
||||
else {
|
||||
return $adapter;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public function schemaName() : ? string
|
||||
{
|
||||
if ( null === $table = $this->getAnnotationFromClassname( Table::class ) ) {
|
||||
|
@ -150,10 +167,10 @@ class EntityResolver {
|
|||
}
|
||||
|
||||
public function getPrimaryKeyField() : ? array
|
||||
{
|
||||
{
|
||||
foreach($this->fieldList() as $key => $value) {
|
||||
if ( null !== ( $field = $this->searchFieldAnnotation($key, new Field() ) ) ) {
|
||||
if (false !== $field->attributes['primary_key'] ?? false ) {
|
||||
if ( false !== ( $field->attributes['primary_key'] ?? false ) ) {
|
||||
return [ $key => $field ];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,15 +16,13 @@ class ConnectionAdapter
|
|||
|
||||
public PdoObject $pdo;
|
||||
|
||||
public function __construct(string $name = "default", array $configuration = [])
|
||||
public function __construct(string $name = "default", array $configuration = [], bool $default = false)
|
||||
{
|
||||
$this->name = $name;
|
||||
|
||||
$this->configuration = $configuration;
|
||||
|
||||
if ( $name === "default" ) {
|
||||
Ulmus::$defaultAdapter = $this;
|
||||
}
|
||||
Ulmus::registerAdapter($this, $default);
|
||||
}
|
||||
|
||||
public function resolveConfiguration() : void
|
||||
|
|
|
@ -204,7 +204,7 @@ trait EntityTrait {
|
|||
*/
|
||||
public static function repository(string $alias = Repository::DEFAULT_ALIAS) : Repository
|
||||
{
|
||||
return Ulmus::repository(static::class, $alias, Ulmus::$defaultAdapter);
|
||||
return Ulmus::repository(static::class, $alias);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -117,7 +117,7 @@ class QueryBuilder
|
|||
public function from(string $table, ? string $alias = null, ? string $database = null, ? string $schema = null) : self
|
||||
{
|
||||
if ( $database ) {
|
||||
$table = "\"$database\".$table";
|
||||
$table = "$database.$table";
|
||||
}
|
||||
|
||||
if ( $schema ) {
|
||||
|
|
|
@ -21,9 +21,9 @@ class Repository
|
|||
public function __construct(string $entity, string $alias = self::DEFAULT_ALIAS, ConnectionAdapter $adapter = null) {
|
||||
$this->entityClass = $entity;
|
||||
$this->alias = $alias;
|
||||
$this->adapter = $adapter ?: Ulmus::$defaultAdapter;
|
||||
$this->queryBuilder = new QueryBuilder( $this->adapter->adapter() );
|
||||
$this->entityResolver = Ulmus::resolveEntity($entity);
|
||||
$this->adapter = $adapter ?? $this->entityResolver->databaseAdapter() ?? Ulmus::$defaultAdapter;
|
||||
$this->queryBuilder = new QueryBuilder( $this->adapter->adapter() );
|
||||
}
|
||||
|
||||
public function loadOne() : ? object
|
||||
|
@ -52,7 +52,7 @@ class Repository
|
|||
|
||||
$this->finalizeQuery();
|
||||
|
||||
foreach(Ulmus::iterateQueryBuilder($this->queryBuilder) as $entityData) {
|
||||
foreach(Ulmus::iterateQueryBuilder($this->queryBuilder, $this->adapter) as $entityData) {
|
||||
return $entityData['totalItem'];
|
||||
}
|
||||
|
||||
|
@ -106,8 +106,6 @@ class Repository
|
|||
|
||||
$diff = array_diff_assoc($dataset, $entity->entityGetDataset(true));
|
||||
|
||||
var_dump( "<pre>", $diff, $dataset, $entity->entityGetDataset(true) );
|
||||
|
||||
if ( [] !== $diff ) {
|
||||
$update = $this->updateSqlQuery($diff)->runQuery();
|
||||
|
||||
|
@ -174,7 +172,7 @@ class Repository
|
|||
|
||||
public function from(string $table, ? string $alias, ? string $schema) : self
|
||||
{
|
||||
$this->queryBuilder->from($table, $alias, null, $schema);
|
||||
$this->queryBuilder->from($table, $alias, $this->adapter->adapter()->database, $schema);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
@ -365,7 +363,7 @@ class Repository
|
|||
|
||||
$this->finalizeQuery();
|
||||
|
||||
foreach(Ulmus::iterateQueryBuilder($this->queryBuilder) as $entityData) {
|
||||
foreach(Ulmus::iterateQueryBuilder($this->queryBuilder, $this->adapter) as $entityData) {
|
||||
$entityCollection->append( ( new $class() )->entityFillFromDataset($entityData) );
|
||||
}
|
||||
|
||||
|
@ -376,7 +374,7 @@ class Repository
|
|||
{
|
||||
$this->finalizeQuery();
|
||||
|
||||
return Ulmus::runQuery($this->queryBuilder);
|
||||
return Ulmus::runQuery($this->queryBuilder, $this->adapter);
|
||||
}
|
||||
|
||||
protected function insertSqlQuery(array $dataset) : self
|
||||
|
|
|
@ -10,13 +10,15 @@ abstract class Ulmus
|
|||
|
||||
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(QueryBuilder $queryBuilder, ?ConnectionAdapter $adapter = null) : Generator
|
||||
public static function iterateQueryBuilder(QueryBuilder $queryBuilder, ? ConnectionAdapter $adapter = null) : Generator
|
||||
{
|
||||
$sql = $queryBuilder->render();
|
||||
$statement = ( $adapter ?: static::$defaultAdapter )->pdo->select($sql, $queryBuilder->parameters ?? []);
|
||||
|
@ -32,12 +34,12 @@ abstract class Ulmus
|
|||
];
|
||||
}
|
||||
|
||||
public static function pdo(?ConnectionAdapter $adapter = null) : Common\PdoObject
|
||||
public static function pdo(? ConnectionAdapter $adapter = null) : Common\PdoObject
|
||||
{
|
||||
return ( $adapter ?: static::$defaultAdapter )->pdo;
|
||||
}
|
||||
|
||||
public static function runQuery(QueryBuilder $queryBuilder, ?ConnectionAdapter $adapter = null)
|
||||
public static function runQuery(QueryBuilder $queryBuilder, ? ConnectionAdapter $adapter = null)
|
||||
{
|
||||
return static::pdo($adapter)->runQuery($queryBuilder->render(), array_merge($queryBuilder->values ?? [], $queryBuilder->parameters ?? []));
|
||||
}
|
||||
|
@ -67,7 +69,16 @@ abstract class Ulmus
|
|||
return ( static::$objectInstanciator ?? static::$objectInstanciator = new Entity\ObjectInstanciator() )->convert($obj);
|
||||
}
|
||||
|
||||
protected static function fetchQueryBuilder(QueryBuilder $queryBuilder, ?ConnectionAdapter $adapter = null) : 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
|
||||
{
|
||||
return ( $adapter ?: static::$defaultAdapter )->pdo->select($queryBuilder->render(), $queryBuilder->parameters ?? [])->fetchAll();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue