packages/sql-catalog/src/Core/Extension/Model/ModelProviderInterface.php

1<?php
2
3declare(strict_types=1);
4
5namespace SqlCatalog\Core\Extension\Model;
6
7use SqlCatalog\Core\Extension\ExtensionInterface;
8
9/**
10 * An optional extension capability for source-level call and statement models.
11 *
12 * @visibility public
13 *
14 * @example Registering an extension with optional source models
15 *     $extension = new class implements \SqlCatalog\Core\Extension\Model\ModelProviderInterface {
16 *         public function name(): string { return 'example'; }
17 *         public function description(): string { return 'Application SQL functions'; }
18 *         public function sinks(): array { return []; }
19 *         public function globals(): array { return []; }
20 *         public function models(\SqlCatalog\Core\Extension\Model\ModelContext $context): \SqlCatalog\Core\Extension\Model\ModelSet {
21 *             return new \SqlCatalog\Core\Extension\Model\ModelSet();
22 *         }
23 *     };
24 *     $registry = new \SqlCatalog\Core\Extension\ExtensionRegistry([$extension]);
25 *     count($registry->modelProvidersOf(['example'])) // => 1
26 */
27interface ModelProviderInterface extends ExtensionInterface
28{
29    /**
30     * Creates models for one analysis, without retaining state between runs.
31     */
32    public function models(ModelContext $context): ModelSet;
33}
34