assassin215k / btree
Btree collection indexing
Requires
- php: >=8.1
Requires (Dev)
- mockery/mockery: ^1.5
- php-coveralls/php-coveralls: ^2.5
- phpunit/php-code-coverage: ^9.2
- phpunit/phpunit: 9.*
- scrutinizer/ocular: dev-master
- squizlabs/php_codesniffer: ^3.6
- symfony/phpunit-bridge: ^6.0
This package is auto-updated.
Last update: 2024-04-09 17:35:42 UTC
README
Provides btree-indexation for an object collection. Provide sorting, ordering and composite indexes. Writes with PSR12 support
Install
Via Composer
$ composer require assassin215k/btree
Create collection and index
Use objects with same public properties.
use Btree\IndexedCollection; $collection = new IndexedCollection($data); $collection->addIndex(['name', 'age']);
Can be used multiple indexes for different properties
$collection = new IndexedCollection(data: $data); $collection->addIndex(['name', 'age']); $collection->addIndex(['name']); $collection->addIndex('age');
Use own Builder and/or Index, that implements BuilderInterface and/or IndexInterface
use Btree\Builder\BuilderInterface; use Btree\Index\IndexInterface; class OwnBuilder implements BuilderInterface{}; class OwnIndex implements IndexInterface{}; $collection = new IndexedCollection(options: [ 'builderClass' => OwnBuilder:class 'indexClass' => OwnIndex:class ]);
Configure degree of default btree index, 100 by default
use Btree\Index\Btree\Index; Index::$nodeSize = 10; $collection = new IndexedCollection();
Use custom index class that implements IndexInterface
class OwnIndex implements IndexInterface {} $collection = new IndexedCollection(data: []); $collection->addIndex('name', new OwnIndex());
Drop index
$collection->dropIndex(['name', 'age']); $collection->dropIndex('name');
Add to collection
Add items into collection after creating the one
$collection = new IndexedCollection(); $collection->addIndex(['name', 'age']); $collection->add(new SomeClass('Sofia', 18));
Remove from collection
Add items into collection after creating the one
$collection->delete(['name' => 'Sofia", 'age' => 18]); $person = new SomeClass('Sofia', 18); $collection = new IndexedCollection(); $collection->add($person); .. $collection->delete($person);
Builder
Each builder use for one query
use Btree\Builder\Enum\EnumOperator; use Btree\Builder\Enum\EnumSort; $builder = $collection->createBuilder(); $builder->andWhere('name', EnumOperator::Equal, 'Lisa'); $builder->andWhere('country', EnumOperator::IsNull); $builder->andWhere('age', EnumOperator::LessThen, 50); $builder->andWhere('age', EnumOperator::LessThenOrEqual, 50); $builder->andWhere('age', EnumOperator::GreaterThen, 10); $builder->andWhere('name', EnumOperator::GreaterThenOrEqual, 'A'); $builder->andWhere('age', EnumOperator::Between, [45, 15]); $builder->andWhere('name', EnumOperator::Between, ['A','Z']); $builder->order('age', EnumSort::DESC); $builder->addOrder('name', EnumSort::ASC); $builder->run(); // Will return an array of added objects
If a collection has multiple indexes, builder use only the one of them that is better to search
Use andWhere
to add new comparison or where
to use from scratch.
$builder = $collection->createBuilder(); $builder->andWhere('name', EnumOperator::IsNull); $builder->where('country', 'name', EnumOperator::Between, ['A','Z']); // will search all in A..Z
Similar with order addOrder
to add next order or order
to replace all previous with a new one.
Testing
$ phpunit
Contributing
Please see CONTRIBUTING for details.
Security
If you discover any security related issues, please email info@iceorb.com.ua instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.