packages/ztd-query-postgres/tests/Unit/Rewrite/Partition/PgSqlPartitionPredicateRendererTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Rewrite\Partition;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\TestCase;
9use ZtdQuery\Platform\Postgres\Rewrite\Partition\PgSqlPartitionPredicateRenderer;
10use ZtdQuery\Schema\Partition\TablePartitionRelation;
11
12#[CoversClass(PgSqlPartitionPredicateRenderer::class)]
13final class PgSqlPartitionPredicateRendererTest extends TestCase
14{
15 public function testRendersSpecificPartitionPredicate(): void
16 {
17 $relation = new TablePartitionRelation('events', 'created_at >= DATE \'2024-01-01\'');
18
19 self::assertSame(
20 'created_at >= DATE \'2024-01-01\'',
21 (new PgSqlPartitionPredicateRenderer())->render($relation, ['FALSE']),
22 );
23 }
24
25 public function testRendersDefaultPartitionPredicateFromSiblings(): void
26 {
27 $renderer = new PgSqlPartitionPredicateRenderer();
28 $relation = new TablePartitionRelation('events', null);
29
30 self::assertSame(
31 'COALESCE(NOT ((year = 2024) OR (year = 2025)), TRUE)',
32 $renderer->render($relation, ['year = 2024', 'year = 2025']),
33 );
34 self::assertSame('TRUE', $renderer->render($relation, []));
35 }
36}
37