queryBuilder = new QueryBuilder(); } protected function selectSqlQuery() : self { if ( null === $this->queryBuilder->getFragment(Query\Select::class) ) { $this->select(array_keys($this->entityResolver->fieldList(EntityResolver::KEY_COLUMN_NAME))); } if ( null !== $objectClass = $this->entityResolver->getAnnotationFromClassname( ObjectClass::class, false ) ) { $this->where('objectclass', $objectClass->type); } if ( null !== $objectClass = $this->entityResolver->getAnnotationFromClassname( ObjectType::class, false ) ) { $this->where('objecttype', $objectClass->type); } return $this; } protected function insertSqlQuery(array $dataset, bool $replace = false) : self { if ( null === $insert = $this->queryBuilder->getFragment(Query\Insert::class) ) { $fields = array_map([ $this, 'escapeField' ] , array_keys($dataset)); $this->insert($fields, "", "", null); } $this->values($dataset); return $this; } protected function updateSqlQuery(array $dataset) : self { $condition = array_pop($this->queryBuilder->where->conditionList); if ($condition[0] === 'dn') { if ( null === $this->queryBuilder->getFragment(Query\Update::class) ) { $this->update($condition[1], "", null); } } else { array_push($this->queryBuilder->where->conditionList, $condition); } $this->set($dataset); return $this; } protected function deleteSqlQuery() : self { /*$condition = array_pop($this->queryBuilder->where->conditionList); if ($condition[0] === 'dn') { if ( null === $this->queryBuilder->getFragment(Query\Delete::class) ) { $this->delete($condition[1], "", null); } } else { array_push($this->queryBuilder->where->conditionList, $condition); } */ return $this; } public function destroy(object $entity) : bool { if ( ! $this->matchEntity($entity) ) { throw new \Exception("Your entity class `" . get_class($entity) . "` cannot match entity type of repository `{$this->entityClass}`"); } $this->delete($entity->dn)->deleteAll()->rowCount(); return false; } public function loadAllFromOU(string $ou) : EntityCollection { $dn = $this->adapter->connector()->dn; $this->adapter->connector()->dn = $ou; $collection = $this->collectionFromQuery(); $this->adapter->connector()->dn = $dn; return $collection; } public function insert(array $dataset, string $table, string $alias, ? string $schema, bool $replace = false) : self { $this->queryBuilder->insert($dataset); return $this; } public function update(string $dn, string $alias, ? string $schema) : self { $this->queryBuilder->update($dn); return $this; } public function delete(...$args) : self { $this->queryBuilder->delete($args[0]); return $this; } public function escapeValue($identifier) : string { return is_object($identifier) ? $identifier : $this->adapter->adapter()->escapeIdentifier($identifier, Adapter\Ldap::IDENTIFIER_FILTER); } public function filterServerRequest(SearchRequest\SearchRequestInterface $searchRequest, bool $count = true) : self { if ($count) { $this->eventRegister(new class($searchRequest) implements \Ulmus\Event\Repository\CollectionFromQueryInterface { protected SearchRequest\SearchRequestInterface $searchRequest; public function __construct(SearchRequest\SearchRequestInterface $searchRequest) { $this->searchRequest = $searchRequest; } public function execute(EntityCollection $collection) : EntityCollection { $this->searchRequest->count = $collection->count(); return $collection; } }); } return parent::filterServerRequest($searchRequest, false); } }