-
Notifications
You must be signed in to change notification settings - Fork 0
/
JoinAbstract.php
108 lines (97 loc) · 3.29 KB
/
JoinAbstract.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
<?php
/*
* Copyright 2011 ICMBio
* Este arquivo é parte do programa SIAL
* O SIAL é um software livre; você pode redistribuí-lo e/ou modificá-lo dentro dos termos
* da Licença Pública Geral GNU como publicada pela Fundação do Software Livre (FSF); na versão
* 2 da Licença.
*
* Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA GARANTIA; sem
* uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
* Licença Pública Geral GNU/GPL em português para maiores detalhes.
* Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título "LICENCA.txt",
* junto com este programa, se não, acesse o Portal do Software Público Brasileiro no endereço
* www.softwarepublico.gov.br ou escreva para a Fundação do Software Livre(FSF)
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
* */
namespace br\gov\sial\core\persist\query;
use br\gov\sial\core\exception\IllegalArgumentException;
/**
* SIAL
*
* Fabrica de objeto de consulta
*
* @package br.gov.sial.core.persist
* @subpackage query
* @name JoinAbstract
* @author J. Augusto <augustowebd@gmail.com>
* */
abstract class JoinAbstract extends ClauseAbstract
{
/**
* @var integer
* */
const JOINABSTRACT_FACTORY_PARAM_NUMBER = 2;
/**
* @var string
* */
const JOINABSTRACT_EXPECTED_TWO_PARAM = 'são esperados exatados 2 (dois) parametros';
/**
* @var string
* */
const JOINABSTRACT_FIRST_PARAM_MUST_BE_ENTITY = 'O primeiro argumento deve ser do tipo Entity';
/**
* @var string
* */
const JOINABSTRACT_SECOND_PARAM_MUST_BE_RELATIONALABSTRACT = 'O primeiro argumento deve ser do tipo RelationalAbstract';
/**
* Referência para entidade.
*
* @var Entity
* */
protected $_entity;
/**
* Expressão de comparação usada no relacionamento entre entidades.
* ex.: LeftColumn Oper RightColumn/Expression
*
* @var
* */
protected $_conditional;
/**
* Retorna a entidade.
*
* @return Entity
* */
public function entity ()
{
return $this->_entity;
}
/**
* @return string
* */
public function render ()
{
$content = $this::T_COMMAND . ' '
. $this->_entity->qualifiedName() . ' ON '
. $this->_conditional->render();
return str_replace("'", '', $content);
}
/**
* Fábrica de JoinAbstract
*
* @return JoinAbstract
* @throws IllegalArgumentException
* */
public static function factory ()
{
$entity = func_get_arg(0);
$conditional = func_get_arg(1);
IllegalArgumentException::throwsExceptionIfParamIsNull(self::JOINABSTRACT_FACTORY_PARAM_NUMBER == func_num_args(), self::JOINABSTRACT_EXPECTED_TWO_PARAM);
IllegalArgumentException::throwsExceptionIfParamIsNull($entity instanceof Entity, self::JOINABSTRACT_FIRST_PARAM_MUST_BE_ENTITY);
IllegalArgumentException::throwsExceptionIfParamIsNull($conditional, self::JOINABSTRACT_SECOND_PARAM_MUST_BE_RELATIONALABSTRACT);
$join = parent::factory();
$join->_entity = $entity;
$join->_conditional = $conditional;
return $join;
}
}