Commit 61c805ad authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

WIP

parent e4b6d3c4
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -107,7 +107,7 @@ return [
                    // le nom de la colonne dans la table destination. Valeurs possibles :
                    // - array : un filtre de type `\UnicaenDbImport\Filter\ColumnName\ArrayMapColumnNameFilter`
                    // sera instancié avec ce tableau de correspondance comme mapping ;
                    // - string : service ou classe de filtre à instancier pour
                    // - string : service ou classe de filtre à instancier,
                    // implémentant {@see \UnicaenDbImport\Filter\ColumnName\ColumnNameFilterInterface} ;
                    // NB : par défaut, `\UnicaenDbImport\Filter\ColumnName\DefaultColumnNameFilter::class`
                    // est utilisé.
+22 −4
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ namespace UnicaenDbImport\CodeGenerator;

use Doctrine\DBAL\Platforms\AbstractPlatform;
use Generator;
use InvalidArgumentException;
use RuntimeException;
use UnicaenDbImport\CodeGenerator\Helper\LogTableHelper;
use UnicaenDbImport\CodeGenerator\Helper\TableHelper;
@@ -227,8 +228,8 @@ abstract class CodeGenerator implements CodeGeneratorInterface
     */
    public function generateSQLForSelectFromSource(SourceInterface $source): iterable
    {
        if ($select = $source->getSelect()) {
            $queries = $this->normalizedSelect($select);
        if ($source->getSelect()) {
            $queries = $this->normalizedSelect($source);
        } else {
            $sourceTable = $source->getTable();
            $queries = [$this->tableHelper->generateSQLForSelectFromTable($sourceTable)];
@@ -249,14 +250,31 @@ abstract class CodeGenerator implements CodeGeneratorInterface
        return $queries;
    }

    protected function normalizedSelect(string|iterable $select): iterable
    /**
     * TODO : tester !
     */
    protected function normalizedSelect(SourceInterface $source): iterable
    {
        $select = $source->getSelect();

        if (is_iterable($select)) {
            $selects = $select;
            foreach ($selects as $sel) {
                if (!is_string($sel)) {
                    throw new InvalidArgumentException(sprintf(
                        "Seul le type string est autorisé pour chacun des select de la source '%s'",
                        $source->getName()
                    ));
                }
            }
            return $select;
        } elseif (is_string($select)) {
            return [$select];
        } else {
            throw new RuntimeException("Format inattendu de spécification du/des selects");
            throw new RuntimeException(sprintf(
                "Format inattendu de spécification du/des selects pour la source '%s'",
                $source->getName()
            ));
        }
    }
    /**
+6 −2
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ namespace UnicaenDbImport\Config;
use Assert\Assertion;
use Assert\AssertionFailedException;
use Psr\Container\ContainerInterface;
use SplPriorityQueue;
use UnicaenDbImport\Filter\ColumnValue\ColumnValueFilterInterface;
use UnicaenDbImport\Filter\ColumnValue\SameColumnValueFilter;

@@ -22,11 +23,12 @@ trait ColumnValueFilterConfigFactoryTrait
     */
    protected function getColumnValueFilters(array              $sourceConfig,
                                             string             $key,
                                             ContainerInterface $container): array
                                             ContainerInterface $container): iterable
    {
        $columnValueFilter = $sourceConfig[$key] ?? [];

        $filterInstances = [];
//        $filterInstances = new SplPriorityQueue();
        foreach ((array)$columnValueFilter as $nameOrIndex => $spec) {
            try {
                $filterInstance = $this->getColumnValueFilter($spec, $container);
@@ -36,7 +38,9 @@ trait ColumnValueFilterConfigFactoryTrait
            if ($filterInstance === NULL) {
                throw ConfigException::invalidValueForKey($key);
            }
            $filterInstances[$nameOrIndex] = $filterInstance;
            $filterInstances[$filterInstance->getColumn()] = $filterInstance;
//            $priority = $spec['priority'] ?? 0;
//            $filterInstances->insert($filterInstance, $priority);
        }

        return $filterInstances;
+1 −1
Original line number Diff line number Diff line
@@ -409,7 +409,7 @@ class ConfigFactory
        $connectionName = $destinationConfig['connection'];
        $destinationConfig['connection'] = $this->getConnectionByName($connectionName);

        $destinationConfig['column_value_filter'] = $this->getColumnValueFilterInstances($destinationConfig, 'column_value_filter', $this->container);
        $destinationConfig['column_value_filter'] = $this->getColumnValueFilterInstances($destinationConfig, 'column_value_filter');

        return Destination::fromConfig($destinationConfig);
    }
+2 −1
Original line number Diff line number Diff line
@@ -118,7 +118,8 @@ class Source implements SourceInterface
            return '(Generator)';
        } elseif (is_iterable($select)) {
            if ($select[0] ?? null) {
                return '[' . $select[0] . ', ...]';
                $url = $select[0]['url'] ?? $select[0];
                return '[' . $url . ', ...]';
            } else {
                return ":-( ITERABLE VIDE";
            }
Loading