packages/ztd-query-postgres/src/Rewrite/Sampling/TableColumns.php

1<?php
2
3declare(strict_types=1);
4
5namespace ZtdQuery\Platform\Postgres\Rewrite\Sampling;
6
7/**
8 * Table columns operations for PostgreSQL sampling.
9 *
10 * @visibility root
11 */
12final class TableColumns
13{
14    /**
15     * @template T
16     * @param array<string, array<string, T>> $tables
17     * @return list<string>
18     */
19    public function columns(string $tableName, array $tables): array
20    {
21        foreach ($tables as $candidate => $context) {
22            if (strcasecmp($candidate, $tableName) !== 0) {
23                continue;
24            }
25            $columns = $context['columns'] ?? null;
26            if (!is_array($columns)) {
27                return [];
28            }
29
30            $names = [];
31            foreach ($columns as $column) {
32                if (is_string($column)) {
33                    $names[] = $column;
34                }
35            }
36
37            return $names;
38        }
39
40        return [];
41    }
42}
43