packages/ztd-query-sqlite/tests/Unit/Rewrite/Upsert/UpsertConflictPredicateTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Rewrite\Upsert;
6
7use PHPUnit\Framework\Attributes\CoversClass;
8use PHPUnit\Framework\Attributes\UsesClass;
9use PHPUnit\Framework\TestCase;
10use ZtdQuery\Platform\Sqlite\Rewrite\Upsert\UpsertConflictPredicate;
11
12#[CoversClass(UpsertConflictPredicate::class)]
13#[UsesClass(\ZtdQuery\Platform\Sqlite\Sql\SqliteIdentifierQuoter::class)]
14final class UpsertConflictPredicateTest extends TestCase
15{
16 public function testConflictPredicateCombinesCompositeAndAlternateKeys(): void
17 {
18 $predicate = new UpsertConflictPredicate(new \ZtdQuery\Platform\Sqlite\Sql\SqliteIdentifierQuoter());
19 self::assertSame('((e."tenant" = i."tenant" AND e."id" = i."id") OR (e."email" = i."email"))', $predicate->conflictPredicate(['pk' => ['tenant', 'id'], 'email' => ['email'], 'empty' => []], 'e', 'i'));
20 self::assertSame('FALSE', $predicate->conflictPredicate(['empty' => []], 'e', 'i'));
21 }
22
23 public function testQualifiedEscapesAliasAndColumn(): void
24 {
25 self::assertSame('"a""b"."full name"', (new UpsertConflictPredicate(new \ZtdQuery\Platform\Sqlite\Sql\SqliteIdentifierQuoter()))->qualified('a"b', 'full name'));
26 }
27
28}
29