From e83bf02674b100790b82029f19944e6617ba3707 Mon Sep 17 00:00:00 2001 From: NeoRazorX Date: Thu, 9 Aug 2018 12:29:47 +0200 Subject: [PATCH] Ahora se guardan en el log los errores en consultas en las funciones select() y exec() del motor de base de datos. --- base/fs_db2.php | 312 ++++++++++++++++++++--------------------- base/fs_mysql.php | 7 +- base/fs_postgresql.php | 2 + 3 files changed, 163 insertions(+), 158 deletions(-) diff --git a/base/fs_db2.php b/base/fs_db2.php index 6edfc5f..c2a9e03 100644 --- a/base/fs_db2.php +++ b/base/fs_db2.php @@ -10,11 +10,11 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License - * along with this program. If not, see . + * along with this program. If not, see . */ require_once 'base/fs_mysql.php'; require_once 'base/fs_postgresql.php'; @@ -60,22 +60,65 @@ public function __construct() } /** - * Devuelve el valor de auto_transacions, para saber si las transacciones - * automáticas están activadas o no. + * Inicia una transacción SQL. * @return boolean */ - public function get_auto_transactions() + public function begin_transaction() { - return self::$auto_transactions; + return self::$engine->begin_transaction(); } /** - * Activa/desactiva las transacciones automáticas en la función exec() - * @param boolean $value + * Realiza comprobaciones extra a la tabla. + * @param string $table_name + * @return boolean */ - public function set_auto_transactions($value) + public function check_table_aux($table_name) { - self::$auto_transactions = $value; + return self::$engine->check_table_aux($table_name); + } + + /** + * Desconecta de la base de datos. + * @return boolean + */ + public function close() + { + return self::$engine->close(); + } + + /** + * Guarda los cambios de una transacción SQL. + * @return boolean + */ + public function commit() + { + return self::$engine->commit(); + } + + /** + * Compara dos arrays de columnas, devuelve una sentencia sql en caso de encontrar diferencias. + * @param string $table_name + * @param array $xml_cols + * @param array $db_cols + * @return string + */ + public function compare_columns($table_name, $xml_cols, $db_cols) + { + return self::$engine->compare_columns($table_name, $xml_cols, $db_cols); + } + + /** + * Compara dos arrays de restricciones, devuelve una sentencia sql en caso de encontrar diferencias. + * @param string $table_name + * @param array $xml_cons + * @param array $db_cons + * @param boolean $delete_only + * @return string + */ + public function compare_constraints($table_name, $xml_cons, $db_cons, $delete_only = FALSE) + { + return self::$engine->compare_constraints($table_name, $xml_cons, $db_cons, $delete_only); } /** @@ -97,48 +140,68 @@ public function connected() } /** - * Desconecta de la base de datos. - * @return boolean + * Devuelve el estilo de fecha del motor de base de datos. + * @return string */ - public function close() + public function date_style() { - return self::$engine->close(); + return self::$engine->date_style(); } /** - * Devuelve el motor de base de datos usado y la versión. + * Escapa las comillas de la cadena de texto. + * @param string $str * @return string */ - public function version() + public function escape_string($str) { - return self::$engine->version(); + return self::$engine->escape_string($str); } /** - * Devuelve el nº de selects a la base de datos. - * @return integer + * Ejecuta sentencias SQL sobre la base de datos (inserts, updates o deletes). + * Para hacer selects, mejor usar select() o selec_limit(). + * Por defecto se inicia una transacción, se ejecutan las consultas, y si todo + * sale bien, se guarda, sino se deshace. + * Se puede evitar este modo de transacción si se pone false + * en el parametro transaction, o con la función set_auto_transactions(FALSE) + * @param string $sql + * @param boolean $transaction + * @return boolean */ - public function get_selects() + public function exec($sql, $transaction = NULL) { - return self::$engine->get_selects(); + /// usamos self::$auto_transactions como valor por defecto para la función + if (is_null($transaction)) { + $transaction = self::$auto_transactions; + } + + /// limpiamos la lista de tablas, ya que podría haber cambios al ejecutar este sql. + self::$table_list = FALSE; + + return self::$engine->exec($sql, $transaction); } /** - * Devuelve el nº de transacciones con la base de datos. - * @return integer + * Devuelve la sentencia sql necesaria para crear una tabla con la estructura proporcionada. + * @param string $table_name + * @param array $xml_cols + * @param array $xml_cons + * @return string */ - public function get_transactions() + public function generate_table($table_name, $xml_cols, $xml_cons) { - return self::$engine->get_transactions(); + return self::$engine->generate_table($table_name, $xml_cols, $xml_cons); } /** - * Devuelve el historial SQL. - * @return array + * Devuelve el valor de auto_transacions, para saber si las transacciones + * automáticas están activadas o no. + * @return boolean */ - public function get_history() + public function get_auto_transactions() { - return self::$engine->get_history(); + return self::$auto_transactions; } /** @@ -166,6 +229,15 @@ public function get_constraints($table_name, $extended = FALSE) return self::$engine->get_constraints($table_name); } + /** + * Devuelve el historial SQL. + * @return array + */ + public function get_history() + { + return self::$engine->get_history(); + } + /** * Devuelve una array con los indices de una tabla dada. * @param string $table_name @@ -185,6 +257,33 @@ public function get_locks() return self::$engine->get_locks(); } + /** + * Devuelve el nº de selects a la base de datos. + * @return integer + */ + public function get_selects() + { + return self::$engine->get_selects(); + } + + /** + * Devuelve el nº de transacciones con la base de datos. + * @return integer + */ + public function get_transactions() + { + return self::$engine->get_transactions(); + } + + /** + * Devuleve el último ID asignado al hacer un INSERT en la base de datos. + * @return integer + */ + public function lastval() + { + return self::$engine->lastval(); + } + /** * Devuelve un array con los nombres de las tablas de la base de datos. * @return array @@ -199,27 +298,12 @@ public function list_tables() } /** - * Devuelve TRUE si la tabla existe, FALSE en caso contrario. - * @param string $name - * @param array $list + * Deshace los cambios de una transacción SQL. * @return boolean */ - public function table_exists($name, $list = FALSE) + public function rollback() { - $result = FALSE; - - if ($list === FALSE) { - $list = $this->list_tables(); - } - - foreach ($list as $table) { - if ($table['name'] == $name) { - $result = TRUE; - break; - } - } - - return $result; + return self::$engine->rollback(); } /** @@ -249,82 +333,12 @@ public function select_limit($sql, $limit = FS_ITEM_LIMIT, $offset = 0) } /** - * Ejecuta sentencias SQL sobre la base de datos (inserts, updates o deletes). - * Para hacer selects, mejor usar select() o selec_limit(). - * Por defecto se inicia una transacción, se ejecutan las consultas, y si todo - * sale bien, se guarda, sino se deshace. - * Se puede evitar este modo de transacción si se pone false - * en el parametro transaction, o con la función set_auto_transactions(FALSE) - * @param string $sql - * @param boolean $transaction - * @return boolean - */ - public function exec($sql, $transaction = NULL) - { - /// usamos self::$auto_transactions como valor por defecto para la función - if (is_null($transaction)) { - $transaction = self::$auto_transactions; - } - - /// limpiamos la lista de tablas, ya que podría haber cambios al ejecutar este sql. - self::$table_list = FALSE; - - return self::$engine->exec($sql, $transaction); - } - - /** - * Devuleve el último ID asignado al hacer un INSERT en la base de datos. - * @return integer - */ - public function lastval() - { - return self::$engine->lastval(); - } - - /** - * Inicia una transacción SQL. - * @return boolean - */ - public function begin_transaction() - { - return self::$engine->begin_transaction(); - } - - /** - * Guarda los cambios de una transacción SQL. - * @return boolean - */ - public function commit() - { - return self::$engine->commit(); - } - - /** - * Deshace los cambios de una transacción SQL. - * @return boolean - */ - public function rollback() - { - return self::$engine->rollback(); - } - - /** - * Escapa las comillas de la cadena de texto. - * @param string $str - * @return string - */ - public function escape_string($str) - { - return self::$engine->escape_string($str); - } - - /** - * Devuelve el estilo de fecha del motor de base de datos. - * @return string + * Activa/desactiva las transacciones automáticas en la función exec() + * @param boolean $value */ - public function date_style() + public function set_auto_transactions($value) { - return self::$engine->date_style(); + self::$auto_transactions = $value; } /** @@ -338,49 +352,35 @@ public function sql_to_int($col_name) } /** - * Compara dos arrays de columnas, devuelve una sentencia sql en caso de encontrar diferencias. - * @param string $table_name - * @param array $xml_cols - * @param array $db_cols - * @return string + * Devuelve TRUE si la tabla existe, FALSE en caso contrario. + * @param string $name + * @param array $list + * @return boolean */ - public function compare_columns($table_name, $xml_cols, $db_cols) + public function table_exists($name, $list = FALSE) { - return self::$engine->compare_columns($table_name, $xml_cols, $db_cols); - } + $result = FALSE; - /** - * Compara dos arrays de restricciones, devuelve una sentencia sql en caso de encontrar diferencias. - * @param string $table_name - * @param array $xml_cons - * @param array $db_cons - * @param boolean $delete_only - * @return string - */ - public function compare_constraints($table_name, $xml_cons, $db_cons, $delete_only = FALSE) - { - return self::$engine->compare_constraints($table_name, $xml_cons, $db_cons, $delete_only); - } + if ($list === FALSE) { + $list = $this->list_tables(); + } - /** - * Devuelve la sentencia sql necesaria para crear una tabla con la estructura proporcionada. - * @param string $table_name - * @param array $xml_cols - * @param array $xml_cons - * @return string - */ - public function generate_table($table_name, $xml_cols, $xml_cons) - { - return self::$engine->generate_table($table_name, $xml_cols, $xml_cons); + foreach ($list as $table) { + if ($table['name'] == $name) { + $result = TRUE; + break; + } + } + + return $result; } /** - * Realiza comprobaciones extra a la tabla. - * @param string $table_name - * @return boolean + * Devuelve el motor de base de datos usado y la versión. + * @return string */ - public function check_table_aux($table_name) + public function version() { - return self::$engine->check_table_aux($table_name); + return self::$engine->version(); } } diff --git a/base/fs_mysql.php b/base/fs_mysql.php index 05d805c..75da966 100644 --- a/base/fs_mysql.php +++ b/base/fs_mysql.php @@ -317,8 +317,10 @@ public function exec($sql, $transaction = TRUE) } if (self::$link->errno) { - self::$core_log->new_error('Error al ejecutar la consulta ' . $i . ': ' . self::$link->error . - '. La secuencia ocupa la posición ' . count(self::$core_log->get_sql_history())); + $error = 'Error al ejecutar la consulta ' . $i . ': ' . self::$link->error . + '. La secuencia ocupa la posición ' . count(self::$core_log->get_sql_history()); + self::$core_log->new_error($error); + self::$core_log->save($error); } else { $result = TRUE; } @@ -556,6 +558,7 @@ public function select($sql) } else { /// añadimos el error a la lista de errores self::$core_log->new_error(self::$link->error); + self::$core_log->save(self::$link->error); } /// aumentamos el contador de selects realizados diff --git a/base/fs_postgresql.php b/base/fs_postgresql.php index 3307b9c..da1ea17 100644 --- a/base/fs_postgresql.php +++ b/base/fs_postgresql.php @@ -233,6 +233,7 @@ public function exec($sql, $transaction = TRUE) $result = TRUE; } else { self::$core_log->new_error(pg_last_error(self::$link) . '. La secuencia ocupa la posición ' . count(self::$core_log->get_sql_history())); + self::$core_log->save(pg_last_error(self::$link) . '. La secuencia ocupa la posición ' . count(self::$core_log->get_sql_history())); } if ($transaction) { @@ -475,6 +476,7 @@ public function select($sql) } else { /// añadimos el error a la lista de errores self::$core_log->new_error(pg_last_error(self::$link)); + self::$core_log->save(pg_last_error(self::$link)); } /// aumentamos el contador de selects realizados