Skip to content

Commit b9303a6

Browse files
committed
Add In and NotIn filter expressions
1 parent 10d3053 commit b9303a6

3 files changed

Lines changed: 43 additions & 0 deletions

File tree

src/Compat/FilterProcessor.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44

55
use InvalidArgumentException;
66
use ipl\Sql\Filter\Exists;
7+
use ipl\Sql\Filter\In;
78
use ipl\Sql\Filter\NotExists;
9+
use ipl\Sql\Filter\NotIn;
10+
use ipl\Sql\Select;
811
use ipl\Sql\Sql;
912
use ipl\Stdlib\Filter;
1013

@@ -102,6 +105,18 @@ public static function assemblePredicate(Filter\Condition $filter)
102105
$operator = 'EXISTS';
103106
} elseif ($filter instanceof NotExists) {
104107
$operator = 'NOT EXISTS';
108+
} elseif ($filter instanceof In) {
109+
$operator = 'IN';
110+
111+
if (is_array($column)) {
112+
$column = '( ' . implode(', ', $column) . ' )';
113+
}
114+
} elseif ($filter instanceof NotIn) {
115+
$operator = 'NOT IN';
116+
117+
if (is_array($column)) {
118+
$column = '( ' . implode(', ', $column) . ' )';
119+
}
105120
} else {
106121
throw new InvalidArgumentException(sprintf('Cannot render filter: %s', get_class($filter)));
107122
}

src/Filter/In.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace ipl\Sql\Filter;
4+
5+
use ipl\Sql\Select;
6+
use ipl\Stdlib\Filter;
7+
8+
class In extends Filter\Condition
9+
{
10+
public function __construct($column, Select $select)
11+
{
12+
parent::__construct($column, $select);
13+
}
14+
}

src/Filter/NotIn.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace ipl\Sql\Filter;
4+
5+
use ipl\Sql\Select;
6+
use ipl\Stdlib\Filter;
7+
8+
class NotIn extends Filter\Condition
9+
{
10+
public function __construct($column, Select $select)
11+
{
12+
parent::__construct($column, $select);
13+
}
14+
}

0 commit comments

Comments
 (0)