47
40
* @param string $table tabla
48
41
* @param string $schema schema
51
44
abstract public function describe($table, $schema=NULL);
56
49
* @param string $connection nombre de conexion en databases.ini
58
51
public function __construct($connection)
60
53
$this->_connection = $connection;
64
* Obtiene instancia de adaptador en funcion de la conexion (utiliza Singleton)
57
* Obtiene instancia de query en funcion de la conexion
66
59
* @param string $connection conexion a base de datos en databases.ini
67
60
* @return DbAdapter
68
61
* @throw KumbiaException
70
public static function factory($connection = NULL)
63
public static function factory($connection=NULL)
72
// Carga la conexion por defecto
65
// carga la conexion por defecto
73
66
if (!$connection) {
74
67
$connection = Config::get('config.application.database');
77
// Si no existe el Singleton
78
if(!isset(self::$_adapters[$connection])) {
79
// Lee la configuracion de base de datos
80
$databases = Config::read('databases');
82
if(!isset($databases[$connection])) {
83
throw new KumbiaException("No existe la conexion $connection en databases.ini");
86
$database = $databases[$connection];
88
// Genera el nombre de clase
89
$Class = ucfirst($database['type']) . 'Db';
91
// Si no existe la clase la carga
92
if(!class_exists($Class, FALSE)) {
94
require CORE_PATH . "libs/ActiveRecord/db_pool/adapters/{$database['type']}_db.php";
97
// Instancia el adaptador
98
self::$_adapters[$connection] = new $Class($connection);
101
// Retorna el adaptador
102
return self::$_adapters[$connection];
70
// lee la configuracion de base de datos
71
$databases = Config::read('databases');
73
if(!isset($databases[$connection])) {
74
throw new KumbiaException("No existe la conexion $connection en databases.ini");
77
$database = $databases[$connection];
79
// genera el nombre de clase
80
$Class = ucfirst($database['type']) . 'Db';
82
// si no existe la clase la carga
83
if(!class_exists($Class, FALSE)) {
85
require CORE_PATH . "libs/ActiveRecord/db_pool/adapters/{$database['type']}_db.php";
88
return new $Class($connection);
92
* Genera el objeto pdo para la conexion
98
return DbPool::factory($this->_connection);
106
102
* Genera la consulta sql concreta
108
104
* @param DbQuery $dbQuery
110
* @throw KumbiaException
112
107
public function query($dbQuery)
114
109
$sqlArray = $dbQuery->getSqlArray();
116
// Verifica si se indico una table
111
// verifica si se indico una table
117
112
if(!isset($sqlArray['table'])) {
118
113
throw new KumbiaException("Debe indicar una tabla para efectuar la consulta");
121
if(isset($sqlArray['command'])) {
122
return $this->{"_{$sqlArray['command']}"}($sqlArray);
116
if(isset($sqlArray['select'])) {
117
return $this->_select($sqlArray);
119
} elseif(isset($sqlArray['insert'])) {
120
return $this->_insert($sqlArray);
122
} elseif(isset($sqlArray['update'])) {
123
return $this->_update($sqlArray);
125
} elseif(isset($sqlArray['delete'])) {
126
return $this->_delete($sqlArray);
125
throw new KumbiaException("Debe indicar un comando de consulta SQL");
157
158
* @param array $sqlArray
160
161
protected function _insert($sqlArray)
162
// Obtiene las columns
163
$columns = implode(', ', array_keys($sqlArray['data']));
164
// Parámetros enlazados para SQL PS
165
$values = implode(', ', array_keys($sqlArray['bind']));
167
// Verifica si esta definido el eschema
163
// alias para manejar mas facil
164
$insert = $sqlArray['insert'];
167
if(is_array($insert['columns'])) {
168
// obtiene la conexion pdo
174
foreach($insert['columns'] as $k => $v) {
176
//$values[] = $pdo->quote($v);
180
$columns = implode(', ', $columns);
181
$values = implode(', ', $values);
183
$columns = $insert['columns'];
184
$values = $insert['values'];
187
// verifica si esta definido el eschema
168
188
if(isset($sqlArray['schema'])) {
169
189
$source = "{$sqlArray['schema']}.{$sqlArray['table']}";
171
191
$source = $sqlArray['table'];
173
194
return "INSERT INTO $source ($columns) VALUES ($values)";
179
200
* @param array $sqlArray
182
203
protected function _update($sqlArray)
184
// Construye la pareja clave, valor para SQL PS
186
foreach(array_keys($sqlArray['data']) as $k) {
187
$values[] = "$k = :$k";
206
if(is_array($sqlArray['update'])) {
207
// obtiene la conexion pdo
212
foreach($sqlArray['update'] as $k => $v) {
213
$values[] = "$k=" . $pdo->quote($v);
216
$values = implode(', ', $values);
218
$values = $sqlArray['update'];
189
$values = implode(', ', $values);
191
// Verifica si esta definido el eschema
221
// verifica si esta definido el eschema
192
222
if(isset($sqlArray['schema'])) {
193
223
$source = "{$sqlArray['schema']}.{$sqlArray['table']}";
222
252
* @param array $sqlArray array de condiciones
223
253
* @param string $sql consulta sql donde se unira las clausulas
226
256
protected function _joinClausules($sqlArray, $sql)
229
259
if(isset($sqlArray['join'])) {
230
260
foreach($sqlArray['join'] as $join) {
231
261
$sql .= " INNER JOIN {$join['table']} ON ({$join['conditions']})";
235
// Para left outer join
265
// para left outer join
236
266
if(isset($sqlArray['leftJoin'])) {
237
267
foreach($sqlArray['leftJoin'] as $join) {
238
268
$sql .= " LEFT OUTER JOIN {$join['table']} ON ({$join['conditions']})";
242
// Para right outer join
272
// para right outer join
243
273
if(isset($sqlArray['rightJoin'])) {
244
274
foreach($sqlArray['rightJoin'] as $join) {
245
275
$sql .= " RIGHT OUTER JOIN {$join['table']} ON ({$join['conditions']})";
250
280
if(isset($sqlArray['fullJoin'])) {
251
281
foreach($sqlArray['fullJoin'] as $join) {
252
282
$sql .= " FULL JOIN {$join['table']} ON ({$join['conditions']})";
256
286
if(isset($sqlArray['where'])) {
257
287
if(is_array($sqlArray['where'])) {
259
$where = ' ' . implode(' ', $sqlArray['where']);
288
// obtiene la conexion pdo
291
// genera la condicion where partiendo de un array
293
/*foreach($sqlArray['where'] as $k) {
294
//$where[] = "$k=" . $pdo->quote($v);
297
$where = implode(' AND ', $sqlArray['where']);
261
299
$where = $sqlArray['where'];