packages/ztd-query-core/tests/Fake/QueryExecutorBuilder.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Fake;
6
7use ZtdQuery\Config\ZtdConfig;
8use ZtdQuery\Connection\ConnectionInterface;
9use ZtdQuery\Platform;
10use ZtdQuery\Platform\CopySupport;
11use ZtdQuery\Platform\MissingResultColumnTypeResolver;
12use ZtdQuery\Platform\ParameterBindingCompiler;
13use ZtdQuery\Platform\ResultColumnTypeResolver;
14use ZtdQuery\QueryExecutor;
15use ZtdQuery\ResultSelectRunner;
16use ZtdQuery\Rewrite\SqlRewriter;
17use ZtdQuery\Schema\TableDefinitionRegistry;
18use ZtdQuery\Session;
19use ZtdQuery\Shadow\ShadowStore;
20
21/**
22 * Constructs the core executor with controlled dialect behavior for unit tests.
23 */
24final class QueryExecutorBuilder
25{
26 /**
27 * Bind controlled dialect services to caller-supplied state.
28 */
29 public static function create(
30 SqlRewriter $rewriter,
31 ShadowStore $shadowStore,
32 ResultSelectRunner $resultSelectRunner,
33 ZtdConfig $config,
34 ConnectionInterface $connection,
35 ?TableDefinitionRegistry $registry = null,
36 ?CopySupport $copySupport = null,
37 ?ParameterBindingCompiler $parameterBindingCompiler = null,
38 ResultColumnTypeResolver $resultColumnTypeResolver = new MissingResultColumnTypeResolver(),
39 ): QueryExecutor {
40 $platform = new StubPlatform($rewriter, $copySupport, $parameterBindingCompiler, $resultColumnTypeResolver);
41 return new QueryExecutor($connection, $platform, $config, new Session($shadowStore, $registry ?? new TableDefinitionRegistry()), $resultSelectRunner);
42 }
43 /**
44 * Supply controlled SQL behavior while letting core allocate the session.
45 * @param-out ShadowStore $store
46 */
47 public static function platform(SqlRewriter $rewriter, ?ShadowStore &$store = null): Platform
48 {
49 $store ??= new ShadowStore();
50 return new StubPlatform($rewriter, store: $store);
51 }
52}
53