packages/ztd-query-mysql/fuzz/Robustness/Target/ClassifyTarget.php
1<?php
2
3declare(strict_types=1);
4
5namespace Fuzz\Robustness\Target;
6
7use Error;
8use ZtdQuery\Platform\MySql\Rewrite\MySqlQueryGuard;
9use ZtdQuery\Platform\MySql\Sql\MySqlParser;
10
11/**
12 * Checks deterministic classification of generated MySQL statements.
13 */
14final class ClassifyTarget
15{
16 /**
17 * Classify twice without changing state and reject inconsistent results.
18 *
19 * @throws Error
20 */
21 public function __invoke(string $sql): void
22 {
23 $guard = new MySqlQueryGuard(new MySqlParser());
24 if ($guard->classify($sql) !== $guard->classify($sql)) {
25 throw new Error('Classification is not deterministic. SQL: ' . $sql);
26 }
27 }
28}
29