Skip to content

Commit f6a3fc3

Browse files
committed
is null / is not null comparisons
1 parent 5dd586c commit f6a3fc3

File tree

5 files changed

+119
-1
lines changed

5 files changed

+119
-1
lines changed

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,8 @@ User::where(new BitAnd('acl', new Value(0x8000)), 0x8000)
227227
```php
228228
use Illuminate\Contracts\Database\Query\Expression;
229229
use Tpetry\QueryExpressions\Operator\Comparison\{
230-
Between, DistinctFrom, Equal, GreaterThan, GreaterThanOrEqual, LessThan, LessThanOrEqual, NotDistinctFrom, NotEqual
230+
Between, DistinctFrom, Equal, IsNull, GreaterThan, GreaterThanOrEqual, LessThan, LessThanOrEqual,
231+
NotDistinctFrom, NotEqual, NotIsNull
231232
};
232233
use Tpetry\QueryExpressions\Function\Comparison\{
233234
StrListContains
@@ -239,12 +240,15 @@ use Tpetry\QueryExpressions\Operator\Logical\{
239240
new Between(string|Expression $value, string|Expression $min, string|Expression $max);
240241
new DistinctFrom(string|Expression $value1, string|Expression $value2);
241242
new Equal(string|Expression $value1, string|Expression $value2);
243+
new IsNull(string|Expression $value);
242244
new GreaterThan(string|Expression $value1, string|Expression $value2);
243245
new GreaterThanOrEqual(string|Expression $value1, string|Expression $value2);
244246
new LessThan(string|Expression $value1, string|Expression $value2);
245247
new LessThanOrEqual(string|Expression $value1, string|Expression $value2);
246248
new NotDistinctFrom(string|Expression $value1, string|Expression $value2);
247249
new NotEqual(string|Expression $value1, string|Expression $value2);
250+
new NotIsNull(string|Expression $value);
251+
248252

249253
new StrListContains(string|Expression $strList, string|Expression $str);
250254

src/Operator/Comparison/IsNull.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tpetry\QueryExpressions\Operator\Comparison;
6+
7+
use Illuminate\Contracts\Database\Query\ConditionExpression;
8+
use Illuminate\Contracts\Database\Query\Expression;
9+
use Illuminate\Database\Grammar;
10+
use Tpetry\QueryExpressions\Concerns\StringizeExpression;
11+
12+
class IsNull implements ConditionExpression
13+
{
14+
use StringizeExpression;
15+
16+
public function __construct(
17+
private readonly string|Expression $value,
18+
19+
) {
20+
}
21+
22+
public function getValue(Grammar $grammar)
23+
{
24+
$value = $this->stringize($grammar, $this->value);
25+
26+
return "({$value} is null)";
27+
}
28+
}

src/Operator/Comparison/NotIsNull.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Tpetry\QueryExpressions\Operator\Comparison;
6+
7+
use Illuminate\Contracts\Database\Query\ConditionExpression;
8+
use Illuminate\Contracts\Database\Query\Expression;
9+
use Illuminate\Database\Grammar;
10+
use Tpetry\QueryExpressions\Concerns\StringizeExpression;
11+
12+
class NotIsNull implements ConditionExpression
13+
{
14+
use StringizeExpression;
15+
16+
public function __construct(
17+
private readonly string|Expression $value,
18+
19+
) {
20+
}
21+
22+
public function getValue(Grammar $grammar)
23+
{
24+
$value = $this->stringize($grammar, $this->value);
25+
26+
return "({$value} is not null)";
27+
}
28+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Illuminate\Database\Query\Expression;
6+
use Illuminate\Database\Schema\Blueprint;
7+
use Tpetry\QueryExpressions\Operator\Comparison\IsNull;
8+
9+
it('can check an expression')
10+
->expect(new IsNull(new Expression(42)))
11+
->toBeExecutable(options: [
12+
'sqlsrv' => ['position' => 'where'],
13+
])
14+
->toBeMysql('(42 is null)')
15+
->toBePgsql('(42 is null)')
16+
->toBeSqlite('(42 is null)')
17+
->toBeSqlsrv('(42 is null)');
18+
19+
it('can check a column')
20+
->expect(new IsNull('val'))
21+
->toBeExecutable(function (Blueprint $table) {
22+
$table->integer('val');
23+
}, options: [
24+
'sqlsrv' => ['position' => 'where'],
25+
])
26+
->toBeMysql('(`val` is null)')
27+
->toBePgsql('("val" is null)')
28+
->toBeSqlite('("val" is null)')
29+
->toBeSqlsrv('([val] is null)');
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Illuminate\Database\Query\Expression;
6+
use Illuminate\Database\Schema\Blueprint;
7+
use Tpetry\QueryExpressions\Operator\Comparison\NotIsNull;
8+
9+
it('can check an expression')
10+
->expect(new NotIsNull(new Expression(42)))
11+
->toBeExecutable(options: [
12+
'sqlsrv' => ['position' => 'where'],
13+
])
14+
->toBeMysql('(42 is not null)')
15+
->toBePgsql('(42 is not null)')
16+
->toBeSqlite('(42 is not null)')
17+
->toBeSqlsrv('(42 is not null)');
18+
19+
it('can check a column')
20+
->expect(new NotIsNull('val'))
21+
->toBeExecutable(function (Blueprint $table) {
22+
$table->integer('val');
23+
}, options: [
24+
'sqlsrv' => ['position' => 'where'],
25+
])
26+
->toBeMysql('(`val` is not null)')
27+
->toBePgsql('("val" is not null)')
28+
->toBeSqlite('("val" is not null)')
29+
->toBeSqlsrv('([val] is not null)');

0 commit comments

Comments
 (0)