php-vivace/db

View on GitHub
docs/3.FILTER_EXPRESSION.md

Summary

Maintainability
Test Coverage
## Filter expressions
Filter expression uses in __vivace\db\Storage::filter()__, __vivace\db\Storage::and()__, __vivace\db\Storage::or()__
methods.
#### Comparison operators
List of implemented operators

__assoc equal to__ `[ <attribute> => <value>, ...]`
```php
['name' => 'Albert', 'age' => 25];
```
_'name' = 'Albert' AND 'age' = 25_

__equal to__ `['=', <attribute>, <value>]`
```php
['=', 'name', 'Alber']
```
_'name' = 'Albert'_ 

__not equal to__ `['!=', <attrbiute>, <value>]`
```php
['!=', 'name', 'Alber']
```
_'name' != 'Albert'_

__greater than__  `['>', <attrbiute>, <value>]`
```php
['>', 'age', 25]
```
_'age' > 25_

__greater than or equal to__  `['>=', <attrbiute>, <value>]`
```php
['>=', 'age', 25]
```
_'age' >= 25_


__lower than or equal to__  `['<=', <attrbiute>, <value>]`
```php
['<=', 'age', 25]
```
_'age' <= 25_

__lower than__  `['<', <attrbiute>, <value>]`
```php
['<', 'age', 25]
```
_'age' < 25_

__in__ set  `['in', <attrbiute>, [<value>, ...]]`
```php
['in', 'role', ['moderator', 'administrator']]
```
_'role' IN ('moderator', 'administrator')_

__in__ with multiple attributes  `['in', [<attrbiute1>, <attrbiute2>, ...], [[<value1>,...], [<value2>,...]]]`
```php
['in', ['kind', 'id'], [['folder', 1],['file', 2]]]
```
_(kind, id) IN (('folder', 1), ('file', 2))_

__between__ min and max  `['between', <attrbiute>, <min>, <max>]`
```php
['between', 'age', 30, 40]
```
_'age' BETWEEN 30 AND 40_

#### Logical operators
Logical __and__.   `['and', <expression1>, <expression2>, ...]`
```php
['and', ['name' => 'Albert', 'age' => 25], ['between', 'age', 30, 40]]
```
 _'name' = 'Albert' AND 'age' = 25 __AND__ 'age' BETWEEN 30 AND 40_

Logical __or__. `['or', <expression1>, <expression2>, ...]`
```php
['or', ['name' => 'Albert', 'age' => 25], ['between', 'age', 30, 40]]
```
 _'name' = 'Albert' AND 'age' = 25 __OR__ 'age' BETWEEN 30 AND 40_
 
 Example nesting logical operators 
 ```php
 [
    'or', 
    ['name' => 'Albert', 'age' => 25],
    [
        'and',
        ['between', 'age', 30, 40],
        ['in', 'status', ['lunch', 'sleep']]
    ] 
 ]
 ```
  _'name' = 'Albert' AND 'age' = 25 __OR__ ('age' BETWEEN 30 AND 40 AND 'status' IN ('lunch', 'sleep'))_