packages/ztd-query-core/tests/Fake/FakeSessionFactory.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Fake;
6
7use ZtdQuery\Config\ZtdConfig;
8use ZtdQuery\Connection\ConnectionInterface;
9use ZtdQuery\Platform\SessionFactory;
10use ZtdQuery\ResultSelectRunner;
11use ZtdQuery\Schema\TableDefinitionRegistry;
12use ZtdQuery\Session;
13use ZtdQuery\Shadow\ShadowStore;
14
15/**
16 * Fake SessionFactory that assembles a Session using Fake platform implementations.
17 *
18 * Uses FakeSchemaParser and FakeSchemaReflector to pre-load schema,
19 * then creates a Session with FakeSqlRewriter.
20 */
21final class FakeSessionFactory implements SessionFactory
22{
23 private FakeSchemaReflector $reflector;
24
25 /**
26 * @param FakeSchemaReflector|null $reflector Optional pre-configured reflector.
27 */
28 public function __construct(?FakeSchemaReflector $reflector = null)
29 {
30 $this->reflector = $reflector ?? new FakeSchemaReflector();
31 }
32
33 /**
34 * Builds.
35 *
36 * @param ConnectionInterface $connection
37 * @param ZtdConfig $config
38 * @return Session
39 */
40 public function create(ConnectionInterface $connection, ZtdConfig $config): Session
41 {
42 $shadowStore = new ShadowStore();
43 $parser = new FakeSchemaParser();
44 $registry = new TableDefinitionRegistry();
45
46 foreach ($this->reflector->reflectAll() as $tableName => $createSql) {
47 $definition = $parser->parse($createSql);
48 if ($definition !== null) {
49 $registry->register($tableName, $definition);
50 }
51 }
52
53 $rewriter = new FakeSqlRewriter($shadowStore, $registry);
54
55 return new Session(
56 $rewriter,
57 $shadowStore,
58 new ResultSelectRunner(),
59 $config,
60 $connection,
61 registry: $registry,
62 );
63 }
64}
65