Skip to content
Snippets Groups Projects
Select Git revision
  • e6d5c92bfc5595b54b2860b51de3e5c699abed55
  • master default protected
  • b24
  • ll-workflow
  • alc-scindage-donnees-pj
  • FJ_LL_Tbl_Contrat
  • alc-docker-node
  • ll-apiplatform
  • php84
  • ll-rgpd
  • b23
  • alc-filtre-type-intervenant
  • ll-sans-mdb5
  • formules-ancienne-infra
  • ll-formules
  • alc-intervenant-dmep
  • ll-suppr-v_vol-s
  • b20
  • ll-postgresql
  • b23.0.1
  • b22
  • 24.7
  • 24.6
  • 24.5
  • 24.4
  • 24.3
  • 24.2
  • 24.1
  • 24.0
  • 23.15
  • 24.0-beta19
  • 24.0-beta18
  • 24.0-beta17
  • 24.0-beta16
  • 24.0-beta15
  • 24.0-beta14
  • 24.0-beta13
  • 23.14
  • 24.0-beta12
  • 24.0-beta11
  • 24.0-beta10
41 results

EntityServiceFactory.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);
        }
    }