- Merged stash after pull
This commit is contained in:
1 parent
114fa5be09
commit
efa957fe58
20 files changed
+623
-436
No files matched your search
+46
-14
@@ -26,7 +26,7 @@ class Repository
|
||||
$this->entityClass = $entity;
|
||||
$this->alias = $alias;
|
||||
$this->entityResolver = Ulmus::resolveEntity($entity);
|
||||
$this->adapter = $adapter ?? $this->entityResolver->databaseAdapter() ?? Ulmus::$defaultAdapter;
|
||||
$this->adapter = $adapter ?? $this->entityResolver->databaseAdapter();
|
||||
$this->queryBuilder = new QueryBuilder();
|
||||
}
|
||||
|
||||
@@ -134,8 +134,9 @@ class Repository
|
||||
if ( ! $entity->isLoaded() ) {
|
||||
$statement = $this->insertSqlQuery($dataset)->runQuery();
|
||||
|
||||
if ( ( 0 !== $statement->lastInsertId ) &&
|
||||
( null !== $primaryKeyDefinition )) {
|
||||
if ( ( 0 !== $statement->lastInsertId ) &&
|
||||
( null !== $primaryKeyDefinition )) {
|
||||
|
||||
$pkField = key($primaryKeyDefinition);
|
||||
$entity->$pkField = $statement->lastInsertId;
|
||||
}
|
||||
@@ -172,7 +173,7 @@ class Repository
|
||||
{
|
||||
$schema = $schema ?: $this->entityResolver->schemaName();
|
||||
|
||||
$this->queryBuilder->truncate($this->escapeTable($table ?: $this->entityResolver->tableName()), $alias ?: $this->alias, $this->escapeDatabase($this->adapter->adapter()->database), $schema ? $this->escapeSchema($schema) : null);
|
||||
$this->queryBuilder->truncate($this->escapeTable($table ?: $this->entityResolver->tableName()), $alias ?: $this->alias, $this->escapedDatabase(), $schema ? $this->escapeSchema($schema) : null);
|
||||
|
||||
$this->finalizeQuery();
|
||||
|
||||
@@ -181,6 +182,11 @@ class Repository
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function createTable()
|
||||
{
|
||||
return $this->createSqlQuery()->runQuery();
|
||||
}
|
||||
|
||||
public function generateDatasetDiff(object $entity) : array
|
||||
{
|
||||
return array_diff_assoc( array_change_key_case($entity->toArray()), array_change_key_case($entity->entityGetDataset(false, true)) );
|
||||
@@ -208,7 +214,7 @@ class Repository
|
||||
|
||||
public function insert(array $fieldlist, string $table, string $alias, ? string $schema) : self
|
||||
{
|
||||
$this->queryBuilder->insert($fieldlist, $this->escapeTable($table), $alias, $schema);
|
||||
$this->queryBuilder->insert($fieldlist, $this->escapeTable($table), $alias, $this->escapedDatabase(), $schema);
|
||||
|
||||
return $this;
|
||||
}
|
||||
@@ -222,7 +228,7 @@ class Repository
|
||||
|
||||
public function update(string $table, string $alias, ? string $schema) : self
|
||||
{
|
||||
$this->queryBuilder->update($this->escapeTable($table), $alias, $schema);
|
||||
$this->queryBuilder->update($this->escapeTable($table), $alias, $this->escapedDatabase(), $schema);
|
||||
|
||||
return $this;
|
||||
}
|
||||
@@ -243,8 +249,7 @@ class Repository
|
||||
|
||||
public function from(string $table, ? string $alias, ? string $schema) : self
|
||||
{
|
||||
$this->queryBuilder->from($this->escapeTable($table), $alias, $this->escapeDatabase($this->adapter->adapter()->database), $schema ? $this->escapeSchema($schema) : null);
|
||||
|
||||
$this->queryBuilder->from($this->escapeTable($table), $alias, $this->escapedDatabase(), $schema ? $this->escapeSchema($schema) : null);
|
||||
return $this;
|
||||
}
|
||||
|
||||
@@ -322,7 +327,6 @@ class Repository
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
public function limit(int $value) : self
|
||||
{
|
||||
$this->queryBuilder->limit($value);
|
||||
@@ -337,7 +341,6 @@ class Repository
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/* @TODO */
|
||||
public function commit() : self
|
||||
{
|
||||
@@ -363,16 +366,14 @@ class Repository
|
||||
|
||||
public function withJoin(/*string|array*/ $fields) : self
|
||||
{
|
||||
$resolvedEntity = Ulmus::resolveEntity($this->entityClass);
|
||||
|
||||
if ( null === $this->queryBuilder->getFragment(Query\Select::class) ) {
|
||||
$this->select("{$this->alias}.*");
|
||||
}
|
||||
|
||||
foreach((array) $fields as $item) {
|
||||
if ( null !== $join = $resolvedEntity->searchFieldAnnotation($item, new Annotation\Property\Join) ) {
|
||||
if ( null !== $join = $this->entityResolver->searchFieldAnnotation($item, new Annotation\Property\Join) ) {
|
||||
$alias = $join->alias ?? $item;
|
||||
$entity = $join->entity ?? $resolvedEntity->properties[$item]['type'];
|
||||
$entity = $join->entity ?? $this->entityResolver->properties[$item]['type'];
|
||||
|
||||
foreach($entity::resolveEntity()->fieldList(Common\EntityResolver::KEY_COLUMN_NAME) as $key => $field) {
|
||||
$this->select("$alias.$key as {$alias}\${$field['name']}");
|
||||
@@ -491,6 +492,21 @@ class Repository
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function createSqlQuery() : self
|
||||
{
|
||||
if ( null === $this->queryBuilder->getFragment(Query\Create::class) ) {
|
||||
$this->queryBuilder->create($this->entityResolver->fieldList(), $this->escapeTable($this->entityResolver->tableName()), $this->entityResolver->schemaName());
|
||||
}
|
||||
|
||||
if ( null === $this->queryBuilder->getFragment(Query\Engine::class) ) {
|
||||
if ( $engine = $this->entityResolver->tableAnnotation()->engine ?? $this->entityResolver->databaseAdapter()->adapter()->defaultEngine() ) {
|
||||
$this->queryBuilder->engine($engine);
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function fromRow($row) : self
|
||||
{
|
||||
|
||||
@@ -501,6 +517,15 @@ class Repository
|
||||
|
||||
}
|
||||
|
||||
public function getSqlQuery(bool $flush = true) : string
|
||||
{
|
||||
$result = $this->queryBuilder->render();
|
||||
|
||||
$flush and $this->queryBuilder->reset();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function instanciateEntityCollection() : EntityCollection
|
||||
{
|
||||
return $this->entityClass::entityCollection();
|
||||
@@ -521,6 +546,13 @@ class Repository
|
||||
return $this->adapter->adapter()->escapeIdentifier($identifier, Adapter\AdapterInterface::IDENTIFIER_DATABASE);
|
||||
}
|
||||
|
||||
public function escapedDatabase() : ? string
|
||||
{
|
||||
$name = $this->entityResolver->tableAnnotation()->database ?? $this->adapter->adapter()->database ?? null;
|
||||
|
||||
return $name ? static::escapeDatabase($name) : null;
|
||||
}
|
||||
|
||||
public function escapeSchema(string $identifier) : string
|
||||
{
|
||||
return $this->adapter->adapter()->escapeIdentifier($identifier, Adapter\AdapterInterface::IDENTIFIER_SCHEMA);
|
||||
|
||||
Reference in new issue
Block a user