Skip to content
Snippets Groups Projects
Select Git revision
  • master
  • 1.0.0
2 results

Module.php

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    FunctionCallingHelper.php 2.26 KiB
    <?php
    
    namespace UnicaenDbImport\CodeGenerator\Common\Helper;
    
    use Ramsey\Uuid\Uuid;
    
    /**
     * Génération de code SQL pour l'appel de la fonction "create_import_metarequest_for_{table}".
     *
     * Version commune à toutes les plateformes de bases de données.
     *
     * @author Unicaen
     */
    abstract class FunctionCallingHelper extends AbstractHelper
    {
        /**
         * @var string
         */
        protected $importHash;
    
        /**
         * @param string $importHash
         */
        public function setImportHash($importHash)
        {
            $this->importHash = $importHash;
        }
    
        /**
         * @param string $functionName
         * @param string $sourceCodeColumn
         * @param array  $columns
         * @param array  $columnsToChar
         * @return string
         */
        public function generateSQL($functionName, $sourceCodeColumn, array $columns, array $columnsToChar)
        {
            $sourceCols = array_merge([$sourceCodeColumn], $columns);
            $destinCols = array_merge([$sourceCodeColumn], $columns, ['deleted_on']);
    
            $sourceCols = $this->generateColumnNamesWithPrefix($sourceCols, 'src.',  $columnsToChar);
            $destinCols = $this->generateColumnNamesWithPrefix($destinCols, 'dest.', $columnsToChar);
    
            $importHash = $this->importHash ?: Uuid::uuid1()->toString();
    
            $res = '';
            $res .= $functionName . '(' . PHP_EOL;
            $res .= $this->indent(4, implode(', ', $sourceCols) . ',') . PHP_EOL;
            $res .= $this->indent(4, implode(', ', $destinCols) . ',') . PHP_EOL;
            $res .= $this->indent(4, "'" . $importHash . "'") . PHP_EOL;
            $res .= ")";
    
            return $res;
        }
    
        /**
         * @param array  $columns
         * @param string $prefix
         * @param array  $columnsToChar
         * @return array
         */
        protected function generateColumnNamesWithPrefix(array $columns, $prefix, array $columnsToChar = [])
        {
            return array_map(function ($col) use ($prefix, $columnsToChar) {
                $field = $prefix . $col;
                // Attention: $columnsToChar[$col] doit être un motif du genre "TO_CHAR(%s,'YYYY-MM-DD')"
                // où "%s" sera remplacé par le nom de la colonne.
                if (array_key_exists($col, $columnsToChar)) {
                    $field = sprintf($columnsToChar[$col], $field);
                }
                return $field;
            }, $columns);
        }
    }