Passed
Push — main ( 6cdb6f...ad9b5a )
by Osvaldo
05:28
created

JoinOrderByLimit::crearJoin()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 6
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 8
ccs 7
cts 7
cp 1
crap 1
rs 10
1
<?php
2
namespace src\factory;
3
4
use src\FactoryClassInterface;
5
use src\pdodatabase\conexion\CrearConexionBaseDeDatos;
6
use src\pdodatabase\consultas\select\ConsultaJoinOrdenYLimite;
7
use src\pdodatabase\ejecutar\EjecutarConsultaSinDatos;
8
use src\pdodatabase\elementos\Campos;
9
use src\pdodatabase\elementos\Join as ElementosJoin;
10
use src\pdodatabase\elementos\Joins;
11
use src\pdodatabase\elementos\Limite;
12
use src\pdodatabase\elementos\NombreColumnaJoin;
13
use src\pdodatabase\elementos\Orden;
14
use src\pdodatabase\elementos\OrdenYLimite;
15
use src\pdodatabase\elementos\Tabla;
16
use src\pdodatabase\elementos\TipoDeJoin;
17
use src\pdodatabase\sentencias\select\SentenciaJoinOrdenYLimite;
18
19
class JoinOrderByLimit implements FactoryClassInterface
20
{
21
    private $_joins = [];
22
23 1
    public function crear(array $array): ConsultaJoinOrdenYLimite
24
    {
25 1
        $conexion = new CrearConexionBaseDeDatos;
26 1
        $conexion = $conexion->crear([]);
27
28 1
        $sentencia = new SentenciaJoinOrdenYLimite(
29 1
            new Joins(
30 1
                new Tabla($array['tabla']),
31 1
                new Campos($array['campos']),
32 1
                $this->obtenerJoins($array)
33
            ),
34 1
            new OrdenYLimite(
35 1
                new Orden($array['order']),
36 1
                new Limite($array['limit'])
37
            )
38
            
39
        );
40
        
41 1
        return new ConsultaJoinOrdenYLimite(
42 1
            new EjecutarConsultaSinDatos(
43 1
                $conexion
44
            ),
45
            $sentencia
46
        );
47
    }
48
49 1
    private function obtenerJoins(array $array): array
50
    {
51 1
        foreach ($array['join'] as $value)
52
        {
53 1
            array_push($this->_joins, $this->crearJoin($value, $array['tabla']));           
54
55 1
            $this->multilplesJoin($value, $value['tabla']);
56
        }
57
58 1
        return $this->_joins;
59
    }
60
61 1
    private function crearJoin(array $array, string $tablaPadre): ElementosJoin
62
    {
63 1
        return new ElementosJoin(
64 1
            new TipoDeJoin($array['tipo']),
65 1
            new Tabla($tablaPadre),
66 1
            new Tabla($array['tabla']),
67 1
            new Campos($array['campos']),
68 1
            new NombreColumnaJoin($array['key'])
69
        );
70
    }
71
72 1
    private function multilplesJoin(array $value, string $tablaPadre): void
73
    {
74 1
        if(isset($value['join']))
75
        {
76 1
            foreach ($value['join'] as $value)
77
            {
78 1
               array_push($this->_joins, $this->crearJoin($value, $tablaPadre));
79
            }
80
81 1
            $this->multilplesJoin($value, $value['tabla']);
82
        }
83
    }
84
}