Exemple #1
0
 /**
  * @param mixed $id_registro Clave interna del registro
  * @ignore 
  */
 protected function ejecutar_sql_update($id_registro, $tabla = null, $where = null, $cols_tabla = array(), $tabla_ext = false)
 {
     $binarios = array();
     $registro = $this->datos[$id_registro];
     $cambios_reales = $this->objeto_tabla->get_cambios_fila($id_registro, $registro);
     $tabla = is_null($tabla) ? $this->_tabla : $tabla;
     $columnas = empty($cols_tabla) ? $this->_columnas : $cols_tabla;
     //Genero las sentencias de la clausula SET para cada columna
     $set = array();
     $db = toba::db($this->_fuente);
     foreach ($columnas as $columna) {
         $col = $columna['columna'];
         $es_binario = $columna['tipo'] == 'B';
         $es_secuencia = $columna['secuencia'] != "";
         $es_externa = $columna['externa'] == 1;
         $es_clave = $columna['pk'] == 1;
         //columna modificable: realmente se modifico, no es secuencia, no es externa,
         $es_modificable = !$es_secuencia && !$es_externa && isset($cambios_reales[$col]) && (!$es_clave || $es_clave && $this->get_flag_mod_clave());
         //	no es PK (excepto que se se declare explicitamente la alteracion de PKs)
         if ($es_modificable) {
             if ($es_binario) {
                 $blob = $this->objeto_tabla->_get_blob_transaccion($id_registro, $col);
                 if ($blob === false) {
                     //-- Si no esta seteado es un blob nulo
                     $set[] = "{$col} = NULL";
                 } elseif (is_resource($blob)) {
                     $binarios[] = $blob;
                     $set[] = "{$col} = ?";
                 } else {
                     //No tocar nada
                 }
             } elseif (!isset($registro[$col]) || $registro[$col] === NULL) {
                 $set[] = "{$col} = NULL";
             } elseif (is_bool($registro[$col])) {
                 $valor = $registro[$col] ? 1 : 0;
                 $set[] = "{$col} = '{$valor}'";
             } else {
                 if ($this->_hacer_trim_datos) {
                     $set[] = "{$col} = " . $db->quote(trim($registro[$col]));
                 } else {
                     $set[] = "{$col} = " . $db->quote($registro[$col]);
                 }
             }
         }
     }
     if (empty($set)) {
         $this->log('No hay campos para hacer el UPDATE');
         return null;
     }
     //Armo el SQL
     $where = is_null($where) ? $this->generar_sql_where_registro($id_registro) : $where;
     $sql = "UPDATE " . $this->agregar_schema($tabla, $tabla_ext) . "\nSET " . implode(",\n\t", $set) . "\nWHERE " . implode("\n\tAND ", $where) . ";";
     $this->log("registro: {$id_registro}\n " . $sql);
     if (empty($binarios)) {
         $this->ejecutar_sql($sql, $id_registro);
     } else {
         $this->ejecutar_con_binarios($sql, $binarios, $id_registro);
     }
 }
 /**
  * Reconecta las columnas relacionadas entre las tablas recien clonadas
  * @param array $dep_nuevas Objetos toba_datos_tabla_info con la informacion de la nuevas tablas
  * @param array $dep_viejas Objetos toba_datos_tabla_info con la informacion de las originales
  * @param toba_datos_tabla $tabla_dr Objeto que representa la tabla de relacion de columnas
  */
 function clonar_relacion_columnas($dep_nuevas, $dep_viejas, $tabla_dr)
 {
     $relaciones_disponibles = $tabla_dr->get_filas(null, true, false);
     foreach ($relaciones_disponibles as $id_fila => $rel_columnas) {
         //Obtengo los ids de las tablas padre e hija.
         $tabla_padre = $rel_columnas['padre_objeto'];
         $tabla_hija = $rel_columnas['hijo_objeto'];
         //Obtengo los datos originales de las columnas padre e hija.
         $original_padre = current($dep_viejas[$tabla_padre]->get_info_columnas(array('col_id' => $rel_columnas['padre_clave'])));
         $original_hijo = current($dep_viejas[$tabla_hija]->get_info_columnas(array('col_id' => $rel_columnas['hijo_clave'])));
         //Ahora busco los datos para la misma columna pero entre los nuevos
         $nuevo_padre = current($dep_nuevas[$tabla_padre]->get_info_columnas(array('columna' => $original_padre['columna'])));
         $nuevo_hijo = current($dep_nuevas[$tabla_hija]->get_info_columnas(array('columna' => $original_hijo['columna'])));
         //Genero la nueva fila con los datos modificados
         $nva_fila = array('padre_objeto' => $nuevo_padre['objeto'], 'padre_clave' => $nuevo_padre['col_id'], 'hijo_objeto' => $nuevo_hijo['objeto'], 'hijo_clave' => $nuevo_hijo['col_id']);
         $tabla_dr->modificar_fila($id_fila, $nva_fila);
     }
 }