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