From 971ea67e960042f3266f877d9764c1be5f4efa38 Mon Sep 17 00:00:00 2001 From: Henry Paradiz Date: Mon, 31 Aug 2026 00:20:37 -0700 Subject: [PATCH 1/7] Collections, In-Memory Indexing, Media Handling Modernization --- .php_cs.dist.php => .php-cs-fixer.dist.php | 0 src/Controllers/Records/Endpoints/Create.php | 2 +- .../Records/Endpoints/MultiSave.php | 2 +- src/Controllers/RequestHandler.php | 4 +- src/Data/Collections/Collection.php | 212 ++++++ .../Collections/Events/AbstractHandler.php | 17 + src/Data/Collections/Events/Add.php | 34 + src/Data/Collections/Events/AddMany.php | 22 + src/Data/Collections/Events/Remove.php | 41 ++ src/Data/Collections/Events/RemoveMany.php | 22 + src/Data/Collections/Factory/Factory.php | 82 +++ .../Factory/Getters/AbstractGetter.php | 17 + .../Factory/Getters/GetAllByCriteria.php | 158 +++++ .../Factory/Getters/GetAllByField.php | 36 + .../Factory/Getters/GetByCriteria.php | 21 + .../Factory/Getters/GetByField.php | 32 + src/Data/Collections/Getters.php | 57 ++ src/Data/Collections/IndexedField.php | 363 +++++++++++ src/Data/Collections/Indexing.php | 23 + .../Collections/Indexing/AbstractHandler.php | 17 + .../Collections/Indexing/ClearIndexes.php | 22 + .../Indexing/CreateIndexByField.php | 23 + src/Data/Collections/Indexing/HasIndex.php | 20 + src/Data/Collections/Indexing/SetIndexes.php | 26 + .../Indexing/UpdateIndexForModel.php | 25 + src/Data/Collections/RecordKey.php | 28 + src/Data/KeyToHashInt.php | 90 +++ src/IO/Database/Writer/MySQL.php | 2 +- src/Models/ActiveRecord.php | 16 +- src/Models/Collections/Events/Add.php | 33 + src/Models/Collections/Events/Remove.php | 38 ++ src/Models/Collections/Factory/Factory.php | 33 + .../Factory/Getters/GetAllByCriteria.php | 14 + .../Factory/Getters/GetAllByField.php | 37 ++ src/Models/Collections/IndexedRecordField.php | 62 ++ .../Collections/Indexing/ClearIndexes.php | 23 + .../Indexing/CreateIndexByField.php | 26 + .../Collections/Indexing/SetIndexes.php | 27 + .../Indexing/UpdateIndexForModel.php | 26 + src/Models/Collections/RecordCollection.php | 170 +++++ src/Models/Events/HandleException.php | 5 + src/Models/Expr/Conjunction.php | 18 + src/Models/Expr/Criteria.php | 26 + src/Models/Expr/CriteriaGroup.php | 25 + src/Models/Expr/CriteriaType.php | 35 + src/Models/Factory.php | 29 +- src/Models/Factory/EventBinder.php | 23 +- src/Models/Factory/Instantiator.php | 85 ++- src/Models/Factory/PrototypeRegistry.php | 28 - src/Models/Getters.php | 6 +- src/Models/Mapping/InMemoryIndexing.php | 24 + src/Models/Media/Audio.php | 6 +- src/Models/Media/Media.php | 38 +- src/Models/Media/PDF.php | 25 +- src/Models/Media/Video.php | 202 +++--- .../Controllers/RecordsRequestHandlerTest.php | 11 +- .../Collections/CollectionCriteriaTest.php | 616 ++++++++++++++++++ .../Data/Collections/RecordKeyTest.php | 50 ++ tests/Divergence/Data/KeyToHashIntTest.php | 23 + tests/Divergence/IO/Database/SQLTest.php | 6 +- .../Collections/CanaryCollectionTest.php | 219 +++++++ .../Collections/RecordCollectionSaveTest.php | 225 +++++++ .../Collections/RecordCollectionTest.php | 188 ++++++ tests/Divergence/Models/Media/ImageTest.php | 143 ++++ tests/Divergence/Models/Media/VideoTest.php | 175 +++++ .../MockSite/Collections/CanaryCollection.php | 22 + tests/MockSite/Models/FixtureItem.php | 28 + tests/MockSite/Models/IndexedCanary.php | 44 ++ tests/assets/20210211232214_IMG_0570.JPG | Bin 0 -> 8392891 bytes 69 files changed, 4030 insertions(+), 198 deletions(-) rename .php_cs.dist.php => .php-cs-fixer.dist.php (100%) create mode 100644 src/Data/Collections/Collection.php create mode 100644 src/Data/Collections/Events/AbstractHandler.php create mode 100644 src/Data/Collections/Events/Add.php create mode 100644 src/Data/Collections/Events/AddMany.php create mode 100644 src/Data/Collections/Events/Remove.php create mode 100644 src/Data/Collections/Events/RemoveMany.php create mode 100644 src/Data/Collections/Factory/Factory.php create mode 100644 src/Data/Collections/Factory/Getters/AbstractGetter.php create mode 100644 src/Data/Collections/Factory/Getters/GetAllByCriteria.php create mode 100644 src/Data/Collections/Factory/Getters/GetAllByField.php create mode 100644 src/Data/Collections/Factory/Getters/GetByCriteria.php create mode 100644 src/Data/Collections/Factory/Getters/GetByField.php create mode 100644 src/Data/Collections/Getters.php create mode 100644 src/Data/Collections/IndexedField.php create mode 100644 src/Data/Collections/Indexing.php create mode 100644 src/Data/Collections/Indexing/AbstractHandler.php create mode 100644 src/Data/Collections/Indexing/ClearIndexes.php create mode 100644 src/Data/Collections/Indexing/CreateIndexByField.php create mode 100644 src/Data/Collections/Indexing/HasIndex.php create mode 100644 src/Data/Collections/Indexing/SetIndexes.php create mode 100644 src/Data/Collections/Indexing/UpdateIndexForModel.php create mode 100644 src/Data/Collections/RecordKey.php create mode 100644 src/Data/KeyToHashInt.php create mode 100644 src/Models/Collections/Events/Add.php create mode 100644 src/Models/Collections/Events/Remove.php create mode 100644 src/Models/Collections/Factory/Factory.php create mode 100644 src/Models/Collections/Factory/Getters/GetAllByCriteria.php create mode 100644 src/Models/Collections/Factory/Getters/GetAllByField.php create mode 100644 src/Models/Collections/IndexedRecordField.php create mode 100644 src/Models/Collections/Indexing/ClearIndexes.php create mode 100644 src/Models/Collections/Indexing/CreateIndexByField.php create mode 100644 src/Models/Collections/Indexing/SetIndexes.php create mode 100644 src/Models/Collections/Indexing/UpdateIndexForModel.php create mode 100644 src/Models/Collections/RecordCollection.php create mode 100644 src/Models/Expr/Conjunction.php create mode 100644 src/Models/Expr/Criteria.php create mode 100644 src/Models/Expr/CriteriaGroup.php create mode 100644 src/Models/Expr/CriteriaType.php delete mode 100644 src/Models/Factory/PrototypeRegistry.php create mode 100644 src/Models/Mapping/InMemoryIndexing.php create mode 100644 tests/Divergence/Data/Collections/CollectionCriteriaTest.php create mode 100644 tests/Divergence/Data/Collections/RecordKeyTest.php create mode 100644 tests/Divergence/Data/KeyToHashIntTest.php create mode 100644 tests/Divergence/Models/Collections/CanaryCollectionTest.php create mode 100644 tests/Divergence/Models/Collections/RecordCollectionSaveTest.php create mode 100644 tests/Divergence/Models/Collections/RecordCollectionTest.php create mode 100644 tests/Divergence/Models/Media/ImageTest.php create mode 100644 tests/Divergence/Models/Media/VideoTest.php create mode 100644 tests/MockSite/Collections/CanaryCollection.php create mode 100644 tests/MockSite/Models/FixtureItem.php create mode 100644 tests/MockSite/Models/IndexedCanary.php create mode 100644 tests/assets/20210211232214_IMG_0570.JPG diff --git a/.php_cs.dist.php b/.php-cs-fixer.dist.php similarity index 100% rename from .php_cs.dist.php rename to .php-cs-fixer.dist.php diff --git a/src/Controllers/Records/Endpoints/Create.php b/src/Controllers/Records/Endpoints/Create.php index 1524cd7..7403cac 100644 --- a/src/Controllers/Records/Endpoints/Create.php +++ b/src/Controllers/Records/Endpoints/Create.php @@ -25,7 +25,7 @@ public function handle(...$arguments): ResponseInterface if (!$Record) { $className = $this->handler::$recordClass; $defaultClass = $className::getDefaultClassName(); - $Record = new $defaultClass(); + $Record = $defaultClass::create(); } $this->handler->onRecordCreatedHook($Record, $_REQUEST); diff --git a/src/Controllers/Records/Endpoints/MultiSave.php b/src/Controllers/Records/Endpoints/MultiSave.php index 2f4f8d8..8316cdc 100644 --- a/src/Controllers/Records/Endpoints/MultiSave.php +++ b/src/Controllers/Records/Endpoints/MultiSave.php @@ -64,7 +64,7 @@ protected function getDatumRecord($datum) if (empty($datum[$PrimaryKey])) { $defaultClass = $className::getDefaultClassName(); - $record = new $defaultClass(); + $record = $defaultClass::create(); $this->handler->onRecordCreatedHook($record, $datum); return $record; diff --git a/src/Controllers/RequestHandler.php b/src/Controllers/RequestHandler.php index ecda377..42c0e83 100644 --- a/src/Controllers/RequestHandler.php +++ b/src/Controllers/RequestHandler.php @@ -12,7 +12,7 @@ use Divergence\App; use Divergence\Responders\Response; -use BadMethodCallException; +use Error; use Exception; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -87,7 +87,7 @@ public function __call(string $name, array $arguments) $endpointName = strtolower($name); if (!isset($this->endpointClasses[$endpointName])) { - throw new BadMethodCallException(sprintf('Call to undefined method %s::%s()', static::class, $name)); + throw new Error(sprintf('Call to undefined method %s::%s()', static::class, $name)); } if (!isset($this->endpoints[$endpointName])) { diff --git a/src/Data/Collections/Collection.php b/src/Data/Collections/Collection.php new file mode 100644 index 0000000..bfdab16 --- /dev/null +++ b/src/Data/Collections/Collection.php @@ -0,0 +1,212 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections; + +use Iterator; +use Countable; +use ArrayAccess; + +/** + * @template TRecord of object|array + * @implements Iterator + * @implements ArrayAccess + */ +class Collection implements Iterator, Countable, ArrayAccess, Indexing +{ + use Getters; + + public static $addHandler; + public static $addManyHandler; + public static $removeHandler; + public static $removeManyHandler; + public static $createIndexByFieldHandler; + public static $hasIndexHandler; + public static $updateIndexForModelHandler; + public static $setIndexesHandler; + public static $clearIndexesHandler; + + /** @var array */ + public array $Index = []; + + /** @var array */ + public array $Indexes = []; + + /** @var array */ + public array $HashKeyIndex = []; + + public int $position = 0; + + /** + * @param array $records + * @param array $indexes + */ + public function __construct(array $records = [], array $indexes = []) + { + foreach ($indexes as $field) { + $this->createIndexByField($field); + } + + $this->addMany($records); + } + + public function validate($record) + { + return true; + } + + public function add($record) + { + $handler = static::$addHandler; + $handler::handle($this, $record); + } + + public function addMany(array $records) + { + $handler = static::$addManyHandler; + $handler::handle($this, $records); + } + + public function remove($record) + { + $handler = static::$removeHandler; + $handler::handle($this, $record); + } + + public function removeMany($records) + { + $handler = static::$removeManyHandler; + $handler::handle($this, $records); + } + + public function toArray() + { + return $this->Index; + } + + /* ### Implements IndexedFields Internally in the Collection ### */ + + public function createIndexByField($field) + { + $handler = static::$createIndexByFieldHandler; + $handler::handle($this, $field); + } + + public function hasIndex($field): bool + { + $handler = static::$hasIndexHandler; + return $handler::handle($this, $field); + } + + public function updateIndexForModel($index, &$record) + { + $handler = static::$updateIndexForModelHandler; + $handler::handle($this, $index, $record); + } + + public function setIndexes(&$record) + { + $handler = static::$setIndexesHandler; + $handler::handle($this, $record); + } + + public function clearIndexes(&$record) + { + $handler = static::$clearIndexesHandler; + $handler::handle($this, $record); + } + + /* ### START implements Countable { ### */ + + public function count(): int + { + return count($this->Index); + } + + /* ### } END implements Countable ### */ + + /* ### START implements Iterator { ### */ + + public function current(): mixed + { + return $this->Index[$this->position] ?? null; + } + + public function key(): int + { + return $this->position; + } + + public function next(): void + { + ++$this->position; + } + + public function rewind(): void + { + $this->position = 0; + } + + public function valid(): bool + { + return isset($this->Index[$this->position]); + } + + /* ### } END implements Iterator ### */ + + /* ### START implements ArrayAccess { ### */ + + public function offsetSet(mixed $offset, mixed $value): void + { + if (is_null($offset)) { + $this->add($value); + } elseif ($this->validate($value)) { + if (isset($this->Index[$offset])) { + $position = $this->position; + $this->offsetUnset($offset); + array_splice($this->Index, $offset, 0, [$value]); + $this->position = $position; + } else { + $this->Index[$offset] = $value; + } + + $this->setIndexes($value); + } + } + + public function offsetExists(mixed $offset): bool + { + return isset($this->Index[$offset]); + } + + public function offsetUnset(mixed $offset): void + { + if (isset($this->Index[$offset])) { + $record = $this->Index[$offset]; + $recordKey = RecordKey::get($record); + unset($this->HashKeyIndex[$recordKey]); + $this->clearIndexes($record); + array_splice($this->Index, $offset, 1); + + if ($this->position > $offset) { + --$this->position; + } + } + } + + public function offsetGet(mixed $offset): mixed + { + if ($offset < 0) { + $offset += $this->count(); + } + return $this->Index[$offset] ?? null; + } + + /* ### } END implements ArrayAccess ### */ +} diff --git a/src/Data/Collections/Events/AbstractHandler.php b/src/Data/Collections/Events/AbstractHandler.php new file mode 100644 index 0000000..f2c73d8 --- /dev/null +++ b/src/Data/Collections/Events/AbstractHandler.php @@ -0,0 +1,17 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Events; + +use Divergence\Data\Collections\Collection; + +abstract class AbstractHandler +{ + abstract public static function handle(Collection $collection); +} diff --git a/src/Data/Collections/Events/Add.php b/src/Data/Collections/Events/Add.php new file mode 100644 index 0000000..f3c75e9 --- /dev/null +++ b/src/Data/Collections/Events/Add.php @@ -0,0 +1,34 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Events; + +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\Indexing; +use Divergence\Data\Collections\RecordKey; + +class Add extends AbstractHandler +{ + public static function handle(Collection $collection, $record = null): void + { + if ($collection->validate($record)) { + $recordKey = RecordKey::get($record); + + if (isset($collection->HashKeyIndex[$recordKey])) { + return; + } + + array_push($collection->Index, $record); + + if ($collection instanceof Indexing) { + $collection->setIndexes($record); + } + } + } +} diff --git a/src/Data/Collections/Events/AddMany.php b/src/Data/Collections/Events/AddMany.php new file mode 100644 index 0000000..a3e55cb --- /dev/null +++ b/src/Data/Collections/Events/AddMany.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Events; + +use Divergence\Data\Collections\Collection; + +class AddMany extends AbstractHandler +{ + public static function handle(Collection $collection, array $records = []): void + { + foreach ($records as $record) { + $collection->add($record); + } + } +} diff --git a/src/Data/Collections/Events/Remove.php b/src/Data/Collections/Events/Remove.php new file mode 100644 index 0000000..9b1803c --- /dev/null +++ b/src/Data/Collections/Events/Remove.php @@ -0,0 +1,41 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Events; + +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\Indexing; +use Divergence\Data\Collections\RecordKey; + +class Remove extends AbstractHandler +{ + public static function handle(Collection $collection, $record = null): void + { + $recordKey = RecordKey::get($record); + + foreach ($collection->Index as $key => $existing) { + $existingKey = RecordKey::get($existing); + + if ($existingKey === $recordKey) { + array_splice($collection->Index, $key, 1); + + if ($collection instanceof Indexing) { + unset($collection->HashKeyIndex[$existingKey]); + $collection->clearIndexes($existing); + } + + if ($collection->position > $key) { + --$collection->position; + } + + return; + } + } + } +} diff --git a/src/Data/Collections/Events/RemoveMany.php b/src/Data/Collections/Events/RemoveMany.php new file mode 100644 index 0000000..f551e04 --- /dev/null +++ b/src/Data/Collections/Events/RemoveMany.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Events; + +use Divergence\Data\Collections\Collection; + +class RemoveMany extends AbstractHandler +{ + public static function handle(Collection $collection, $records = []): void + { + foreach ($records as $record) { + $collection->remove($record); + } + } +} diff --git a/src/Data/Collections/Factory/Factory.php b/src/Data/Collections/Factory/Factory.php new file mode 100644 index 0000000..888245e --- /dev/null +++ b/src/Data/Collections/Factory/Factory.php @@ -0,0 +1,82 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Factory; + +use Exception; +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\Events\Add; +use Divergence\Data\Collections\Events\AddMany; +use Divergence\Data\Collections\Events\Remove; +use Divergence\Data\Collections\Events\RemoveMany; +use Divergence\Data\Collections\Factory\Getters\GetByField; +use Divergence\Data\Collections\Factory\Getters\GetAllByField; +use Divergence\Data\Collections\Factory\Getters\GetByCriteria; +use Divergence\Data\Collections\Factory\Getters\GetAllByCriteria; +use Divergence\Data\Collections\Indexing\CreateIndexByField; +use Divergence\Data\Collections\Indexing\HasIndex; +use Divergence\Data\Collections\Indexing\UpdateIndexForModel; +use Divergence\Data\Collections\Indexing\SetIndexes; +use Divergence\Data\Collections\Indexing\ClearIndexes; + +class Factory +{ + protected $getterClasses = []; + + public function __construct() + { + $this->registerGetterClasses(); + } + + protected function registerGetterClasses(): void + { + $this->getterClasses = []; + + foreach ([ + GetByField::class, + GetAllByField::class, + GetByCriteria::class, + GetAllByCriteria::class, + ] as $className) { + $this->registerGetterClass($className); + } + } + + protected function registerGetterClass(string $className): void + { + $parts = explode('\\', $className); + $getterName = strtolower(lcfirst(end($parts))); + + if (isset($this->getterClasses[$getterName])) { + throw new Exception(sprintf('Getter method collision for %s', $getterName)); + } + + $this->getterClasses[$getterName] = $className; + } + + public function getGetterClasses(): array + { + return $this->getterClasses; + } + + public function create(array $records = [], array $indexes = []): Collection + { + Collection::$addHandler = Add::class; + Collection::$addManyHandler = AddMany::class; + Collection::$removeHandler = Remove::class; + Collection::$removeManyHandler = RemoveMany::class; + Collection::$createIndexByFieldHandler = CreateIndexByField::class; + Collection::$hasIndexHandler = HasIndex::class; + Collection::$updateIndexForModelHandler = UpdateIndexForModel::class; + Collection::$setIndexesHandler = SetIndexes::class; + Collection::$clearIndexesHandler = ClearIndexes::class; + + return new Collection($records, $indexes); + } +} diff --git a/src/Data/Collections/Factory/Getters/AbstractGetter.php b/src/Data/Collections/Factory/Getters/AbstractGetter.php new file mode 100644 index 0000000..5e2d687 --- /dev/null +++ b/src/Data/Collections/Factory/Getters/AbstractGetter.php @@ -0,0 +1,17 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Factory\Getters; + +use Divergence\Data\Collections\Collection; + +abstract class AbstractGetter +{ + abstract public static function handle(Collection $collection); +} diff --git a/src/Data/Collections/Factory/Getters/GetAllByCriteria.php b/src/Data/Collections/Factory/Getters/GetAllByCriteria.php new file mode 100644 index 0000000..1a6b7e0 --- /dev/null +++ b/src/Data/Collections/Factory/Getters/GetAllByCriteria.php @@ -0,0 +1,158 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Factory\Getters; + +use Divergence\Data\Collections\Collection; +use Divergence\Models\Expr\Conjunction; +use Divergence\Models\Expr\Criteria; +use Divergence\Models\Expr\CriteriaGroup; +use Divergence\Models\Expr\CriteriaType; + +class GetAllByCriteria extends AbstractGetter +{ + /** + * @param Collection $collection + * @param Criteria|Criteria[]|CriteriaGroup $CriteriaGroup + * @return array + */ + public static function handle(Collection $collection, $CriteriaGroup=[]) + { + if (is_a($CriteriaGroup, Criteria::class)) { + $CriteriaGroup = [$CriteriaGroup]; + } + + $output = []; + if ($found = static::searchByCriteria($collection, $CriteriaGroup)) { + if (is_array($found)) { + foreach ($found as $key=>$value) { + if (isset($collection->HashKeyIndex[$key])) { + $output[] = $collection->HashKeyIndex[$key]; + } + } + } + } + return $output; + } + + /** + * @param Collection $collection + * @param Criteria[]|CriteriaGroup $CriteriaGroup + * @return array + */ + private static function searchByCriteria(Collection $collection, $CriteriaGroup) + { + if (!is_array($CriteriaGroup) && !is_a($CriteriaGroup, CriteriaGroup::class)) { + throw new \Exception('Collection->GetAllByCriteria($CriteriaGroup) expects CriteriaGroup[].'); + } + + if (is_array($CriteriaGroup)) { + $CriteriaGroup = new CriteriaGroup($CriteriaGroup); + } + + $results = []; + foreach ($CriteriaGroup->criteria as $crit) { + if (is_a($crit, Criteria::class)) { + // just-in-time create the index if needed + // this is obviously slower than pre-indexing + if (!isset($collection->Indexes[$crit->key])) { + $collection->createIndexByField($crit->key); + } + // fetch index + switch ($crit->operator) { + case CriteriaType::FieldEqual: + $operator = CriteriaType::Equal; + break; + + case CriteriaType::FieldNotEqual: + $operator = CriteriaType::NotEqual; + break; + + case CriteriaType::FieldGreaterThan: + $operator = CriteriaType::GreaterThan; + break; + + case CriteriaType::FieldGreaterThanOrEqual: + $operator = CriteriaType::GreaterThanOrEqual; + break; + + case CriteriaType::FieldLessThan: + $operator = CriteriaType::LessThan; + break; + + case CriteriaType::FieldLessThanOrEqual: + $operator = CriteriaType::LessThanOrEqual; + break; + + default: + $operator = null; + } + + if ($operator) { + if (!isset($collection->Indexes[$crit->value])) { + $collection->createIndexByField($crit->value); + } + $result = $collection->Indexes[$crit->key]->findByIndex($collection->Indexes[$crit->value], $operator); + } else { + $result = $collection->Indexes[$crit->key]->find($crit->value, $crit->operator); + } + $results[] = $result ?: []; + + // when processing a Group Conjunction::GroupAnd must be found in all indexes to match the operation + if ($CriteriaGroup->conjunction == Conjunction::GroupAnd && !$result) { + return []; + } + } + + if (is_a($crit, CriteriaGroup::class)) { + $results[] = static::searchByCriteria($collection, $crit) ?: []; + } + } + + // no criteria in the group found anything. + // we return an empty array immediately. + if (count($results) === 0) { + return []; + } + + // if one thing is found use that one thing + if (count($results) === 1) { + $found = array_shift($results); + } + + if (count($results)>1) { + switch ($CriteriaGroup->conjunction) { + case Conjunction::GroupAnd: + case Conjunction::GroupNotAnd: + $found = call_user_func_array('array_intersect_key', $results); + break; + + case Conjunction::GroupOr: + case Conjunction::GroupNotOr: + $orKeys = []; + foreach ($results as $orResults) { + if (is_array($orResults)) { + $orKeys = array_merge($orKeys, array_keys($orResults)); + } + } + $results = array_unique($orKeys); + $found = array_fill_keys($results, 1); + } + } + + switch ($CriteriaGroup->conjunction) { + case Conjunction::GroupNotAnd: + case Conjunction::GroupNotOr: + $found = array_diff_key(array_fill_keys(array_keys($collection->HashKeyIndex), 1), $found); + break; + } + + return $found ?: []; + } +} diff --git a/src/Data/Collections/Factory/Getters/GetAllByField.php b/src/Data/Collections/Factory/Getters/GetAllByField.php new file mode 100644 index 0000000..8725ca6 --- /dev/null +++ b/src/Data/Collections/Factory/Getters/GetAllByField.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Factory\Getters; + +use Divergence\Data\Collections\Collection; + +class GetAllByField extends AbstractGetter +{ + public static function handle(Collection $collection, $field = null, $value = null) + { + $records = []; + + if (isset($collection->Indexes[$field])) { + $results = $collection->Indexes[$field]->find($value); + + if ($results) { + foreach ($results as $key => $_found) { + if (isset($collection->HashKeyIndex[$key])) { + $records[] = $collection->HashKeyIndex[$key]; + } + } + } + } + + $className = get_class($collection); + + return new $className($records, array_keys($collection->Indexes)); + } +} diff --git a/src/Data/Collections/Factory/Getters/GetByCriteria.php b/src/Data/Collections/Factory/Getters/GetByCriteria.php new file mode 100644 index 0000000..2cc4d65 --- /dev/null +++ b/src/Data/Collections/Factory/Getters/GetByCriteria.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Factory\Getters; + +use Divergence\Data\Collections\Collection; + +class GetByCriteria extends AbstractGetter +{ + public static function handle(Collection $collection, $criteria = null) + { + $results = GetAllByCriteria::handle($collection, $criteria); + return $results ? reset($results) : null; + } +} diff --git a/src/Data/Collections/Factory/Getters/GetByField.php b/src/Data/Collections/Factory/Getters/GetByField.php new file mode 100644 index 0000000..941acb2 --- /dev/null +++ b/src/Data/Collections/Factory/Getters/GetByField.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Factory\Getters; + +use Divergence\Data\Collections\Collection; + +class GetByField extends AbstractGetter +{ + public static function handle(Collection $collection, $field = null, $value = null) + { + if (!isset($collection->Indexes[$field])) { + return null; + } + + $results = $collection->Indexes[$field]->find($value); + + if ($results) { + $key = array_key_first($results); + + return $collection->HashKeyIndex[$key] ?? null; + } + + return null; + } +} diff --git a/src/Data/Collections/Getters.php b/src/Data/Collections/Getters.php new file mode 100644 index 0000000..4287c32 --- /dev/null +++ b/src/Data/Collections/Getters.php @@ -0,0 +1,57 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections; + +use Error; +use Divergence\Data\Collections\Factory\Factory; + +trait Getters +{ + protected static $_registeredGetterMethods = []; + + public static function Factory(): Factory + { + return new Factory(); + } + + protected static function registerGetterMethods(): void + { + $factory = static::Factory(); + + static::$_registeredGetterMethods[static::class] = $factory->getGetterClasses(); + } + + public static function __callStatic(string $name, array $arguments) + { + $factory = static::Factory(); + + if (method_exists($factory, $name)) { + return $factory->$name(...$arguments); + } + + throw new Error(sprintf('Call to undefined method %s::%s()', static::class, $name)); + } + + public function __call(string $name, array $arguments) + { + if (!isset(static::$_registeredGetterMethods[static::class])) { + static::registerGetterMethods(); + } + + $methodName = strtolower($name); + $getterClass = static::$_registeredGetterMethods[static::class][$methodName] ?? null; + + if ($getterClass === null) { + throw new Error(sprintf('Call to undefined method %s::%s()', static::class, $name)); + } + + return $getterClass::handle($this, ...$arguments); + } +} diff --git a/src/Data/Collections/IndexedField.php b/src/Data/Collections/IndexedField.php new file mode 100644 index 0000000..f2a0d45 --- /dev/null +++ b/src/Data/Collections/IndexedField.php @@ -0,0 +1,363 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections; + +use Divergence\Models\Expr\CriteriaType; +use RuntimeException; + +class IndexedField +{ + public $field; + public $type; + + protected $cardinality = []; + + protected $index = []; + + protected $values = []; + + protected ?array $orderedValues = null; + + protected ?array $orderedRecordKeys = null; + + public function __construct($field, $type = null) + { + $this->field = $field; + $this->type = $type; + } + + public function rebuildIndex(&$records) + { + if ($records) { + foreach ($records as $record) { + $this->set($record); + } + } + } + + /** + * @param mixed $value + * @return array|false + */ + public function find($value, int $operator = CriteriaType::Equal) + { + if ($operator === CriteriaType::In) { + return $this->findIn((array) $value); + } + + if ($operator === CriteriaType::NotIn) { + return array_diff_key($this->allKeys(), $this->findIn((array) $value) ?: []) ?: false; + } + + $value = $this->indexableValue($value); + + switch ($operator) { + case CriteriaType::Equal: + return $this->findEqual($value); + case CriteriaType::NotEqual: + return array_diff_key($this->allKeys(), $this->findEqual($value) ?: []) ?: false; + case CriteriaType::GreaterThan: + return $this->findOrdered($value, false, false); + case CriteriaType::GreaterThanOrEqual: + return $this->findOrdered($value, false, true); + case CriteriaType::LessThan: + return $this->findOrdered($value, true, false); + case CriteriaType::LessThanOrEqual: + return $this->findOrdered($value, true, true); + case CriteriaType::Nulled: + case CriteriaType::NotExists: + return $this->findEqual(null); + case CriteriaType::NotNulled: + case CriteriaType::Exists: + return array_diff_key($this->allKeys(), $this->findEqual(null) ?: []) ?: false; + } + + if ($operator !== CriteriaType::Like && $operator !== CriteriaType::NotLike) { + throw new RuntimeException(sprintf('Criteria operator "%s" cannot be evaluated in-memory', $operator)); + } + + $matches = []; + + foreach ($this->cardinality as $cardinality => $indexedValue) { + if ($this->matchesValue($indexedValue, $value, $operator)) { + $matches += $this->index[$cardinality]; + } + } + + return $matches ?: false; + } + + public function findByIndex(IndexedField $Index, int $operator) + { + $matches = []; + + foreach ($this->values as $recordKey => $leftCardinality) { + if (!array_key_exists($recordKey, $Index->values)) { + continue; + } + + $rightCardinality = $Index->values[$recordKey]; + + if ($this->matchesValue( + $this->cardinality[$leftCardinality], + $Index->cardinality[$rightCardinality], + $operator + )) { + $matches[$recordKey] = true; + } + } + + return $matches ?: false; + } + + public function clearExistingIndexForValue($record) + { + $recordKey = RecordKey::get($record); + + if (isset($this->values[$recordKey])) { + $cardinality = $this->values[$recordKey]; + unset($this->index[$cardinality][$recordKey]); + unset($this->values[$recordKey]); + + // if a cardinality becomes unused completely remove it from the known cardinalities + if (!$this->index[$cardinality]) { + unset($this->index[$cardinality], $this->cardinality[$cardinality]); + } + + $this->invalidateOrdering(); + } + } + + public function set($record) + { + $fieldValue = is_array($record) ? ($record[$this->field] ?? null) : ($record->{$this->field} ?? null); + $cardinalityValue = $this->indexableValue($fieldValue); + + if (!$this->cardinality_exists($cardinalityValue)) { + $this->bootstrapCardinality($cardinalityValue); + } + + $this->clearExistingIndexForValue($record); + + $cardinality = $this->cardinalityKey($cardinalityValue); + $recordKey = RecordKey::get($record); + + $this->index[$cardinality][$recordKey] = true; + $this->values[$recordKey] = $cardinality; + $this->invalidateOrdering(); + } + + /** + * @param mixed $value + * @return mixed + */ + public function indexableValue($value) + { + switch ($this->type) { + case 'DateString': + case 'timestamp': + $timestamp = strtotime($value); + return $timestamp === false ? $value : $timestamp; + + default: + $type = gettype($value); + if ($type === 'float' || $type === 'double') { + $value = (string) $value; + } + return $value; + } + } + + /** + * @param mixed $cardinality + * @return boolean + */ + public function cardinality_exists($cardinality) + { + $key = $this->cardinalityKey($cardinality); + + return array_key_exists($key, $this->cardinality) + && $this->cardinality[$key] === $cardinality; + } + + /** + * @param mixed $cardinality + * @return void + */ + public function bootstrapCardinality($cardinality) + { + $hash = $this->cardinalityKey($cardinality); + + $this->cardinality[$hash] = $cardinality; + $this->index[$hash] = []; + } + + protected function cardinalityKey($value): string + { + return serialize($value); + } + + protected function invalidateOrdering(): void + { + $this->orderedValues = null; + $this->orderedRecordKeys = null; + } + + private function findEqual($value) + { + $cardinality = $this->cardinalityKey($value); + + if (array_key_exists($cardinality, $this->cardinality) + && $this->cardinality[$cardinality] === $value) { + return $this->index[$cardinality] ?: false; + } + + return false; + } + + private function findIn(array $values) + { + $matches = []; + + foreach ($values as $value) { + $matches += $this->findEqual($this->indexableValue($value)) ?: []; + } + + return $matches ?: false; + } + + private function findOrdered($value, bool $lessThan, bool $inclusive) + { + $this->buildOrdering(); + + if ($lessThan) { + $end = $this->lowerBoundary($value, $inclusive); + $keys = array_slice($this->orderedRecordKeys, 0, $end); + } else { + $start = $this->upperBoundary($value, $inclusive); + $keys = array_slice($this->orderedRecordKeys, $start); + } + + return $keys ? array_fill_keys($keys, true) : false; + } + + private function buildOrdering(): void + { + if ($this->orderedValues !== null) { + return; + } + + $values = []; + $recordKeys = []; + + foreach ($this->cardinality as $cardinality => $value) { + foreach ($this->index[$cardinality] as $recordKey => $_found) { + $values[] = $value; + $recordKeys[] = $recordKey; + } + } + + if ($values) { + array_multisort($values, SORT_ASC, SORT_REGULAR, $recordKeys, SORT_ASC, SORT_REGULAR); + } + + $this->orderedValues = $values; + $this->orderedRecordKeys = $recordKeys; + } + + private function lowerBoundary($value, bool $inclusive): int + { + $low = 0; + $high = count($this->orderedValues); + + while ($low < $high) { + $middle = intdiv($low + $high, 2); + $matches = $inclusive + ? $this->orderedValues[$middle] <= $value + : $this->orderedValues[$middle] < $value; + + if ($matches) { + $low = $middle + 1; + } else { + $high = $middle; + } + } + + return $low; + } + + private function upperBoundary($value, bool $inclusive): int + { + $low = 0; + $high = count($this->orderedValues); + + while ($low < $high) { + $middle = intdiv($low + $high, 2); + $matches = $inclusive + ? $this->orderedValues[$middle] < $value + : $this->orderedValues[$middle] <= $value; + + if ($matches) { + $low = $middle + 1; + } else { + $high = $middle; + } + } + + return $low; + } + + private function allKeys(): array + { + return array_fill_keys(array_keys($this->values), true); + } + + protected function matchesValue($indexedValue, $value, int $operator): bool + { + switch ($operator) { + case CriteriaType::NotEqual: + return $indexedValue != $value; + case CriteriaType::GreaterThan: + return $indexedValue > $value; + case CriteriaType::GreaterThanOrEqual: + return $indexedValue >= $value; + case CriteriaType::LessThan: + return $indexedValue < $value; + case CriteriaType::LessThanOrEqual: + return $indexedValue <= $value; + case CriteriaType::Like: + return $this->matchesLike($indexedValue, $value); + case CriteriaType::NotLike: + return !$this->matchesLike($indexedValue, $value); + case CriteriaType::In: + return in_array($indexedValue, (array) $value); + case CriteriaType::NotIn: + return !in_array($indexedValue, (array) $value); + case CriteriaType::Nulled: + case CriteriaType::NotExists: + return $indexedValue === null; + case CriteriaType::NotNulled: + case CriteriaType::Exists: + return $indexedValue !== null; + case CriteriaType::Equal: + return $indexedValue == $value; + default: + throw new RuntimeException(sprintf('Criteria operator "%s" cannot be evaluated in-memory', $operator)); + } + } + + private function matchesLike($value, $pattern): bool + { + $quoted = preg_quote((string) $pattern, '/'); + $regex = '/^' . str_replace(['%', '_'], ['.*', '.'], $quoted) . '$/i'; + + return (bool) preg_match($regex, (string) $value); + } +} diff --git a/src/Data/Collections/Indexing.php b/src/Data/Collections/Indexing.php new file mode 100644 index 0000000..4bae66f --- /dev/null +++ b/src/Data/Collections/Indexing.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections; + +interface Indexing +{ + public function createIndexByField($field); + + public function hasIndex($field): bool; + + public function updateIndexForModel($index, &$record); + + public function setIndexes(&$record); + + public function clearIndexes(&$record); +} diff --git a/src/Data/Collections/Indexing/AbstractHandler.php b/src/Data/Collections/Indexing/AbstractHandler.php new file mode 100644 index 0000000..578f19e --- /dev/null +++ b/src/Data/Collections/Indexing/AbstractHandler.php @@ -0,0 +1,17 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Indexing; + +use Divergence\Data\Collections\Collection; + +abstract class AbstractHandler +{ + abstract public static function handle(Collection $collection); +} diff --git a/src/Data/Collections/Indexing/ClearIndexes.php b/src/Data/Collections/Indexing/ClearIndexes.php new file mode 100644 index 0000000..1801da2 --- /dev/null +++ b/src/Data/Collections/Indexing/ClearIndexes.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Indexing; + +use Divergence\Data\Collections\Collection; + +class ClearIndexes extends AbstractHandler +{ + public static function handle(Collection $collection, &$record = null): void + { + foreach ($collection->Indexes as $index) { + $index->clearExistingIndexForValue($record); + } + } +} diff --git a/src/Data/Collections/Indexing/CreateIndexByField.php b/src/Data/Collections/Indexing/CreateIndexByField.php new file mode 100644 index 0000000..e98c1eb --- /dev/null +++ b/src/Data/Collections/Indexing/CreateIndexByField.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Indexing; + +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\IndexedField; + +class CreateIndexByField extends AbstractHandler +{ + public static function handle(Collection $collection, $field = null): void + { + $index = new IndexedField($field); + $index->rebuildIndex($collection->Index); + $collection->Indexes[$field] = $index; + } +} diff --git a/src/Data/Collections/Indexing/HasIndex.php b/src/Data/Collections/Indexing/HasIndex.php new file mode 100644 index 0000000..21730a3 --- /dev/null +++ b/src/Data/Collections/Indexing/HasIndex.php @@ -0,0 +1,20 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Indexing; + +use Divergence\Data\Collections\Collection; + +class HasIndex extends AbstractHandler +{ + public static function handle(Collection $collection, $field = null): bool + { + return isset($collection->Indexes[$field]); + } +} diff --git a/src/Data/Collections/Indexing/SetIndexes.php b/src/Data/Collections/Indexing/SetIndexes.php new file mode 100644 index 0000000..59f9b5f --- /dev/null +++ b/src/Data/Collections/Indexing/SetIndexes.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Indexing; + +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\RecordKey; + +class SetIndexes extends AbstractHandler +{ + public static function handle(Collection $collection, &$record = null): void + { + $recordKey = RecordKey::get($record); + $collection->HashKeyIndex[$recordKey] = $record; + + foreach ($collection->Indexes as $index) { + $index->set($record); + } + } +} diff --git a/src/Data/Collections/Indexing/UpdateIndexForModel.php b/src/Data/Collections/Indexing/UpdateIndexForModel.php new file mode 100644 index 0000000..2985ef3 --- /dev/null +++ b/src/Data/Collections/Indexing/UpdateIndexForModel.php @@ -0,0 +1,25 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Data\Collections\Indexing; + +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\RecordKey; + +class UpdateIndexForModel extends AbstractHandler +{ + public static function handle(Collection $collection, $index = null, &$record = null): void + { + if (isset($collection->Indexes[$index])) { + $recordKey = RecordKey::get($record); + $collection->HashKeyIndex[$recordKey] = $record; + $collection->Indexes[$index]->set($record); + } + } +} diff --git a/src/Data/Collections/RecordKey.php b/src/Data/Collections/RecordKey.php new file mode 100644 index 0000000..96e6c0c --- /dev/null +++ b/src/Data/Collections/RecordKey.php @@ -0,0 +1,28 @@ +getPrimaryKeyValue(); + + if ($primaryKey !== null) { + // if we get a hash we return right away + return KeyToHashInt::hashForKeys([$primaryKey]); + } + } + + // this is phantoms and all non ORM objects that are indexed + // after save phantoms will run ->remove() then ->add() on + // themselves in the collection indexes + + // detect other ORMs here for indexing support + return spl_object_id($record); + } +} diff --git a/src/Data/KeyToHashInt.php b/src/Data/KeyToHashInt.php new file mode 100644 index 0000000..6f913ee --- /dev/null +++ b/src/Data/KeyToHashInt.php @@ -0,0 +1,90 @@ +keys = $keys; + $this->hash = null; + } + + public function getSingular() + { + // If a single key PK is already an int, return it as-is + if (is_int($this->keys[0])) { + $this->hash = $this->keys[0]; + return $this->hash; + } + + if (is_string($this->keys[0])) { + // if for some reason it's a string we're gonna convert it to an int + if (ctype_digit($this->keys[0])) { + $this->hash = (int)($this->keys[0]); + return $this->hash; + // if it's a non-numeric string but still being used as a PK then we'll hash it for a 64 bit int + } else { + $this->hash = intval(hexdec(hash('xxh64', $this->keys[0]))); + return $this->hash; + } + } + + return $this->hash; + } + + // Pack two 32-bit component hashes into one 64-bit integer. + public function getDouble() + { + $k1 = crc32((string) $this->keys[0]); + $k2 = crc32((string) $this->keys[1]); + // shift first hash left 32 bits and OR with second + $this->hash = $k1 << 32 | $k2; + return $this->hash; + } + + // Three or more dimensions use one delimited xxHash64 input. + public function getMany() + { + $this->hash = intval(hexdec(hash('xxh64', implode('|', $this->keys)))); + return $this->hash; + } + + public function get() + { + if ($this->hash !== null) { + return $this->hash; + } + + switch (count($this->keys)) { + case 1: + return $this->getSingular(); + + case 2: + return $this->getDouble(); + + default: + return $this->getMany(); + } + } + + public static function hashForKeys($keys) + { + if (self::$singleton === null) { + self::$singleton = new self($keys); + } else { + self::$singleton->keys = $keys; + self::$singleton->hash = null; + } + + return self::$singleton->get(); + } +} diff --git a/src/IO/Database/Writer/MySQL.php b/src/IO/Database/Writer/MySQL.php index 85b6223..b31f387 100644 --- a/src/IO/Database/Writer/MySQL.php +++ b/src/IO/Database/Writer/MySQL.php @@ -118,7 +118,7 @@ public static function getCreateTable($recordClass, $historyVariant = false) static::appendMySqlIndexes($queryString, $fulltextColumns, $indexes); $createSQL = sprintf( - "CREATE TABLE IF NOT EXISTS `%s` (\n\t%s\n) ENGINE=MyISAM DEFAULT CHARSET=utf8;", + "CREATE TABLE IF NOT EXISTS `%s` (\n\t%s\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;", static::getTargetTableName($recordClass, $historyVariant), join("\n\t,", $queryString) ); diff --git a/src/Models/ActiveRecord.php b/src/Models/ActiveRecord.php index 8b1555f..afc3459 100644 --- a/src/Models/ActiveRecord.php +++ b/src/Models/ActiveRecord.php @@ -33,6 +33,7 @@ use Divergence\IO\Database\Query\Update; use Divergence\Models\Mapping\DefaultGetMapper; use Divergence\Models\Mapping\DefaultSetMapper; +use Divergence\Models\Factory as ModelFactory; /** * ActiveRecord @@ -729,12 +730,8 @@ public static function isRelational() */ public static function create($values = [], $save = false) { - $className = get_called_class(); - - // create class /** @var ActiveRecord */ - $ActiveRecord = new $className(); - $ActiveRecord->setFields($values); + $ActiveRecord = ModelFactory::get(static::class)->instantiatePhantomRecord($values); if ($save) { $ActiveRecord->save(); @@ -1897,6 +1894,15 @@ public function finalizeSave(): void $this->_isDirty = false; } + public function restoreState(self $state): void + { + foreach (get_object_vars($state) as $property => $value) { + $this->$property = $value; + } + + $this->initializeAttributeFields(); + } + /** * @param array $set * @return void diff --git a/src/Models/Collections/Events/Add.php b/src/Models/Collections/Events/Add.php new file mode 100644 index 0000000..3c64a00 --- /dev/null +++ b/src/Models/Collections/Events/Add.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Collections\Events; + +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\Events\AbstractHandler; +use Divergence\Data\Collections\RecordKey; + +class Add extends AbstractHandler +{ + public static function handle(Collection $collection, $record = null): void + { + if ($collection->validate($record)) { + $primaryKey = $record->getPrimaryKeyValue(); + $modelKey = RecordKey::get($record); + + if (isset($collection->HashKeyIndex[$modelKey]) + && ($primaryKey !== null || $collection->HashKeyIndex[$modelKey] === $record)) { + return; + } + + array_push($collection->Index, $record); + $collection->setIndexes($record); + } + } +} diff --git a/src/Models/Collections/Events/Remove.php b/src/Models/Collections/Events/Remove.php new file mode 100644 index 0000000..5ea5771 --- /dev/null +++ b/src/Models/Collections/Events/Remove.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Collections\Events; + +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\Events\AbstractHandler; +use Divergence\Data\Collections\RecordKey; + +class Remove extends AbstractHandler +{ + public static function handle(Collection $collection, $record = null): void + { + $recordKey = RecordKey::get($record); + + foreach ($collection->Index as $key => $Model) { + $modelKey = RecordKey::get($Model); + + if ($modelKey === $recordKey) { + array_splice($collection->Index, $key, 1); + unset($collection->HashKeyIndex[$modelKey]); + $collection->clearIndexes($Model); + + if ($collection->position > $key) { + --$collection->position; + } + + return; + } + } + } +} diff --git a/src/Models/Collections/Factory/Factory.php b/src/Models/Collections/Factory/Factory.php new file mode 100644 index 0000000..1c9ab61 --- /dev/null +++ b/src/Models/Collections/Factory/Factory.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Collections\Factory; + +use Divergence\Data\Collections\Factory\Factory as BaseFactory; +use Divergence\Data\Collections\Factory\Getters\GetByField; +use Divergence\Data\Collections\Factory\Getters\GetByCriteria; +use Divergence\Models\Collections\Factory\Getters\GetAllByField; +use Divergence\Models\Collections\Factory\Getters\GetAllByCriteria; + +class Factory extends BaseFactory +{ + protected function registerGetterClasses(): void + { + $this->getterClasses = []; + + foreach ([ + GetByField::class, + GetAllByField::class, + GetByCriteria::class, + GetAllByCriteria::class, + ] as $className) { + $this->registerGetterClass($className); + } + } +} diff --git a/src/Models/Collections/Factory/Getters/GetAllByCriteria.php b/src/Models/Collections/Factory/Getters/GetAllByCriteria.php new file mode 100644 index 0000000..52c9a1a --- /dev/null +++ b/src/Models/Collections/Factory/Getters/GetAllByCriteria.php @@ -0,0 +1,14 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Collections\Factory\Getters; + +class GetAllByCriteria extends \Divergence\Data\Collections\Factory\Getters\GetAllByCriteria +{ +} diff --git a/src/Models/Collections/Factory/Getters/GetAllByField.php b/src/Models/Collections/Factory/Getters/GetAllByField.php new file mode 100644 index 0000000..d804b37 --- /dev/null +++ b/src/Models/Collections/Factory/Getters/GetAllByField.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Collections\Factory\Getters; + +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\Factory\Getters\AbstractGetter; + +class GetAllByField extends AbstractGetter +{ + public static function handle(Collection $collection, $field = null, $value = null) + { + $Models = []; + + if (isset($collection->Indexes[$field])) { + $results = $collection->Indexes[$field]->find($value); + + if ($results) { + foreach ($results as $key => $_found) { + if (isset($collection->HashKeyIndex[$key])) { + $Models[] = $collection->HashKeyIndex[$key]; + } + } + } + } + + $className = get_class($collection); + + return new $className($Models, array_keys($collection->Indexes), $collection->recordClassName); + } +} diff --git a/src/Models/Collections/IndexedRecordField.php b/src/Models/Collections/IndexedRecordField.php new file mode 100644 index 0000000..706450e --- /dev/null +++ b/src/Models/Collections/IndexedRecordField.php @@ -0,0 +1,62 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Collections; + +use Divergence\Data\Collections\IndexedField; +use Divergence\Data\Collections\RecordKey; + +class IndexedRecordField extends IndexedField +{ + public function clearExistingIndexForValue($record) + { + $modelKey = RecordKey::get($record); + + if (isset($this->values[$modelKey])) { + $cardinality = $this->values[$modelKey]; + unset($this->index[$cardinality][$modelKey]); + unset($this->values[$modelKey]); + $this->invalidateOrdering(); + } + } + + public function set($record) + { + $cardinalityValue = $this->indexableValue($record->getValue($this->field)); + + if (!$this->cardinality_exists($cardinalityValue)) { + $this->bootstrapCardinality($cardinalityValue); + } + + $this->clearExistingIndexForValue($record); + + $cardinality = $this->cardinalityKey($cardinalityValue); + $modelKey = RecordKey::get($record); + + $this->index[$cardinality][$modelKey] = true; + $this->values[$modelKey] = $cardinality; + $this->invalidateOrdering(); + } + + public function indexableValue($value) + { + switch ($this->type) { + case 'DateString': + case 'timestamp': + return strtotime($value) ?: $value; + + default: + $type = gettype($value); + if ($type === 'float' || $type === 'double') { + $value = (string) $value; + } + return $value; + } + } +} diff --git a/src/Models/Collections/Indexing/ClearIndexes.php b/src/Models/Collections/Indexing/ClearIndexes.php new file mode 100644 index 0000000..2ff15bf --- /dev/null +++ b/src/Models/Collections/Indexing/ClearIndexes.php @@ -0,0 +1,23 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Collections\Indexing; + +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\Indexing\AbstractHandler; + +class ClearIndexes extends AbstractHandler +{ + public static function handle(Collection $collection, &$record = null): void + { + foreach ($collection->Indexes as $index) { + $index->clearExistingIndexForValue($record); + } + } +} diff --git a/src/Models/Collections/Indexing/CreateIndexByField.php b/src/Models/Collections/Indexing/CreateIndexByField.php new file mode 100644 index 0000000..2f0d641 --- /dev/null +++ b/src/Models/Collections/Indexing/CreateIndexByField.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Collections\Indexing; + +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\Indexing\AbstractHandler; +use Divergence\Models\Collections\IndexedRecordField; + +class CreateIndexByField extends AbstractHandler +{ + public static function handle(Collection $collection, $field = null): void + { + $fieldOptions = $collection->recordClassName::getClassFields()[$field] ?? []; + $type = $fieldOptions['type'] ?? null; + $index = new IndexedRecordField($field, $type); + $index->rebuildIndex($collection->Index); + $collection->Indexes[$field] = $index; + } +} diff --git a/src/Models/Collections/Indexing/SetIndexes.php b/src/Models/Collections/Indexing/SetIndexes.php new file mode 100644 index 0000000..39b1170 --- /dev/null +++ b/src/Models/Collections/Indexing/SetIndexes.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Collections\Indexing; + +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\RecordKey; +use Divergence\Data\Collections\Indexing\AbstractHandler; + +class SetIndexes extends AbstractHandler +{ + public static function handle(Collection $collection, &$record = null): void + { + $modelKey = RecordKey::get($record); + $collection->HashKeyIndex[$modelKey] = $record; + + foreach ($collection->Indexes as $index) { + $index->set($record); + } + } +} diff --git a/src/Models/Collections/Indexing/UpdateIndexForModel.php b/src/Models/Collections/Indexing/UpdateIndexForModel.php new file mode 100644 index 0000000..ce8c06f --- /dev/null +++ b/src/Models/Collections/Indexing/UpdateIndexForModel.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Collections\Indexing; + +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\RecordKey; +use Divergence\Data\Collections\Indexing\AbstractHandler; + +class UpdateIndexForModel extends AbstractHandler +{ + public static function handle(Collection $collection, $index = null, &$record = null): void + { + if (isset($collection->Indexes[$index])) { + $modelKey = RecordKey::get($record); + $collection->HashKeyIndex[$modelKey] = $record; + $collection->Indexes[$index]->set($record); + } + } +} diff --git a/src/Models/Collections/RecordCollection.php b/src/Models/Collections/RecordCollection.php new file mode 100644 index 0000000..2df879a --- /dev/null +++ b/src/Models/Collections/RecordCollection.php @@ -0,0 +1,170 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Collections; + +use Exception; +use Divergence\Models\ActiveRecord; +use Divergence\Data\Collections\RecordKey; +use Divergence\IO\Database\Connections; +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\Events\AddMany; +use Divergence\Data\Collections\Events\RemoveMany; +use Divergence\Data\Collections\Indexing\HasIndex; +use Divergence\Models\Collections\Events\Add; +use Divergence\Models\Collections\Events\Remove; +use Divergence\Models\Collections\Indexing\CreateIndexByField; +use Divergence\Models\Collections\Indexing\UpdateIndexForModel; +use Divergence\Models\Collections\Indexing\SetIndexes; +use Divergence\Models\Collections\Indexing\ClearIndexes; +use Divergence\Models\Collections\Factory\Factory; + +/** + * @template TModel of ActiveRecord + */ +class RecordCollection extends Collection +{ + public static $addHandler = Add::class; + public static $addManyHandler = AddMany::class; + public static $removeHandler = Remove::class; + public static $removeManyHandler = RemoveMany::class; + public static $createIndexByFieldHandler = CreateIndexByField::class; + public static $hasIndexHandler = HasIndex::class; + public static $updateIndexForModelHandler = UpdateIndexForModel::class; + public static $setIndexesHandler = SetIndexes::class; + public static $clearIndexesHandler = ClearIndexes::class; + + public static function Factory(): Factory + { + return new Factory(); + } + + /** @var class-string|null */ + public $recordClassName; + + /** + * @param array $records + * @param array $indexes + * @param class-string|null $recordClassName + */ + public function __construct(array $records = [], array $indexes = [], $recordClassName = null) + { + $this->recordClassName = $recordClassName; + + if (!$this->recordClassName && count($records)) { + $this->recordClassName = get_class(reset($records)); + } + + foreach ($indexes as $field) { + $this->createIndexByField($field); + } + + $this->addMany($records); + } + + public function validate($record) + { + if (!$this->recordClassName) { + $this->recordClassName = get_class($record); + } + + return is_a($record, $this->recordClassName); + } + + public function isDirty() + { + if (count($this->Index)) { + foreach ($this->Index as $Model) { + if ($Model->isDirty) { + return true; + } + } + } + return false; + } + + public function saveWithTransaction(bool $deep = true) + { + if (count($this->Index) === 0) { + return; + } + + $connection = Connections::getConnection(); + $models = $this->Index; + $states = array_map(fn ($Model) => clone $Model, $models); + + try { + $connection->beginTransaction(); + + foreach ($this->Index as $Model) { + if ($Model->isDirty || $Model->isPhantom) { + $this->remove($Model); + $Model->save($deep); + $this->add($Model); + } + } + + return $connection->commit(); + } catch (Exception $exception) { + $connection->rollBack(); + + foreach ($this->Index as $Model) { + $this->clearIndexes($Model); + } + + $this->Index = $this->HashKeyIndex = []; + + foreach ($models as $key => $Model) { + $Model->restoreState($states[$key]); + } + + $this->addMany($models); + throw $exception; + } + } + + public function save(bool $deep = true): void + { + foreach ($this->Index as $Model) { + if ($Model->isDirty || $Model->isPhantom) { + $this->remove($Model); + $Model->save($deep); + $this->add($Model); + } + } + } + + public function current(): ?ActiveRecord + { + return $this->Index[$this->position] ?? null; + } + + public function offsetUnset(mixed $offset): void + { + if (isset($this->Index[$offset])) { + $Model = $this->Index[$offset]; + $modelKey = RecordKey::get($Model); + unset($this->HashKeyIndex[$modelKey]); + $this->clearIndexes($Model); + array_splice($this->Index, $offset, 1); + + if ($this->position > $offset) { + --$this->position; + } + } + } + + public function offsetGet(mixed $offset): ?ActiveRecord + { + if ($offset < 0) { + $offset += $this->count(); + } + return $this->Index[$offset] ?? null; + } +} diff --git a/src/Models/Events/HandleException.php b/src/Models/Events/HandleException.php index 488dabe..2486ac3 100644 --- a/src/Models/Events/HandleException.php +++ b/src/Models/Events/HandleException.php @@ -15,6 +15,7 @@ public static function handle(string $className, Exception $e, $query = null, $q $errorMessage = strtolower($errorInfo[2] ?? $e->getMessage()); if (static::isMissingTableError($errorCode, $errorMessage) && $className::$autoCreateTables) { + $transactionStarted = $connection->inTransaction(); $writerClass = static::getWriterClass(); $rootClass = $className::getRootClassName(); $statements = [$writerClass::getCreateTable($rootClass)]; @@ -40,6 +41,10 @@ public static function handle(string $className, Exception $e, $query = null, $q } } + if ($transactionStarted && !$connection->inTransaction()) { + $connection->beginTransaction(); + } + return $connection->query((string) $query); } diff --git a/src/Models/Expr/Conjunction.php b/src/Models/Expr/Conjunction.php new file mode 100644 index 0000000..2de0e69 --- /dev/null +++ b/src/Models/Expr/Conjunction.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Expr; + +class Conjunction +{ + const GroupAnd = 1; + const GroupOr = 2; + const GroupNotAnd = 3; + const GroupNotOr = 4; +} diff --git a/src/Models/Expr/Criteria.php b/src/Models/Expr/Criteria.php new file mode 100644 index 0000000..4612eda --- /dev/null +++ b/src/Models/Expr/Criteria.php @@ -0,0 +1,26 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Expr; + +class Criteria +{ + public $key; + public $value; + public $operator; + public $rawOperator; + + public function __construct(string $key, $value = null, int $operator = CriteriaType::Equal, ?string $rawOperator = null) + { + $this->key = $key; + $this->value = $value; + $this->operator = $operator; + $this->rawOperator = $rawOperator; + } +} diff --git a/src/Models/Expr/CriteriaGroup.php b/src/Models/Expr/CriteriaGroup.php new file mode 100644 index 0000000..95c8f7e --- /dev/null +++ b/src/Models/Expr/CriteriaGroup.php @@ -0,0 +1,25 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Expr; + +class CriteriaGroup +{ + public $criteria; + public $conjunction; + + /** + * @param array $criteria + */ + public function __construct(array $criteria, int $conjunction = Conjunction::GroupAnd) + { + $this->criteria = $criteria; + $this->conjunction = $conjunction; + } +} diff --git a/src/Models/Expr/CriteriaType.php b/src/Models/Expr/CriteriaType.php new file mode 100644 index 0000000..d3efb68 --- /dev/null +++ b/src/Models/Expr/CriteriaType.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Expr; + +class CriteriaType +{ + const Equal = 1; + const NotEqual = 2; + const GreaterThan = 3; + const GreaterThanOrEqual = 4; + const LessThan = 5; + const LessThanOrEqual = 6; + const Like = 7; + const NotLike = 8; + const In = 9; + const NotIn = 10; + const Nulled = 11; + const NotNulled = 12; + const Exists = 13; + const NotExists = 14; + const Raw = 15; + const FieldEqual = 16; + const FieldNotEqual = 17; + const FieldGreaterThan = 18; + const FieldGreaterThanOrEqual = 19; + const FieldLessThan = 20; + const FieldLessThanOrEqual = 21; +} diff --git a/src/Models/Factory.php b/src/Models/Factory.php index f5dc3c4..0e0aa5e 100644 --- a/src/Models/Factory.php +++ b/src/Models/Factory.php @@ -10,7 +10,7 @@ namespace Divergence\Models; -use BadMethodCallException; +use Error; use Exception; use Divergence\Models\Factory\Instantiator; use Divergence\Models\Factory\Getters\GetAll; @@ -64,6 +64,11 @@ */ class Factory { + /** + * @var array + */ + protected static $InstanceRegistry = []; + /** * @var array */ @@ -121,6 +126,15 @@ class Factory */ protected $modelMetadata; + public static function get(string $modelClass): static + { + if (!isset(static::$InstanceRegistry[$modelClass])) { + static::$InstanceRegistry[$modelClass] = new static($modelClass); + } + + return static::$InstanceRegistry[$modelClass]; + } + /** * @param string $modelClass */ @@ -181,7 +195,7 @@ public function __call(string $name, array $arguments) $getterName = strtolower($name); if (!isset($this->getterClasses[$getterName])) { - throw new BadMethodCallException(sprintf('Call to undefined method %s::%s()', static::class, $name)); + throw new Error(sprintf('Call to undefined method %s::%s()', static::class, $name)); } if (!isset($this->getters[$getterName])) { @@ -264,6 +278,17 @@ public function instantiateRecord($record) return $this->instantiator->instantiateRecord($record); } + /** + * Creates a new phantom model from the provided values. + * + * @param array $record + * @return Model + */ + public function instantiatePhantomRecord($record = []) + { + return $this->instantiator->instantiatePhantomRecord($record); + } + /** * Converts an array of database records to a model corresponding to each record. Will attempt to use the record's Class field value to as the class to instantiate as or the name of this class if none is provided. * diff --git a/src/Models/Factory/EventBinder.php b/src/Models/Factory/EventBinder.php index 229245d..20c60c8 100644 --- a/src/Models/Factory/EventBinder.php +++ b/src/Models/Factory/EventBinder.php @@ -12,6 +12,9 @@ use ReflectionProperty; +/** + * @template TModel of \Divergence\Models\Model + */ class EventBinder { /** @@ -42,7 +45,13 @@ protected function synchronizeMappedProperties($model): void } } - public function bindPrototype($model) + /** + * Main instantiator + * + * @param TModel $model + * @return TModel + */ + public function initPrototype($model) { $className = get_class($model); @@ -69,10 +78,18 @@ public function bindPrototype($model) return $model; } - public function bindRecord($model, array $record = [], bool $isDirty = false, ?bool $isPhantom = null) + /** + * Configures meta data fields + * + * @param TModel $model + * @param array $record + * @param boolean $isDirty + * @param boolean $isPhantom + * @return void + */ + public function bindRecord($model, array $record = [], bool $isDirty = false, bool $isPhantom = false) { $className = get_class($model); - $isPhantom = isset($isPhantom) ? $isPhantom : empty($record); if ($className::fieldExists('Class')) { $columnName = $className::getColumnName('Class'); diff --git a/src/Models/Factory/Instantiator.php b/src/Models/Factory/Instantiator.php index 4f769a4..e1470df 100644 --- a/src/Models/Factory/Instantiator.php +++ b/src/Models/Factory/Instantiator.php @@ -12,6 +12,8 @@ use ReflectionClass; use Divergence\Models\Model; +use Divergence\Models\Mapping\InMemoryIndexing; +use Divergence\Models\Collections\RecordCollection; /** * @template TModel of Model @@ -29,9 +31,14 @@ class Instantiator protected $eventBinder; /** - * @var PrototypeRegistry + * @var RecordCollection|null */ - protected $prototypeRegistry; + protected $Collection; + + /** + * @var InMemoryIndexing|null + */ + protected $indexingConfig; /** * @param string $modelClass @@ -43,7 +50,14 @@ public function __construct(ModelMetadata $metadata) { $this->metadata = $metadata; $this->eventBinder = new EventBinder(); - $this->prototypeRegistry = new PrototypeRegistry(); + + $modelClass = $this->metadata->getModelClass(); + $attributes = (new ReflectionClass($modelClass))->getAttributes(InMemoryIndexing::class); + + if ($attributes) { + $this->indexingConfig = $attributes[0]->newInstance(); + $this->instantiateCollection(); + } } /** @@ -67,48 +81,83 @@ protected function getRecordClass($record) return $className; } + /** + * @param array $record + * @return TModel + */ + public function instantiatePhantomRecord($record = []) + { + $className = $this->getRecordClass($record); + $prototype = $this->createPrototype($className); + $model = clone $prototype; + + $model = $this->eventBinder->bindRecord($model, [], false, true); + $model->setFields($record); + + return $model; + } + /** * @param array|null $record * @return TModel|null */ public function instantiateRecord($record) { - return $this->instantiateModel($record); + if ($record === false || $record === null) { + return null; + } + + return $this->instantiateModel($record, false); } /** * @param array>|array> $records - * @return array|array + * @return array|array|RecordCollection */ public function instantiateRecords($records) { + $Collection = $this->Collection; + + if ($Collection) { + $this->instantiateCollection(); + } + foreach ($records as &$record) { $record = $this->instantiateModel($record); + + if ($Collection) { + $Collection->add($record); + } } - return $records; + return $Collection ?: $records; + } + + protected function instantiateCollection(): void + { + $modelClass = $this->metadata->getModelClass(); + $this->Collection = new RecordCollection([], $this->indexingConfig->indexes, $modelClass); } /** - * @param array|null $record - * @return TModel|null + * @param array $record + * @return TModel */ - protected function instantiateModel($record) + protected function instantiateModel(array $record, bool $phantom = false) { $className = $this->getRecordClass($record); - if (!$record) { - return null; - } + $prototype = $this->createPrototype($className); - $prototype = $this->prototypeRegistry->get($className, function () use ($className) { - $model = (new ReflectionClass($className))->newInstanceWithoutConstructor(); + $model = clone $prototype; - return $this->eventBinder->bindPrototype($model); - }); + return $this->eventBinder->bindRecord($model, $record, false, $phantom); + } - $model = clone $prototype; + protected function createPrototype(string $className) + { + $model = (new ReflectionClass($className))->newInstanceWithoutConstructor(); - return $this->eventBinder->bindRecord($model, $record); + return $this->eventBinder->initPrototype($model); } } diff --git a/src/Models/Factory/PrototypeRegistry.php b/src/Models/Factory/PrototypeRegistry.php deleted file mode 100644 index c55bb03..0000000 --- a/src/Models/Factory/PrototypeRegistry.php +++ /dev/null @@ -1,28 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Divergence\Models\Factory; - -class PrototypeRegistry -{ - /** - * @var array - */ - protected static $prototypes = []; - - public function get(string $className, callable $factory) - { - if (!isset(static::$prototypes[$className])) { - static::$prototypes[$className] = $factory(); - } - - return static::$prototypes[$className]; - } -} diff --git a/src/Models/Getters.php b/src/Models/Getters.php index ba65172..1e4661f 100644 --- a/src/Models/Getters.php +++ b/src/Models/Getters.php @@ -10,7 +10,7 @@ namespace Divergence\Models; -use BadMethodCallException; +use Error; /** * @property string $handleField Defined in the model @@ -29,7 +29,7 @@ trait Getters */ public static function Factory(?string $modelClass = null): Factory { - return new Factory($modelClass ?: static::class); + return Factory::get($modelClass ?: static::class); } protected static function registerGetterMethods(): void @@ -55,6 +55,6 @@ public static function __callStatic(string $name, array $arguments) return $factory->$name(...$arguments); } - throw new BadMethodCallException(sprintf('Call to undefined method %s::%s()', static::class, $name)); + throw new Error(sprintf('Call to undefined method %s::%s()', static::class, $name)); } } diff --git a/src/Models/Mapping/InMemoryIndexing.php b/src/Models/Mapping/InMemoryIndexing.php new file mode 100644 index 0000000..dd53d73 --- /dev/null +++ b/src/Models/Mapping/InMemoryIndexing.php @@ -0,0 +1,24 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace Divergence\Models\Mapping; + +use Attribute; + +#[Attribute(Attribute::TARGET_CLASS)] +final class InMemoryIndexing implements MappingAttribute +{ + /** @var array */ + public $indexes = []; + + public function __construct(array $indexes = []) + { + $this->indexes = $indexes; + } +} diff --git a/src/Models/Media/Audio.php b/src/Models/Media/Audio.php index 8950b2b..bdedd16 100644 --- a/src/Models/Media/Audio.php +++ b/src/Models/Media/Audio.php @@ -53,7 +53,7 @@ public function getValue($name) } } - public function getImage($sourceFile = null) + public function getImage($sourceFile = null): \GdImage|false { if (!isset($sourceFile)) { $sourceFile = $this->BlankPath; @@ -72,10 +72,10 @@ public function createPreview() $startTime = 0; } - $previewPath = tempnam('/tmp', 'mediaPreview'); + $previewPath = tempnam(sys_get_temp_dir(), 'mediaPreview'); // generate preview - $cmd = sprintf(static::$previewExtractCommand, $this->FilesystemPath, $previewPath, $startTime, static::$previewDuration); + $cmd = sprintf(static::$previewExtractCommand, escapeshellarg($this->FilesystemPath), escapeshellarg($previewPath), $startTime, static::$previewDuration); shell_exec($cmd); if (!filesize($previewPath)) { diff --git a/src/Models/Media/Media.php b/src/Models/Media/Media.php index aed7576..253ccdf 100644 --- a/src/Models/Media/Media.php +++ b/src/Models/Media/Media.php @@ -221,14 +221,21 @@ public function getImage($sourceFile = null): \GdImage|false case 'image/tiff': //Converts PSD to PNG temporarily on the real file system. - $tempFile = tempnam('/tmp', 'media_convert'); - exec("convert -density 100 ".$this->getValue('FilesystemPath')."[0] -flatten $tempFile.png"); + $tempFile = tempnam(sys_get_temp_dir(), 'media_convert'); + $cmd = 'convert -density 100 ' . escapeshellarg($this->getValue('FilesystemPath') . '[0]') . ' -flatten ' . escapeshellarg($tempFile . '.png'); + exec($cmd); - return imagecreatefrompng("$tempFile.png"); + return imagecreatefrompng($tempFile . '.png'); case 'application/postscript': - return imagecreatefromstring(shell_exec("gs -r150 -dEPSCrop -dNOPAUSE -dBATCH -sDEVICE=png48 -sOutputFile=- -q $this->getValue('FilesystemPath')")); + $cmd = 'gs -r150 -dEPSCrop -dNOPAUSE -dBATCH -sDEVICE=png48 -sOutputFile=- -q ' . escapeshellarg($this->getValue('FilesystemPath')); + + if (!$imageData = shell_exec($cmd)) { + throw new Exception('Failed to convert postscript file with gs, ensure ghostscript is installed'); + } + + return imagecreatefromstring($imageData); default: @@ -468,10 +475,12 @@ public static function createFromUpload($uploadedFile, $fieldValues = []): stati public static function createFromFile($file, $fieldValues = []): static | false { + $Media = null; + try { // handle url input if (filter_var($file, FILTER_VALIDATE_URL)) { - $tempName = tempnam('/tmp', 'remote_media'); + $tempName = tempnam(sys_get_temp_dir(), 'remote_media'); copy($file, $tempName); $file = $tempName; } @@ -496,15 +505,13 @@ public static function createFromFile($file, $fieldValues = []): static | false return $Media; } catch (Exception $e) { - throw $e; - } + // remove partially-created media record + if ($Media) { + $Media->destroy(); + } - // remove photo record - if ($Media) { - $Media->destroy(); + throw $e; } - - return false; } public function initializeFromAnalysis($mediaInfo) @@ -599,6 +606,13 @@ public function getMIMEType(): string return $this->getValue('MIMEType'); } + public function isVariantAvailable($variant): bool + { + $path = $this->getFilesystemPath($variant); + + return $path !== null && is_readable($path); + } + public function writeFile($sourceFile): bool { $targetDirectory = dirname($this->getValue('FilesystemPath')); diff --git a/src/Models/Media/PDF.php b/src/Models/Media/PDF.php index cdb8df7..8995e0e 100644 --- a/src/Models/Media/PDF.php +++ b/src/Models/Media/PDF.php @@ -21,8 +21,7 @@ */ class PDF extends Media { - // configurables - public static $extractPageCommand = 'convert \'%1$s[%2$u]\' JPEG:- 2>/dev/null'; // 1=pdf path, 2=page + public static $extractPageCommand = 'convert %1$s JPEG:- 2>/dev/null'; // 1=escaped 'pdf path[page]' argument public static $extractPageIndex = 0; public function getValue($name) @@ -44,31 +43,35 @@ public function getValue($name) throw new Exception('Unable to find document extension for mime-type: '.$this->getValue('MIMEType')); } - // no break default: return parent::getValue($name); } } - - // public methods public function getImage($sourceFile = null): false|\GdImage { if (!isset($sourceFile)) { $sourceFile = $this->FilesystemPath ? $this->FilesystemPath : $this->BlankPath; } - $cmd = sprintf(static::$extractPageCommand, $sourceFile, static::$extractPageIndex); - $fileImage = imagecreatefromstring(shell_exec($cmd)); + $cmd = sprintf(static::$extractPageCommand, escapeshellarg($sourceFile . '[' . static::$extractPageIndex . ']')); + + if (!$imageData = shell_exec($cmd)) { + return false; + } - return $fileImage; + return imagecreatefromstring($imageData); } - // static methods public static function analyzeFile($filename, $mediaInfo = []) { - $cmd = sprintf(static::$extractPageCommand, $filename, static::$extractPageIndex); - $pageIm = @imagecreatefromstring(shell_exec($cmd)); + $cmd = sprintf(static::$extractPageCommand, escapeshellarg($filename . '[' . static::$extractPageIndex . ']')); + + if (!$imageData = shell_exec($cmd)) { + throw new Exception('Unable to convert PDF, ensure that imagemagick is installed on the server'); + } + + $pageIm = imagecreatefromstring($imageData); if (!$pageIm) { throw new Exception('Unable to convert PDF, ensure that imagemagick is installed on the server'); diff --git a/src/Models/Media/Video.php b/src/Models/Media/Video.php index 22572c3..55ed448 100644 --- a/src/Models/Media/Video.php +++ b/src/Models/Media/Video.php @@ -22,45 +22,59 @@ class Video extends Media { // configurables - public static $ExtractFrameCommand = 'avconv -ss %2$u -i %1$s -an -vframes 1 -f mjpeg -'; // 1=video path, 2=position + public static $ExtractFrameCommand = 'ffmpeg -ss %2$u -i %1$s -an -vframes 1 -f mjpeg pipe:1 2>/dev/null'; public static $ExtractFramePosition = 3; + public static $encodingProfiles = [ - // from https://www.virag.si/2012/01/web-video-encoding-tutorial-with-ffmpeg-0-9/ 'h264-high-480p' => [ 'enabled' => true, 'extension' => 'mp4', 'mimeType' => 'video/mp4', 'inputOptions' => [], - 'videoCodec' => 'h264', + 'videoCodec' => 'libx264', 'videoOptions' => [ 'profile:v' => 'high', 'preset' => 'slow', 'b:v' => '500k', 'maxrate' => '500k', 'bufsize' => '1000k', - 'vf' => 'scale="trunc(oh*a/2)*2:480"', // http://superuser.com/questions/571141/ffmpeg-avconv-force-scaled-output-to-be-divisible-by-2 + 'vf' => 'scale=trunc(oh*a/2)*2:480', ], 'audioCodec' => 'aac', - 'audioOptions' => [ - 'strict' => 'experimental', - ], + 'audioOptions' => [], ], - // from http://superuser.com/questions/556463/converting-video-to-webm-with-ffmpeg-avconv 'webm-480p' => [ 'enabled' => true, 'extension' => 'webm', 'mimeType' => 'video/webm', 'inputOptions' => [], - 'videoCodec' => 'libvpx', + 'videoCodec' => 'libvpx-vp9', 'videoOptions' => [ - 'vf' => 'scale=-1:480', + 'vf' => 'scale=-2:480', + 'b:v' => '500k', + 'deadline' => 'good', + 'cpu-used' => '2', ], - 'audioCodec' => 'libvorbis', + 'audioCodec' => 'libopus', + 'audioOptions' => [], ], ]; + public static $mimeTypeExtensions = [ + 'video/mp4' => 'mp4', + 'video/webm' => 'webm', + 'video/ogg' => 'ogv', + 'video/x-matroska' => 'mkv', + 'video/x-msvideo' => 'avi', + 'video/quicktime' => 'mov', + 'video/x-flv' => 'flv', + 'video/3gpp' => '3gp', + 'video/x-ms-wmv' => 'wmv', + 'video/mpeg' => 'mpg', + 'video/x-m4v' => 'm4v', + ]; public function getValue($name) { @@ -69,78 +83,79 @@ public function getValue($name) return 'image/jpeg'; case 'Extension': - - switch ($this->getValue('MIMEType')) { - case 'video/x-flv': - return 'flv'; - - case 'video/mp4': - return 'mp4'; - - case 'video/quicktime': - return 'mov'; - - default: - throw new Exception('Unable to find video extension for mime-type: '.$this->getValue('MIMEType')); + $mime = $this->getValue('MIMEType'); + if (isset(static::$mimeTypeExtensions[$mime])) { + return static::$mimeTypeExtensions[$mime]; + } + if (str_starts_with($mime, 'video/')) { + return substr($mime, 6); } + throw new Exception('Unable to find video extension for mime-type: ' . $mime); - // no break default: return parent::getValue($name); } } - - // public methods public function getImage($sourceFile = null): false|\GdImage { if (!isset($sourceFile)) { - $sourceFile = $this->getValue('FilesystemPath') ? $this->getValue('FilesystemPath') : $this->getValue('BlankPath'); + $sourceFile = $this->getValue('FilesystemPath') ?: $this->getValue('BlankPath'); } - $cmd = sprintf(self::$ExtractFrameCommand, $sourceFile, min(self::$ExtractFramePosition, floor($this->getValue('Duration')))); + $duration = (float)$this->getValue('Duration'); + $position = min(static::$ExtractFramePosition, max(0, (int)floor($duration))); + + $cmd = sprintf(static::$ExtractFrameCommand, escapeshellarg($sourceFile), $position); if ($imageData = shell_exec($cmd)) { return imagecreatefromstring($imageData); - } elseif ($sourceFile != $this->getValue('BlankPath')) { + } elseif ($sourceFile !== $this->getValue('BlankPath')) { return static::getImage($this->getValue('BlankPath')); } - return null; + return false; } /** - * Uses ffprobe to analyze the given file and returns meta data from the first video stream found - * * @param string $filename * @param array $mediaInfo * @return array */ public static function analyzeFile($filename, $mediaInfo = []) { - // examine media with ffprobe - $output = shell_exec("ffprobe -of json -show_streams -v quiet $filename"); + $output = shell_exec('ffprobe -of json -show_streams -show_format -v quiet ' . escapeshellarg($filename)); if (!$output || !($json = json_decode($output, true)) || empty($json['streams'])) { - throw new \Exception('Unable to examine video with ffprobe, ensure ffmpeg with ffprobe is installed'); + throw new Exception('Unable to examine video with ffprobe, ensure ffmpeg (with ffprobe) is installed'); } - // extract video streams - $videoStreams = array_filter($json['streams'], function ($streamInfo) { - return $streamInfo['codec_type'] == 'video'; - }); + $videoStreams = array_values(array_filter($json['streams'], fn ($s) => $s['codec_type'] === 'video')); if (!count($videoStreams)) { - throw new Exception('avprobe did not detect any video streams'); + throw new Exception('ffprobe did not detect any video streams'); } - // convert and write interesting information to mediaInfo - $mediaInfo['streams'] = $json['streams']; - $mediaInfo['videoStream'] = array_shift($videoStreams); + $mediaInfo['streams'] = $json['streams']; + $mediaInfo['videoStream'] = $videoStreams[0]; + + $mediaInfo['width'] = (int)$mediaInfo['videoStream']['width']; + $mediaInfo['height'] = (int)$mediaInfo['videoStream']['height']; + + $mediaInfo['duration'] = (float)( + $mediaInfo['videoStream']['duration'] + ?? $json['format']['duration'] + ?? 0 + ); - $mediaInfo['width'] = (int)$mediaInfo['videoStream']['width']; - $mediaInfo['height'] = (int)$mediaInfo['videoStream']['height']; - $mediaInfo['duration'] = (float)$mediaInfo['videoStream']['duration']; + $rotation = 0; + foreach ($mediaInfo['videoStream']['side_data_list'] ?? [] as $sideData) { + if (($sideData['side_data_type'] ?? '') === 'Display Matrix') { + $rotation = (int)abs($sideData['rotation'] ?? 0); + break; + } + } + $mediaInfo['rotation'] = $rotation; return $mediaInfo; } @@ -149,16 +164,8 @@ public function writeFile($sourceFile): bool { parent::writeFile($sourceFile); - - // determine rotation metadata with exiftool - $exifToolOutput = exec("exiftool -S -Rotation $this->FilesystemPath"); - - if (!$exifToolOutput || !preg_match('/Rotation\s*:\s*(?\d+)/', $exifToolOutput, $matches)) { - throw new Exception('Unable to examine video with exiftool, ensure libimage-exiftool-perl is installed on the host system'); - } - - $sourceRotation = intval($matches['rotation']); - + $mediaInfo = static::analyzeFile($this->FilesystemPath); + $sourceRotation = (int)($mediaInfo['rotation'] ?? 0); // fork encoding job with each configured profile foreach (static::$encodingProfiles as $profileName => $profile) { @@ -166,76 +173,72 @@ public function writeFile($sourceFile): bool continue; } - // build paths and create directories if needed $outputPath = $this->getFilesystemPath($profileName); if (!is_dir($outputDir = dirname($outputPath))) { mkdir($outputDir, static::$newDirectoryPermissions, true); } - $tmpOutputPath = $outputDir.'/'.'tmp-'.basename($outputPath); - ; - + $tmpOutputPath = $outputDir . '/tmp-' . basename($outputPath); - // build avconv command - $cmd = ['avconv', '-loglevel quiet']; + $cmd = ['ffmpeg', '-loglevel quiet', '-y']; // -- input options if (!empty($profile['inputOptions'])) { - static::_appendAvconvOptions($cmd, $profile['inputOptions']); + static::_appendFfmpegOptions($cmd, $profile['inputOptions']); } $cmd[] = '-i'; - $cmd[] = $this->FilesystemPath; + $cmd[] = escapeshellarg($this->FilesystemPath); - // -- video output options $cmd[] = '-codec:v'; $cmd[] = $profile['videoCodec']; - if (!empty($profile['videoOptions'])) { - static::_appendAvconvOptions($cmd, $profile['videoOptions']); + + $videoOptions = $profile['videoOptions'] ?? []; + + if ($sourceRotation !== 0) { + $transpose = match($sourceRotation) { + 90 => 'transpose=1', + 180 => 'transpose=1,transpose=1', + 270 => 'transpose=2', + default => null, + }; + if ($transpose) { + $videoOptions['vf'] = isset($videoOptions['vf']) + ? $videoOptions['vf'] . ',' . $transpose + : $transpose; + } } - // -- audio output options - $cmd[] = '-codec:a'; - $cmd[] = $profile['audioCodec']; - if (!empty($profile['audioOptions'])) { - static::_appendAvconvOptions($cmd, $profile['audioOptions']); + if (!empty($videoOptions)) { + static::_appendFfmpegOptions($cmd, $videoOptions); } - // -- normalize smartphone rotation - $cmd[] = '-metadata:s:v rotate="0"'; + $cmd[] = '-metadata:s:v:0'; + $cmd[] = 'rotate=0'; - if ($sourceRotation == 90) { - $cmd[] = '-vf "transpose=1"'; - } elseif ($sourceRotation == 180) { - $cmd[] = '-vf "transpose=1,transpose=1"'; - } elseif ($sourceRotation == 270) { - $cmd[] = '-vf "transpose=1,transpose=1,transpose=1"'; + $cmd[] = '-codec:a'; + $cmd[] = $profile['audioCodec']; + if (!empty($profile['audioOptions'])) { + static::_appendFfmpegOptions($cmd, $profile['audioOptions']); } // -- general output options if (!empty($profile['outputOptions'])) { - static::_appendAvconvOptions($cmd, $profile['outputOptions']); + static::_appendFfmpegOptions($cmd, $profile['outputOptions']); } - $cmd[] = $tmpOutputPath; + $cmd[] = escapeshellarg($tmpOutputPath); + $cmd[] = '&& mv ' . escapeshellarg($tmpOutputPath) . ' ' . escapeshellarg($outputPath); - // move to final path after it finished - $cmd[] = "&& mv $tmpOutputPath $outputPath"; + $fullCmd = '(nohup ' . implode(' ', $cmd) . ') > /dev/null 2>/dev/null & echo $!'; - - // convert command to string and decorate for process control - $cmd = '(nohup '.implode(' ', $cmd).') > /dev/null 2>/dev/null & echo $! &'; - - - // execute command and retrieve the spawned PID - $pid = exec($cmd); - // TODO: store PID somewhere in APCU cache so we can do something smarter when a video is requested before it's done encoding + $pid = exec($fullCmd); } return true; } - public function getFilesystemPath($variant = 'original', $filename = null): string + public function getFilesystemPath($variant = 'original', $filename = null): ?string { if (!$filename && array_key_exists($variant, static::$encodingProfiles)) { $filename = $this->ID.'.'.static::$encodingProfiles[$variant]['extension']; @@ -254,7 +257,7 @@ public function getMIMEType($variant = 'original'): string return parent::getMIMEType($variant); } - public function isVariantAvailable($variant) + public function isVariantAvailable($variant): bool { if ( array_key_exists($variant, static::$encodingProfiles) && @@ -267,15 +270,14 @@ public function isVariantAvailable($variant) return parent::isVariantAvailable($variant); } - protected static function _appendAvconvOptions(array &$cmd, array $options) + protected static function _appendFfmpegOptions(array &$cmd, array $options): void { foreach ($options as $key => $value) { if (!is_int($key)) { - $cmd[] = '-'.$key; + $cmd[] = '-' . $key; } - - if ($value) { - $cmd[] = $value; + if ($value !== null && $value !== false) { + $cmd[] = escapeshellarg((string) $value); } } } diff --git a/tests/Divergence/Controllers/RecordsRequestHandlerTest.php b/tests/Divergence/Controllers/RecordsRequestHandlerTest.php index ba4f09e..508a8b6 100644 --- a/tests/Divergence/Controllers/RecordsRequestHandlerTest.php +++ b/tests/Divergence/Controllers/RecordsRequestHandlerTest.php @@ -11,6 +11,7 @@ namespace Divergence\Tests\Controllers; use Divergence\App; +use Error; use ReflectionClass; use Twig\Error\LoaderError; use Divergence\Helpers\JSON; @@ -920,7 +921,7 @@ public function testNoWriteAccessDelete() // write access denied public function testProcessDatumSaveNoWriteAccess() { - $this->expectException('Exception'); + $this->expectException(Error::class); $controller = new SecureCanaryRequestHandler(); $controller->processDatumSave([ 'ID' => '1', @@ -931,7 +932,7 @@ public function testProcessDatumSaveNoWriteAccess() // database error public function testProcessDatumSaveDatabaseError() { - $this->expectException('Exception'); + $this->expectException(Error::class); $controller = new CanaryRequestHandler(); $controller->processDatumSave([ 'Created' => 'fake', @@ -941,7 +942,7 @@ public function testProcessDatumSaveDatabaseError() // write access denied public function testProcessDatumDestroyNoWriteAccess() { - $this->expectException('Exception'); + $this->expectException(Error::class); $controller = new SecureCanaryRequestHandler(); $controller->processDatumDestroy([ 'ID' => '1', @@ -951,7 +952,7 @@ public function testProcessDatumDestroyNoWriteAccess() // missing key public function testProcessDatumDestroyNoKey() { - $this->expectException('Exception'); + $this->expectException(Error::class); $controller = new CanaryRequestHandler(); $controller->processDatumDestroy([ 'fake' => 'fake', @@ -962,7 +963,7 @@ public function testProcessDatumDestroyNoKey() public function testProcessDatumDestroyFailed() { DB::nonQuery('LOCK TABLES `canaries` READ'); - $this->expectException('Exception'); + $this->expectException(Error::class); $controller = new CanaryRequestHandler(); $controller->processDatumDestroy([ 'ID' => '1', diff --git a/tests/Divergence/Data/Collections/CollectionCriteriaTest.php b/tests/Divergence/Data/Collections/CollectionCriteriaTest.php new file mode 100644 index 0000000..7b67d06 --- /dev/null +++ b/tests/Divergence/Data/Collections/CollectionCriteriaTest.php @@ -0,0 +1,616 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Divergence\Tests\Data\Collections; + +use stdClass; +use Error; +use RuntimeException; +use Exception; +use PHPUnit\Framework\TestCase; +use Divergence\Data\Collections\Collection; +use Divergence\Data\Collections\IndexedField; +use Divergence\Data\Collections\Factory\Factory; +use Divergence\Data\Collections\Factory\Getters\GetByField; +use Divergence\Models\Expr\Criteria; +use Divergence\Models\Expr\CriteriaGroup; +use Divergence\Models\Expr\CriteriaType; +use Divergence\Models\Expr\Conjunction; + +class CollectionCriteriaTest extends TestCase +{ + private Collection $Collection; + + protected function setUp(): void + { + $this->Collection = (new Factory())->create(static::buildRecords(), ['Status', 'Team', 'Score']); + } + + /** + * @return array + */ + private static function buildRecords(): array + { + $records = []; + + for ($i = 1; $i <= 100; $i++) { + $record = new stdClass(); + $record->ID = $i; + $record->Name = sprintf('Record %03d', $i); + $record->Status = $i % 4; + $record->Team = $i % 10; + $record->Score = $i * 10; + $record->ScoreCopy = $i * 10; + $record->Threshold = 500; + $record->Tag = ['alpha', 'beta', 'gamma', 'delta'][$i % 4]; + $record->Note = ($i % 5 === 0) ? null : sprintf('note-%d', $i); + $records[] = $record; + } + + return $records; + } + + private function assertOperatorCount(int $operator, string $field, $value, int $expectedCount): void + { + $matches = $this->Collection->getAllByCriteria(new Criteria($field, $value, $operator)); + + $this->assertCount($expectedCount, $matches); + } + + public function testEqualOperator(): void + { + $this->assertOperatorCount(CriteriaType::Equal, 'Score', 500, 1); + } + + public function testNotEqualOperator(): void + { + $this->assertOperatorCount(CriteriaType::NotEqual, 'Team', 0, 90); + } + + public function testGreaterThanOperator(): void + { + $this->assertOperatorCount(CriteriaType::GreaterThan, 'Score', 950, 5); + } + + public function testGreaterThanOrEqualOperator(): void + { + $this->assertOperatorCount(CriteriaType::GreaterThanOrEqual, 'Score', 950, 6); + } + + public function testLessThanOperator(): void + { + $this->assertOperatorCount(CriteriaType::LessThan, 'Score', 50, 4); + } + + public function testLessThanOrEqualOperator(): void + { + $this->assertOperatorCount(CriteriaType::LessThanOrEqual, 'Score', 50, 5); + } + + public function testLikeOperator(): void + { + $this->assertOperatorCount(CriteriaType::Like, 'Tag', 'al%', 25); + } + + public function testNotLikeOperator(): void + { + $this->assertOperatorCount(CriteriaType::NotLike, 'Tag', 'al%', 75); + } + + public function testInOperator(): void + { + $this->assertOperatorCount(CriteriaType::In, 'Team', [1, 2, 3], 30); + } + + public function testNotInOperator(): void + { + $this->assertOperatorCount(CriteriaType::NotIn, 'Team', [1, 2, 3], 70); + } + + public function testNulledOperator(): void + { + $this->assertOperatorCount(CriteriaType::Nulled, 'Note', null, 20); + } + + public function testNotNulledOperator(): void + { + $this->assertOperatorCount(CriteriaType::NotNulled, 'Note', null, 80); + } + + public function testFieldEqualOperator(): void + { + $this->assertOperatorCount(CriteriaType::FieldEqual, 'Score', 'ScoreCopy', 100); + } + + public function testFieldNotEqualOperator(): void + { + $this->assertOperatorCount(CriteriaType::FieldNotEqual, 'Score', 'Threshold', 99); + } + + public function testFieldGreaterThanOperator(): void + { + $this->assertOperatorCount(CriteriaType::FieldGreaterThan, 'Score', 'Threshold', 50); + } + + public function testFieldGreaterThanOrEqualOperator(): void + { + $this->assertOperatorCount(CriteriaType::FieldGreaterThanOrEqual, 'Score', 'Threshold', 51); + } + + public function testFieldLessThanOperator(): void + { + $this->assertOperatorCount(CriteriaType::FieldLessThan, 'Score', 'Threshold', 49); + } + + public function testFieldLessThanOrEqualOperator(): void + { + $this->assertOperatorCount(CriteriaType::FieldLessThanOrEqual, 'Score', 'Threshold', 50); + } + + public function testGetByCriteriaReturnsFirstMatch(): void + { + $found = $this->Collection->getByCriteria(new Criteria('Score', 500, CriteriaType::Equal)); + + $this->assertNotNull($found); + $this->assertSame('Record 050', $found->Name); + } + + public function testGetByCriteriaReturnsNullWhenNoMatch(): void + { + $found = $this->Collection->getByCriteria(new Criteria('Score', 999999, CriteriaType::Equal)); + + $this->assertNull($found); + } + + public function testNestedAndOr(): void + { + $tree = new CriteriaGroup([ + new CriteriaGroup([ + new Criteria('Team', 2, CriteriaType::Equal), + new Criteria('Score', 20, CriteriaType::Equal), + ], Conjunction::GroupAnd), + new CriteriaGroup([ + new Criteria('Team', 0, CriteriaType::Equal), + new Criteria('Score', 1000, CriteriaType::Equal), + ], Conjunction::GroupAnd), + ], Conjunction::GroupOr); + + $names = []; + foreach ($this->Collection->getAllByCriteria($tree) as $record) { + $names[] = $record->Name; + } + sort($names); + + $this->assertSame(['Record 002', 'Record 100'], $names); + } + + public function testNotAndIsNegationOfAnd(): void + { + $and = new CriteriaGroup([ + new Criteria('Team', 1, CriteriaType::Equal), + new Criteria('Status', 1, CriteriaType::Equal), + ], Conjunction::GroupAnd); + + $notAnd = new CriteriaGroup($and->criteria, Conjunction::GroupNotAnd); + + $andCount = count($this->Collection->getAllByCriteria($and)); + $notAndCount = count($this->Collection->getAllByCriteria($notAnd)); + + $this->assertSame(100, $andCount + $notAndCount); + } + + public function testNotOrIsNegationOfOr(): void + { + $or = new CriteriaGroup([ + new Criteria('Team', 1, CriteriaType::Equal), + new Criteria('Status', 1, CriteriaType::Equal), + ], Conjunction::GroupOr); + + $notOr = new CriteriaGroup($or->criteria, Conjunction::GroupNotOr); + + $orCount = count($this->Collection->getAllByCriteria($or)); + $notOrCount = count($this->Collection->getAllByCriteria($notOr)); + + $this->assertSame(100, $orCount + $notOrCount); + } + + public function testSingleCriterionNotAndGroupReturnsComplement(): void + { + $matches = $this->Collection->getAllByCriteria(new CriteriaGroup([ + new Criteria('Team', 1, CriteriaType::Equal), + ], Conjunction::GroupNotAnd)); + + $this->assertCount(90, $matches); + } + + public function testSingleCriterionNotOrGroupReturnsComplement(): void + { + $matches = $this->Collection->getAllByCriteria(new CriteriaGroup([ + new Criteria('Team', 1, CriteriaType::Equal), + ], Conjunction::GroupNotOr)); + + $this->assertCount(90, $matches); + } + + public function testEmptyAndGroupMatchesNothing(): void + { + $matches = $this->Collection->getAllByCriteria(new CriteriaGroup([], Conjunction::GroupAnd)); + + $this->assertCount(0, $matches); + } + + public function testEmptyOrGroupMatchesNothing(): void + { + $matches = $this->Collection->getAllByCriteria(new CriteriaGroup([], Conjunction::GroupOr)); + + $this->assertCount(0, $matches); + } + + public function testGetAllByCriteriaWithAndGroup(): void + { + $matches = $this->Collection->getAllByCriteria(new CriteriaGroup([ + new Criteria('Team', 1, CriteriaType::Equal), + new Criteria('Status', 1, CriteriaType::Equal), + ], Conjunction::GroupAnd)); + + $this->assertCount(5, $matches); + $this->assertSame('Record 001', $matches[0]->Name); + } + + public function testGetAllByCriteriaReturnsArray(): void + { + $matches = $this->Collection->getAllByCriteria(new Criteria('Team', 1, CriteriaType::Equal)); + + $this->assertIsArray($matches); + $this->assertCount(10, $matches); + } + + public function testValidateAlwaysReturnsTrue(): void + { + $this->assertTrue($this->Collection->validate('anything')); + $this->assertTrue($this->Collection->validate(null)); + } + + public function testRemoveDeletesRecordAndClearsIndex(): void + { + $record = $this->Collection[0]; + + $this->Collection->remove($record); + + $this->assertCount(99, $this->Collection); + $this->assertNull($this->Collection->getByField('Score', $record->Score)); + } + + public function testRemoveManyDeletesMultipleRecords(): void + { + $records = [$this->Collection[0], $this->Collection[1], $this->Collection[2]]; + + $this->Collection->removeMany($records); + + $this->assertCount(97, $this->Collection); + } + + public function testToArrayReturnsIndexArray(): void + { + $array = $this->Collection->toArray(); + + $this->assertIsArray($array); + $this->assertCount(100, $array); + $this->assertSame($this->Collection->Index, $array); + } + + public function testHasIndexReturnsTrueForConfiguredFieldAndFalseOtherwise(): void + { + $this->assertTrue($this->Collection->hasIndex('Team')); + $this->assertFalse($this->Collection->hasIndex('NotAnIndexedField')); + } + + public function testUpdateIndexForModelDirectCall(): void + { + $record = $this->Collection[0]; + $record->Team = 99; + + $this->Collection->updateIndexForModel('Team', $record); + + $this->assertSame($record, $this->Collection->getByField('Team', 99)); + } + + public function testClearIndexesDirectCall(): void + { + $record = $this->Collection[0]; + + $this->Collection->clearIndexes($record); + + $this->assertNull($this->Collection->getByField('Score', $record->Score)); + } + + public function testKeyReturnsCurrentPosition(): void + { + $this->Collection->rewind(); + $this->assertSame(0, $this->Collection->key()); + + $this->Collection->next(); + $this->assertSame(1, $this->Collection->key()); + } + + public function testOffsetSetAddsRecordWithNullOffset(): void + { + $record = new stdClass(); + $record->ID = 101; + $record->Status = 0; + $record->Team = 0; + $record->Score = 1234; + + $this->Collection[] = $record; + + $this->assertCount(101, $this->Collection); + $this->assertSame($record, $this->Collection[100]); + } + + public function testDuplicateIdentityDoesNotDivergeCollectionAndIndexCounts(): void + { + $record = new stdClass(); + $record->Status = 1; + $collection = (new Factory())->create([$record], ['Status']); + + $collection->add($record); + + $this->assertCount($collection->count(), $collection->getAllByField('Status', 1)); + } + + public function testObjectRecordsHaveDistinctIdentities(): void + { + $first = new stdClass(); + $first->ID = 1; + $first->Status = 1; + + $second = new stdClass(); + $second->ID = 2; + $second->Status = 1; + + $collection = (new Factory())->create([ + $first, + $second, + ], ['Status']); + + $this->assertCount(2, $collection); + $this->assertCount(2, $collection->getAllByField('Status', 1)); + } + + public function testOffsetSetReplacesRecordAtExistingOffset(): void + { + $original = $this->Collection[0]; + $replacement = new stdClass(); + $replacement->ID = $original->ID; + $replacement->Status = $original->Status; + $replacement->Team = $original->Team; + $replacement->Score = 98765; + + $this->Collection[0] = $replacement; + + $this->assertSame($replacement, $this->Collection[0]); + $this->assertNull($this->Collection->getByField('Score', $original->Score)); + $this->assertSame($replacement, $this->Collection->getByField('Score', 98765)); + } + + public function testOffsetSetRemovesReplacedRecordFromHashKeyIndex(): void + { + $original = $this->Collection[0]; + $replacement = clone $original; + + $this->Collection[0] = $replacement; + + $this->assertArrayNotHasKey(spl_object_id($original), $this->Collection->HashKeyIndex); + } + + public function testOffsetExists(): void + { + $this->assertTrue(isset($this->Collection[0])); + $this->assertFalse(isset($this->Collection[999])); + } + + public function testOffsetUnset(): void + { + unset($this->Collection[0]); + + $this->assertCount(99, $this->Collection); + $this->assertSame(2, $this->Collection[0]->ID); + } + + public function testOffsetUnsetKeepsIterationAndNegativeOffsetsConsistent(): void + { + $last = $this->Collection[-1]; + + unset($this->Collection[0]); + + $this->assertSame( + [99, $last], + [count(iterator_to_array($this->Collection, false)), $this->Collection[-1]] + ); + } + + public function testOffsetGetNegativeIndex(): void + { + $this->assertSame($this->Collection[99], $this->Collection[-1]); + } + + public function testGetterMagicCallThrowsForUndefinedMethod(): void + { + $this->expectException(Error::class); + $this->expectExceptionMessage(sprintf( + 'Call to undefined method %s::bogusGetterMethod()', + Collection::class + )); + + $this->Collection->bogusGetterMethod(); + } + + public function testGetterMagicCallStaticDelegatesToFactory(): void + { + $fresh = Collection::create([], []); + + $this->assertInstanceOf(Collection::class, $fresh); + $this->assertNotSame($this->Collection, $fresh); + } + + public function testGetterMagicCallStaticThrowsForUndefinedMethod(): void + { + $this->expectException(Error::class); + $this->expectExceptionMessage(sprintf( + 'Call to undefined method %s::bogusStaticMethod()', + Collection::class + )); + + Collection::bogusStaticMethod(); + } + + public function testCriteriaRawOperatorDoesNotOverrideTypedOperator(): void + { + $criteria = new Criteria('Score', 500); + $criteria->rawOperator = '= 500'; + + $matches = $this->Collection->getAllByCriteria($criteria); + + $this->assertCount(1, $matches); + $this->assertSame('Record 050', $matches[0]->Name); + } + + public function testUnsupportedCriteriaOperatorCannotBeEvaluatedInMemory(): void + { + $this->expectException(RuntimeException::class); + + $this->Collection->getAllByCriteria(new Criteria('Score', 500, CriteriaType::Raw)); + } + + public function testFactoryThrowsOnGetterMethodCollision(): void + { + $this->expectException(Exception::class); + $this->expectExceptionMessage('Getter method collision for getbyfield'); + + new class extends Factory { + protected function registerGetterClasses(): void + { + $this->registerGetterClass(GetByField::class); + $this->registerGetterClass(GetByField::class); + } + }; + } + + public function testCreateIndexByFieldRebuildsIndexFromExistingRecords(): void + { + $this->Collection->createIndexByField('ID'); + + $this->assertTrue($this->Collection->hasIndex('ID')); + $this->assertSame(50, $this->Collection->getByField('ID', 50)->ID); + } + + public function testGetByFieldReturnsNullWhenValueNotIndexed(): void + { + $this->assertNull($this->Collection->getByField('Team', 99999)); + } + + public function testGetByFieldReturnsNullForUnindexedField(): void + { + $this->assertNull($this->Collection->getByField('NotAnIndexedField', 'anything')); + } + + public function testGetAllByFieldReturnsMatchingRecords(): void + { + $matches = $this->Collection->getAllByField('Team', 5); + + $this->assertInstanceOf(Collection::class, $matches); + $this->assertCount(10, $matches); + } + + public function testIndexedFieldIndexableValueHandlesDateStringType(): void + { + $index = new IndexedField('CreatedAt', 'DateString'); + + $this->assertSame(strtotime('2024-01-01'), $index->indexableValue('2024-01-01')); + } + + private function buildTimestampIndex(): IndexedField + { + $first = new stdClass(); + $first->CreatedAt = '2024-01-01 00:00:00'; + $second = new stdClass(); + $second->CreatedAt = '2024-01-02 00:00:00'; + $records = [$first, $second]; + $index = new IndexedField('CreatedAt', 'timestamp'); + $index->rebuildIndex($records); + + return $index; + } + + public function testTimestampInOperatorAcceptsArrays(): void + { + $matches = $this->buildTimestampIndex()->find( + ['2024-01-01 00:00:00'], + CriteriaType::In + ); + + $this->assertCount(1, $matches ?: []); + } + + public function testTimestampNotInOperatorAcceptsArrays(): void + { + $matches = $this->buildTimestampIndex()->find( + ['2024-01-01 00:00:00'], + CriteriaType::NotIn + ); + + $this->assertCount(1, $matches ?: []); + } + + public function testTimestampIndexNormalizesUnixEpoch(): void + { + $index = new IndexedField('CreatedAt', 'timestamp'); + + $this->assertSame(0, $index->indexableValue('1970-01-01 00:00:00 UTC')); + } + + public function testIndexedFieldRemovesUnusedCardinalities(): void + { + $index = new class('Status') extends IndexedField { + public function countCardinalities(): int + { + return count($this->cardinality); + } + }; + $record = new stdClass(); + $record->Status = 'first'; + $index->set($record); + + $record->Status = 'second'; + $index->set($record); + + $this->assertSame(1, $index->countCardinalities()); + } + + public function testIndexedFieldIndexableValueCastsFloatToString(): void + { + $index = new IndexedField('Score'); + + $this->assertSame((string) 1.5, $index->indexableValue(1.5)); + } + + public function testRemoveDecrementsPositionWhenRemovingRecordBeforeCurrentPosition(): void + { + $this->Collection->rewind(); + $this->Collection->next(); + $this->Collection->next(); + $this->Collection->next(); + + $record = $this->Collection[0]; + $this->Collection->remove($record); + + $this->assertSame(2, $this->Collection->key()); + } +} diff --git a/tests/Divergence/Data/Collections/RecordKeyTest.php b/tests/Divergence/Data/Collections/RecordKeyTest.php new file mode 100644 index 0000000..295f06a --- /dev/null +++ b/tests/Divergence/Data/Collections/RecordKeyTest.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Divergence\Tests\Data\Collections; + +use stdClass; +use PHPUnit\Framework\TestCase; +use Divergence\Data\Collections\RecordKey; +use Divergence\Tests\MockSite\Models\FixtureItem; + +class RecordKeyTest extends TestCase +{ + public function testUsesPrimaryKeyForActiveRecord(): void + { + $record = new FixtureItem([ + 'ID' => 123, + 'Name' => 'Record', + 'Team' => 1, + 'Score' => 10, + ], false, false); + + $this->assertSame(123, RecordKey::get($record)); + } + + public function testUsesObjectIdentityForPlainObject(): void + { + $record = new stdClass(); + + $this->assertSame(spl_object_id($record), RecordKey::get($record)); + } + + public function testUsesObjectIdentityForNonModelWithPrimaryKeyMethod(): void + { + $record = new class { + public function getPrimaryKeyValue(): int + { + return 123; + } + }; + + $this->assertSame(spl_object_id($record), RecordKey::get($record)); + } +} diff --git a/tests/Divergence/Data/KeyToHashIntTest.php b/tests/Divergence/Data/KeyToHashIntTest.php new file mode 100644 index 0000000..7bbdcaf --- /dev/null +++ b/tests/Divergence/Data/KeyToHashIntTest.php @@ -0,0 +1,23 @@ +assertSame(123, KeyToHashInt::hashForKeys([123])); + $singleton = KeyToHashInt::$singleton; + + $this->assertSame(456, KeyToHashInt::hashForKeys([456])); + $this->assertSame($singleton, KeyToHashInt::$singleton); + } +} diff --git a/tests/Divergence/IO/Database/SQLTest.php b/tests/Divergence/IO/Database/SQLTest.php index ac74e67..8b60867 100644 --- a/tests/Divergence/IO/Database/SQLTest.php +++ b/tests/Divergence/IO/Database/SQLTest.php @@ -42,8 +42,8 @@ public function testEscape() public function testGetCreateTable() { - $Expected[Tag::class] = 'ae3e735ba26bdd70332877d0458a5ff98a6580dc'; - $Expected[Canary::class] = '9aca8005cf7bf72f3873de36c14dbf121c4bca35'; + $Expected[Tag::class] = '2a6459dc1f43846be657a77347c221e76a66f88a'; + $Expected[Canary::class] = 'c80a4195924a505ef974aa43c6e91d7c688fc460'; foreach ($Expected as $Class=>$Hash) { $this->assertEquals($Hash, sha1(SQL::getCreateTable($Class))); @@ -52,7 +52,7 @@ public function testGetCreateTable() public function testGetCreateTableVersioned() { - $Expected[Canary::class] = '492078c2af3848f4b4d4448b8bdf1086310e2bd5'; + $Expected[Canary::class] = '950d3081e5c841834cda565bc1e70e4e3420a65a'; foreach ($Expected as $Class=>$Hash) { $this->assertEquals($Hash, sha1(SQL::getCreateTable($Class, true))); } diff --git a/tests/Divergence/Models/Collections/CanaryCollectionTest.php b/tests/Divergence/Models/Collections/CanaryCollectionTest.php new file mode 100644 index 0000000..2a615c6 --- /dev/null +++ b/tests/Divergence/Models/Collections/CanaryCollectionTest.php @@ -0,0 +1,219 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Divergence\Tests\Models\Collections; + +use PHPUnit\Framework\TestCase; +use Divergence\Models\Collections\IndexedRecordField; +use Divergence\Models\Collections\RecordCollection; +use Divergence\Models\Expr\Conjunction; +use Divergence\Models\Expr\Criteria; +use Divergence\Models\Expr\CriteriaGroup; +use Divergence\Tests\TestUtils; +use Divergence\Tests\MockSite\Collections\CanaryCollection; +use Divergence\Tests\MockSite\Models\Canary; +use Divergence\Tests\MockSite\Models\IndexedCanary; +use Divergence\Tests\MockSite\Models\Tag; + +class CanaryCollectionTest extends TestCase +{ + private const FIELD_TYPES = [ + 'ID' => 'integer', + 'Class' => 'enum', + 'Created' => 'timestamp', + 'CreatorID' => 'integer', + 'ContextID' => 'int', + 'ContextClass' => 'enum', + 'DNA' => 'clob', + 'Name' => 'string', + 'Handle' => 'string', + 'isAlive' => 'boolean', + 'DNAHash' => 'password', + 'StatusCheckedLast' => 'timestamp', + 'SerializedData' => 'serialized', + 'Colors' => 'set', + 'EyeColors' => 'list', + 'Height' => 'float', + 'LongestFlightTime' => 'int', + 'HighestRecordedAltitude' => 'uint', + 'ObservationCount' => 'integer', + 'DateOfBirth' => 'date', + 'Weight' => 'decimal', + 'RevisionID' => 'integer', + ]; + + private CanaryCollection $Collection; + + protected function setUp(): void + { + $this->Collection = new CanaryCollection([ + new Canary(static::record(1), false, false), + new Canary(static::record(2), false, false), + ]); + } + + private static function record(int $id): array + { + return [ + 'ID' => $id, + 'Class' => Canary::class, + 'Created' => sprintf('2024-01-%02d 03:04:05', $id), + 'CreatorID' => 100 + $id, + 'ContextID' => 200 + $id, + 'ContextClass' => Tag::class, + 'DNA' => str_repeat($id === 1 ? 'ATGC' : 'CGTA', 250), + 'Name' => sprintf('Canary %d', $id), + 'Handle' => sprintf('canary-%d', $id), + 'isAlive' => $id === 1, + 'DNAHash' => hash('sha256', sprintf('canary-%d', $id)), + 'StatusCheckedLast' => sprintf('2024-02-%02d 04:05:06', $id), + 'SerializedData' => serialize(['canary' => $id, 'nested' => ['alive' => $id === 1]]), + 'Colors' => $id === 1 ? ['red', 'purple'] : ['blue', 'green'], + 'EyeColors' => $id === 1 ? ['amber', 'brown'] : ['cyan', 'teal'], + 'Height' => 10.5 + $id, + 'LongestFlightTime' => 1000 + $id, + 'HighestRecordedAltitude' => 2000 + $id, + 'ObservationCount' => 3000 + $id, + 'DateOfBirth' => sprintf('2020-03-%02d', $id), + 'Weight' => sprintf('1%d.2%d', $id, $id), + 'RevisionID' => 4000 + $id, + ]; + } + + public function testIndexesEveryCanaryField(): void + { + $this->assertEqualsCanonicalizing( + array_keys(Canary::getClassFields()), + array_keys(static::FIELD_TYPES) + ); + $this->assertEqualsCanonicalizing( + array_keys(static::FIELD_TYPES), + array_keys($this->Collection->Indexes) + ); + } + + public function testIndexedCanaryAttributeCreatesCollectionWithEveryFieldIndex(): void + { + TestUtils::requireDB($this); + + $Collection = IndexedCanary::getAll(['order' => ['ID' => 'ASC']]); + + $this->assertInstanceOf(RecordCollection::class, $Collection); + $this->assertSame(IndexedCanary::class, $Collection->recordClassName); + $this->assertNotEmpty($Collection); + $this->assertEqualsCanonicalizing( + array_keys(IndexedCanary::getClassFields()), + array_keys($Collection->Indexes) + ); + + $Canary = $Collection[0]; + + foreach (static::FIELD_TYPES as $field => $type) { + $this->assertInstanceOf(IndexedRecordField::class, $Collection->Indexes[$field]); + $this->assertSame($type, $Collection->Indexes[$field]->type); + $this->assertSame($Canary, $Collection->getByField($field, $Canary->getValue($field))); + } + } + + public function testIndexedCanaryAttributeReturnsFreshCollections(): void + { + TestUtils::requireDB($this); + + $FirstCollection = IndexedCanary::getAll(['limit' => 1]); + $SecondCollection = IndexedCanary::getAll(['limit' => 1]); + + $this->assertNotSame($FirstCollection, $SecondCollection); + $this->assertNotSame($FirstCollection[0], $SecondCollection[0]); + $this->assertSame($FirstCollection[0]->ID, $SecondCollection[0]->ID); + } + + public function testIndexedCanaryOrCriteriaReturnsKnownLiveRecords(): void + { + TestUtils::requireDB($this); + + $Collection = IndexedCanary::getAll(['order' => ['ID' => 'ASC']]); + + $this->assertGreaterThanOrEqual(2, count($Collection)); + + $FirstCanary = $Collection[0]; + $SecondCanary = $Collection[1]; + + $this->assertNotSame($FirstCanary->ID, $SecondCanary->ID); + $this->assertNotSame($FirstCanary->Handle, $SecondCanary->Handle); + + $matches = $Collection->getAllByCriteria(new CriteriaGroup([ + new Criteria('ID', $FirstCanary->ID), + new Criteria('Handle', $SecondCanary->Handle), + ], Conjunction::GroupOr)); + + $this->assertSame([$FirstCanary, $SecondCanary], $matches); + } + + public function testIndexedCanaryNotOrCriteriaReturnsKnownLiveComplement(): void + { + TestUtils::requireDB($this); + + $Collection = IndexedCanary::getAll(['order' => ['ID' => 'ASC']]); + + $this->assertGreaterThanOrEqual(2, count($Collection)); + + $matches = $Collection->getAllByCriteria(new CriteriaGroup([ + new Criteria('ID', $Collection[0]->ID), + new Criteria('Handle', $Collection[1]->Handle), + ], Conjunction::GroupNotOr)); + + $this->assertSame(array_slice($Collection->toArray(), 2), $matches); + } + + public function testIndexedCanaryAttributeReturnsIndexedEmptyOrmResult(): void + { + TestUtils::requireDB($this); + + $Collection = IndexedCanary::getAll(); + + $this->assertNotEmpty($Collection); + + $IDs = array_map(function ($Canary) { + return $Canary->ID; + }, $Collection->toArray()); + $EmptyCollection = IndexedCanary::getAllByWhere([ + 'ID' => max($IDs) + 1, + ]); + + $this->assertInstanceOf(RecordCollection::class, $EmptyCollection); + $this->assertSame(IndexedCanary::class, $EmptyCollection->recordClassName); + $this->assertCount(0, $EmptyCollection); + $this->assertEqualsCanonicalizing( + array_keys(IndexedCanary::getClassFields()), + array_keys($EmptyCollection->Indexes) + ); + } + + public function testCanaryWithoutAttributeStillReturnsArray(): void + { + TestUtils::requireDB($this); + + $records = Canary::getAll(['limit' => 1]); + + $this->assertIsArray($records); + $this->assertInstanceOf(Canary::class, $records[0]); + } + + public function testEveryCanaryFieldTypeCanBeIndexed(): void + { + $Canary = $this->Collection[0]; + + foreach (static::FIELD_TYPES as $field => $type) { + $this->assertInstanceOf(IndexedRecordField::class, $this->Collection->Indexes[$field]); + $this->assertSame($type, $this->Collection->Indexes[$field]->type); + $this->assertSame($Canary, $this->Collection->getByField($field, $Canary->getValue($field))); + } + } +} diff --git a/tests/Divergence/Models/Collections/RecordCollectionSaveTest.php b/tests/Divergence/Models/Collections/RecordCollectionSaveTest.php new file mode 100644 index 0000000..5fbe4ef --- /dev/null +++ b/tests/Divergence/Models/Collections/RecordCollectionSaveTest.php @@ -0,0 +1,225 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Divergence\Tests\Models\Collections; + +use Exception; +use PHPUnit\Framework\TestCase; +use Divergence\Models\Collections\RecordCollection; +use Divergence\Tests\MockSite\Models\FixtureItem; + +class RecordCollectionSaveTest extends TestCase +{ + /** + * @return array + */ + private static function buildPhantomRecords(int $count, string $namePrefix): array + { + $records = []; + + for ($i = 1; $i <= $count; $i++) { + $records[] = new FixtureItem([ + 'Name' => sprintf('%s Item %d', $namePrefix, $i), + 'Team' => $i % 2, + 'Score' => $i * 10, + ], true, true); + } + + return $records; + } + + public function testSaveWithTransactionPersistsPhantomRecords(): void + { + $collection = new RecordCollection( + static::buildPhantomRecords(5, 'Transaction Save'), + [], + FixtureItem::class + ); + + $collection->saveWithTransaction(); + + foreach ($collection as $Model) { + $this->assertFalse($Model->isPhantom); + $this->assertIsInt($Model->ID); + $this->assertSame($Model->Name, FixtureItem::getByID($Model->ID)->Name); + } + } + + public function testSaveWithTransactionPropagatesPrimaryKeysAcrossIndexes(): void + { + $records = static::buildPhantomRecords(2, 'Transaction Primary Key'); + $collection = new RecordCollection($records, ['Team'], FixtureItem::class); + + $collection->saveWithTransaction(); + + foreach ($records as $record) { + $this->assertNotNull($record->getPrimaryKeyValue()); + $this->assertSame($record, $collection->HashKeyIndex[$record->ID] ?? null); + $this->assertSame($record->Name, FixtureItem::getByID($record->ID)->Name); + } + + $this->assertSame([$records[1]], $collection->getAllByField('Team', 0)->toArray()); + $this->assertSame([$records[0]], $collection->getAllByField('Team', 1)->toArray()); + + $records[0]->Team = 0; + $collection->saveWithTransaction(); + + $this->assertSame([], $collection->getAllByField('Team', 1)->toArray()); + $this->assertEqualsCanonicalizing($records, $collection->getAllByField('Team', 0)->toArray()); + } + + public function testPhantomRecordsHaveDistinctCollectionIdentities(): void + { + $collection = new RecordCollection( + static::buildPhantomRecords(2, 'Phantom Identity'), + ['Team'], + FixtureItem::class + ); + + $this->assertSame([ + 2, + 1, + 1, + ], [ + count($collection->HashKeyIndex), + count($collection->getAllByField('Team', 0)), + count($collection->getAllByField('Team', 1)), + ]); + } + + public function testSaveRekeysPhantomRecordsByPrimaryKey(): void + { + $records = static::buildPhantomRecords(2, 'Phantom Rekey'); + $collection = new RecordCollection($records, ['Team'], FixtureItem::class); + + $collection->save(); + + $indexedRecords = []; + foreach ($records as $record) { + $indexedRecords[] = $collection->HashKeyIndex[$record->ID] ?? null; + } + + $this->assertSame($records, $indexedRecords); + } + + public function testSaveWithTransactionIsNoOpForEmptyCollection(): void + { + $recordsBefore = FixtureItem::getAll(); + $collection = new RecordCollection([], [], FixtureItem::class); + + $collection->saveWithTransaction(); + + $this->assertCount(count($recordsBefore), FixtureItem::getAll()); + } + + public function testSavePersistsDirtyRecordsWithoutTransaction(): void + { + $records = static::buildPhantomRecords(1, 'Save'); + $collection = new RecordCollection($records, [], FixtureItem::class); + + $collection->save(); + + $this->assertFalse($collection->isDirty()); + $this->assertSame($records[0]->Name, FixtureItem::getByID($records[0]->ID)->Name); + } + + public function testIsDirtyReflectsUnsavedRecords(): void + { + $collection = new RecordCollection( + static::buildPhantomRecords(1, 'Dirty'), + [], + FixtureItem::class + ); + + $this->assertTrue($collection->isDirty()); + + $collection->saveWithTransaction(); + + $this->assertFalse($collection->isDirty()); + } + + public function testSaveWithTransactionRollsBackOnFailure(): void + { + $duplicateName = 'Rollback Collision'; + $duplicateRecord = new FixtureItem([ + 'Name' => $duplicateName, + 'Team' => 0, + 'Score' => 1, + ], true, true); + + $records = static::buildPhantomRecords(2, 'Rollback'); + $records[] = $duplicateRecord; + $records[] = new FixtureItem([ + 'Name' => $duplicateName, + 'Team' => 1, + 'Score' => 2, + ], true, true); + + $collection = new RecordCollection($records, [], FixtureItem::class); + + $this->expectException(Exception::class); + + try { + $collection->saveWithTransaction(); + } finally { + foreach (['Rollback Item 1', 'Rollback Item 2', $duplicateName] as $name) { + $this->assertSame([], FixtureItem::getAllByField('Name', $name)); + } + } + } + + public function testSaveWithTransactionRestoresCollectionStateAfterRollback(): void + { + $duplicateName = 'Rollback State Collision'; + $records = static::buildPhantomRecords(2, 'Rollback State'); + $records[] = new FixtureItem([ + 'Name' => $duplicateName, + 'Team' => 0, + 'Score' => 1, + ], true, true); + $records[] = new FixtureItem([ + 'Name' => $duplicateName, + 'Team' => 1, + 'Score' => 2, + ], true, true); + + $collection = new RecordCollection($records, ['Team'], FixtureItem::class); + $recordOrderBefore = $collection->toArray(); + $hashKeysBefore = array_keys($collection->HashKeyIndex); + $teamZeroBefore = $collection->getAllByField('Team', 0)->toArray(); + $teamOneBefore = $collection->getAllByField('Team', 1)->toArray(); + $exception = null; + + try { + $collection->saveWithTransaction(); + } catch (Exception $caught) { + $exception = $caught; + } + + $this->assertNotNull($exception); + $this->assertSame( + array_fill(0, count($records), true), + array_map(function (FixtureItem $record) { + return $record->isPhantom; + }, $records) + ); + $this->assertSame( + array_fill(0, count($records), null), + array_map(function (FixtureItem $record) { + return $record->getPrimaryKeyValue(); + }, $records) + ); + $this->assertTrue($collection->isDirty()); + $this->assertSame($recordOrderBefore, $collection->toArray()); + $this->assertSame($hashKeysBefore, array_keys($collection->HashKeyIndex)); + $this->assertSame($teamZeroBefore, $collection->getAllByField('Team', 0)->toArray()); + $this->assertSame($teamOneBefore, $collection->getAllByField('Team', 1)->toArray()); + } +} diff --git a/tests/Divergence/Models/Collections/RecordCollectionTest.php b/tests/Divergence/Models/Collections/RecordCollectionTest.php new file mode 100644 index 0000000..07607d6 --- /dev/null +++ b/tests/Divergence/Models/Collections/RecordCollectionTest.php @@ -0,0 +1,188 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Divergence\Tests\Models\Collections; + +use stdClass; +use PHPUnit\Framework\TestCase; +use Divergence\Models\Collections\RecordCollection; +use Divergence\Models\Collections\IndexedRecordField; +use Divergence\Models\Expr\Criteria; +use Divergence\Models\Expr\CriteriaType; +use Divergence\Tests\MockSite\Models\FixtureItem; + +class RecordCollectionTest extends TestCase +{ + private RecordCollection $Collection; + + protected function setUp(): void + { + $this->Collection = new RecordCollection(static::buildRecords(), ['Team', 'Score'], FixtureItem::class); + } + + /** + * @return array + */ + private static function buildRecords(): array + { + $records = []; + + for ($i = 1; $i <= 20; $i++) { + $records[] = new FixtureItem([ + 'ID' => $i, + 'Name' => sprintf('Item %02d', $i), + 'Team' => $i % 4, + 'Score' => $i * 10, + ], false, false); + } + + return $records; + } + + public function testConstructorInfersRecordClassNameFromFirstRecord(): void + { + $collection = new RecordCollection(static::buildRecords()); + + $this->assertSame(FixtureItem::class, $collection->recordClassName); + } + + public function testValidateInfersRecordClassNameWhenUnset(): void + { + $collection = new RecordCollection(); + $item = new FixtureItem(['ID' => 1, 'Name' => 'Solo', 'Team' => 0, 'Score' => 10], false, false); + + $collection->add($item); + + $this->assertSame(FixtureItem::class, $collection->recordClassName); + $this->assertCount(1, $collection); + } + + public function testValidateRejectsRecordsOfTheWrongClass(): void + { + $collection = new RecordCollection([], [], FixtureItem::class); + + $collection->add(new stdClass()); + + $this->assertCount(0, $collection); + } + + public function testGetByFieldReturnsMatchingRecord(): void + { + $found = $this->Collection->getByField('Score', 100); + + $this->assertInstanceOf(FixtureItem::class, $found); + $this->assertSame(10, $found->ID); + } + + public function testGetAllByFieldReturnsMatchingRecords(): void + { + $matches = $this->Collection->getAllByField('Team', 1); + + $this->assertInstanceOf(RecordCollection::class, $matches); + $this->assertCount(5, $matches); + } + + public function testGetAllByCriteriaReturnsMatchingRecords(): void + { + $matches = $this->Collection->getAllByCriteria(new Criteria('Team', 2, CriteriaType::Equal)); + + $this->assertIsArray($matches); + $this->assertCount(5, $matches); + $this->assertInstanceOf(FixtureItem::class, $matches[0]); + } + + public function testUpdateIndexForModelDirectCall(): void + { + $item = $this->Collection[0]; + $item->Team = 99; + + $this->Collection->updateIndexForModel('Team', $item); + + $this->assertSame($item, $this->Collection->getByField('Team', 99)); + } + + public function testClearIndexesDirectCall(): void + { + $item = $this->Collection[0]; + + $this->Collection->clearIndexes($item); + + $this->assertNull($this->Collection->getByField('Score', $item->Score)); + } + + public function testCurrentReturnsActiveRecordInstance(): void + { + $this->Collection->rewind(); + + $this->assertInstanceOf(FixtureItem::class, $this->Collection->current()); + } + + public function testOffsetGetNegativeIndex(): void + { + $this->assertSame($this->Collection[19], $this->Collection[-1]); + } + + public function testOffsetUnsetRemovesRecord(): void + { + $item = $this->Collection[0]; + + unset($this->Collection[0]); + + $this->assertCount(19, $this->Collection); + $this->assertSame(2, $this->Collection[0]->ID); + $this->assertNull($this->Collection->getByField('Score', $item->Score)); + } + + public function testRemoveDeletesRecordAndClearsIndex(): void + { + $item = $this->Collection[0]; + + $this->Collection->remove($item); + + $this->assertCount(19, $this->Collection); + $this->assertNull($this->Collection->getByField('Score', $item->Score)); + } + + public function testRemoveManyDeletesMultipleRecords(): void + { + $items = [$this->Collection[0], $this->Collection[1]]; + + $this->Collection->removeMany($items); + + $this->assertCount(18, $this->Collection); + } + + public function testRemoveDecrementsPositionWhenRemovingRecordBeforeCurrentPosition(): void + { + $this->Collection->rewind(); + $this->Collection->next(); + $this->Collection->next(); + $this->Collection->next(); + + $item = $this->Collection[0]; + $this->Collection->remove($item); + + $this->assertSame(2, $this->Collection->key()); + } + + public function testIndexedRecordFieldIndexableValueHandlesDateStringType(): void + { + $index = new IndexedRecordField('CreatedAt', 'DateString'); + + $this->assertSame(strtotime('2024-01-01'), $index->indexableValue('2024-01-01')); + } + + public function testIndexedRecordFieldIndexableValueCastsFloatToString(): void + { + $index = new IndexedRecordField('Score'); + + $this->assertSame((string) 1.5, $index->indexableValue(1.5)); + } +} diff --git a/tests/Divergence/Models/Media/ImageTest.php b/tests/Divergence/Models/Media/ImageTest.php new file mode 100644 index 0000000..919c9c1 --- /dev/null +++ b/tests/Divergence/Models/Media/ImageTest.php @@ -0,0 +1,143 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Divergence\Tests\Models\Media; + +use Exception; +use PHPUnit\Framework\TestCase; +use Divergence\App; +use Divergence\Models\Media\Image; + +class ImageTest extends TestCase +{ + private static string $jpegPath; + + public static function setUpBeforeClass(): void + { + static::$jpegPath = dirname(__DIR__, 3) . '/assets/20210211232214_IMG_0570.JPG'; + + if (!isset(App::$App)) { + new App(dirname(__DIR__, 4)); + } + } + + protected function tearDown(): void + { + $mediaPath = App::$App->ApplicationPath . '/media'; + + if (is_dir($mediaPath)) { + exec('rm -rf ' . escapeshellarg($mediaPath)); + } + } + + private static function makeImage(array $record = [], bool $phantom = false): Image + { + return new Image($record, false, $phantom); + } + + public function testGetValueMapsMimeTypeToExtension(): void + { + $this->assertSame('jpg', static::makeImage(['MIMEType' => 'image/jpeg'])->getValue('Extension')); + $this->assertSame('png', static::makeImage(['MIMEType' => 'image/png'])->getValue('Extension')); + $this->assertSame('gif', static::makeImage(['MIMEType' => 'image/gif'])->getValue('Extension')); + $this->assertSame('psd', static::makeImage(['MIMEType' => 'application/psd'])->getValue('Extension')); + $this->assertSame('tif', static::makeImage(['MIMEType' => 'image/tiff'])->getValue('Extension')); + } + + public function testGetValueThrowsForUnknownMimeType(): void + { + $image = static::makeImage(['MIMEType' => 'image/x-nonexistent']); + + $this->expectException(Exception::class); + + $image->getValue('Extension'); + } + + public function testGetValueThumbnailMimeTypeMapsPsdAndTiffToDifferentFormats(): void + { + $this->assertSame('image/png', static::makeImage(['MIMEType' => 'application/psd'])->getValue('ThumbnailMIMEType')); + $this->assertSame('image/jpeg', static::makeImage(['MIMEType' => 'image/tiff'])->getValue('ThumbnailMIMEType')); + $this->assertSame('image/jpeg', static::makeImage(['MIMEType' => 'image/jpeg'])->getValue('ThumbnailMIMEType')); + } + + public function testAnalyzeFileReturnsRealImageDimensions(): void + { + $mediaInfo = Image::analyzeFile(static::$jpegPath); + + $this->assertSame(6960, $mediaInfo['width']); + $this->assertSame(4640, $mediaInfo['height']); + $this->assertSame(0, $mediaInfo['duration']); + } + + public function testAnalyzeFileThrowsForInvalidImageFile(): void + { + $notAnImage = tempnam(sys_get_temp_dir(), 'not_an_image_'); + file_put_contents($notAnImage, 'this is definitely not a jpeg'); + + $this->expectException(Exception::class); + + try { + Image::analyzeFile($notAnImage); + } finally { + unlink($notAnImage); + } + } + + public function testGetImageLoadsRealJpegAndAppliesExifOrientation(): void + { + $image = static::makeImage(['MIMEType' => 'image/jpeg']); + + $gdImage = $image->getImage(static::$jpegPath); + + $this->assertInstanceOf(\GdImage::class, $gdImage); + $this->assertSame(6960, imagesx($gdImage)); + $this->assertSame(4640, imagesy($gdImage)); + } + + public function testCreateThumbnailImageProducesRealThumbnailFile(): void + { + $image = static::makeImage(['ID' => 601, 'MIMEType' => 'image/jpeg']); + + $sourcePath = $image->getFilesystemPath(); + if (!is_dir($dir = dirname($sourcePath))) { + mkdir($dir, 0775, true); + } + copy(static::$jpegPath, $sourcePath); + + $thumbPath = tempnam(sys_get_temp_dir(), 'thumb_test_') . '.jpg'; + + $image->createThumbnailImage($thumbPath, 200, 200); + + $this->assertFileExists($thumbPath); + $size = getimagesize($thumbPath); + $this->assertLessThanOrEqual(200, $size[0]); + $this->assertLessThanOrEqual(200, $size[1]); + + unlink($thumbPath); + } + + public function testGetThumbnailCreatesAndCachesThumbnailFile(): void + { + $image = static::makeImage(['ID' => 602, 'MIMEType' => 'image/jpeg']); + + $sourcePath = $image->getFilesystemPath(); + if (!is_dir($dir = dirname($sourcePath))) { + mkdir($dir, 0775, true); + } + copy(static::$jpegPath, $sourcePath); + + $thumbPath = $image->getThumbnail(150, 150); + + $this->assertFileExists($thumbPath); + + $secondCallPath = $image->getThumbnail(150, 150); + $this->assertSame($thumbPath, $secondCallPath); + } +} diff --git a/tests/Divergence/Models/Media/VideoTest.php b/tests/Divergence/Models/Media/VideoTest.php new file mode 100644 index 0000000..e016c7a --- /dev/null +++ b/tests/Divergence/Models/Media/VideoTest.php @@ -0,0 +1,175 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Divergence\Tests\Models\Media; + +use Exception; +use PHPUnit\Framework\TestCase; +use Divergence\App; +use Divergence\Models\Media\Video; + +class VideoTest extends TestCase +{ + private static string $bunnyPath; + + public static function setUpBeforeClass(): void + { + static::$bunnyPath = dirname(__DIR__, 3) . '/assets/bunny.mp4'; + + if (!isset(App::$App)) { + new App(dirname(__DIR__, 4)); + } + } + + protected function tearDown(): void + { + $mediaPath = App::$App->ApplicationPath . '/media'; + + if (is_dir($mediaPath)) { + exec('rm -rf ' . escapeshellarg($mediaPath)); + } + } + + private static function makeVideo(array $record = [], bool $phantom = false): Video + { + return new Video($record, false, $phantom); + } + + public function testGetValueMapsKnownMimeTypeToExtension(): void + { + $video = static::makeVideo(['MIMEType' => 'video/webm']); + + $this->assertSame('webm', $video->getValue('Extension')); + } + + public function testGetValueFallsBackToSubtypeForUnknownVideoMimeType(): void + { + $video = static::makeVideo(['MIMEType' => 'video/x-newformat']); + + $this->assertSame('x-newformat', $video->getValue('Extension')); + } + + public function testGetValueThrowsForNonVideoMimeType(): void + { + $video = static::makeVideo(['MIMEType' => 'application/octet-stream']); + + $this->expectException(Exception::class); + + $video->getValue('Extension'); + } + + public function testGetValueReturnsThumbnailMimeType(): void + { + $video = static::makeVideo(['MIMEType' => 'video/mp4']); + + $this->assertSame('image/jpeg', $video->getValue('ThumbnailMIMEType')); + } + + public function testAnalyzeFileReturnsRealFfprobeMetadata(): void + { + $mediaInfo = Video::analyzeFile(static::$bunnyPath); + + $this->assertSame(480, $mediaInfo['width']); + $this->assertSame(270, $mediaInfo['height']); + $this->assertEqualsWithDelta(12.16, $mediaInfo['duration'], 0.5); + $this->assertSame(0, $mediaInfo['rotation']); + } + + public function testAnalyzeFileThrowsForUnreadableFile(): void + { + $this->expectException(Exception::class); + + Video::analyzeFile('/nonexistent/path/to/nothing.mp4'); + } + + public function testGetImageExtractsRealFrameFromVideo(): void + { + $video = static::makeVideo(['MIMEType' => 'video/mp4', 'Duration' => 12.16]); + + $image = $video->getImage(static::$bunnyPath); + + $this->assertInstanceOf(\GdImage::class, $image); + $this->assertSame(480, imagesx($image)); + $this->assertSame(270, imagesy($image)); + } + + public function testGetFilesystemPathReturnsNullForPhantomRecord(): void + { + $video = static::makeVideo([], true); + + $this->assertNull($video->getFilesystemPath()); + } + + public function testGetFilesystemPathUsesEncodingProfileExtensionForKnownVariant(): void + { + $video = static::makeVideo(['ID' => 501, 'MIMEType' => 'video/mp4']); + + $path = $video->getFilesystemPath('h264-high-480p'); + + $this->assertStringContainsString('/video-h264-high-480p/', $path); + $this->assertStringEndsWith('501.mp4', $path); + } + + public function testGetMIMETypeReturnsEncodingProfileMimeTypeForKnownVariant(): void + { + $video = static::makeVideo(['MIMEType' => 'video/mp4']); + + $this->assertSame('video/webm', $video->getMIMEType('webm-480p')); + } + + public function testGetMIMETypeFallsBackToParentForUnknownVariant(): void + { + $video = static::makeVideo(['MIMEType' => 'video/mp4']); + + $this->assertSame('video/mp4', $video->getMIMEType('original')); + } + + public function testIsVariantAvailableReturnsTrueWhenEncodedFileExists(): void + { + $video = static::makeVideo(['ID' => 502, 'MIMEType' => 'video/mp4']); + + $path = $video->getFilesystemPath('h264-high-480p'); + $dir = dirname($path); + + if (!is_dir($dir)) { + mkdir($dir, 0775, true); + } + file_put_contents($path, 'fake-encoded-output'); + + $this->assertTrue($video->isVariantAvailable('h264-high-480p')); + } + + public function testIsVariantAvailableReturnsFalseWhenEncodedFileMissing(): void + { + $video = static::makeVideo(['ID' => 503, 'MIMEType' => 'video/mp4']); + + $this->assertFalse($video->isVariantAvailable('h264-high-480p')); + } + + public function testWriteFileMovesSourceAndLaunchesEncodingJobs(): void + { + $video = static::makeVideo(['ID' => 504, 'MIMEType' => 'video/mp4']); + + $tempCopy = tempnam(sys_get_temp_dir(), 'bunny_test_'); + copy(static::$bunnyPath, $tempCopy); + + $video->writeFile($tempCopy); + + $originalPath = $video->getFilesystemPath(); + + $this->assertFileExists($originalPath); + $this->assertGreaterThan(0, filesize($originalPath)); + $this->assertFileDoesNotExist($tempCopy); + + foreach (['h264-high-480p', 'webm-480p'] as $profileName) { + $this->assertDirectoryExists(dirname($video->getFilesystemPath($profileName))); + } + } +} diff --git a/tests/MockSite/Collections/CanaryCollection.php b/tests/MockSite/Collections/CanaryCollection.php new file mode 100644 index 0000000..82fe34d --- /dev/null +++ b/tests/MockSite/Collections/CanaryCollection.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Divergence\Tests\MockSite\Collections; + +use Divergence\Models\Collections\RecordCollection; +use Divergence\Tests\MockSite\Models\Canary; + +class CanaryCollection extends RecordCollection +{ + public function __construct(array $records = []) + { + parent::__construct($records, array_keys(Canary::getClassFields()), Canary::class); + } +} diff --git a/tests/MockSite/Models/FixtureItem.php b/tests/MockSite/Models/FixtureItem.php new file mode 100644 index 0000000..3652ab9 --- /dev/null +++ b/tests/MockSite/Models/FixtureItem.php @@ -0,0 +1,28 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Divergence\Tests\MockSite\Models; + +use Divergence\Models\Mapping\Column; +use Divergence\Models\Model; + +class FixtureItem extends Model +{ + public static $tableName = 'fixture_items'; + + #[Column(type: 'integer')] + private int $Team; + + #[Column(type: 'integer')] + private int $Score; + + #[Column(type: 'string', unique: true)] + private string $Name; +} diff --git a/tests/MockSite/Models/IndexedCanary.php b/tests/MockSite/Models/IndexedCanary.php new file mode 100644 index 0000000..eb1fd73 --- /dev/null +++ b/tests/MockSite/Models/IndexedCanary.php @@ -0,0 +1,44 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Divergence\Tests\MockSite\Models; + +use Divergence\Models\Mapping\InMemoryIndexing; +/** + * This test demonstrates a technique where you have the + * indexed one piggyback on an existing Model definition. + */ +#[InMemoryIndexing(indexes: [ + 'ID', + 'Class', + 'Created', + 'CreatorID', + 'ContextID', + 'ContextClass', + 'DNA', + 'Name', + 'Handle', + 'isAlive', + 'DNAHash', + 'StatusCheckedLast', + 'SerializedData', + 'Colors', + 'EyeColors', + 'Height', + 'LongestFlightTime', + 'HighestRecordedAltitude', + 'ObservationCount', + 'DateOfBirth', + 'Weight', + 'RevisionID', +])] +class IndexedCanary extends Canary +{ +} diff --git a/tests/assets/20210211232214_IMG_0570.JPG b/tests/assets/20210211232214_IMG_0570.JPG new file mode 100644 index 0000000000000000000000000000000000000000..cc8cc544d16a0b13baaffff84e52980e0d3bbb05 GIT binary patch literal 8392891 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 z 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 }haA&f3-CWjKKURM% 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

B;#P_8b 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�`HP*AfO#k1(y2q;=VmjC=1514 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