/** * Para poder leer los metadatos de postgres se necesita hacer una conexión extra a la base * ya que la original tiene el error aguardando una resolución (por ejemplo en una transacción) * @return toba_db */ protected function get_conexion_extra() { if (!isset($this->conexion_extra)) { $this->conexion_extra = toba_admin_fuentes::instancia()->get_fuente($this->id_db_original, $this->proyecto_original)->get_db(false); } return $this->conexion_extra; }
/** * @return toba_admin_fuentes */ static function instancia() { if (!isset(self::$instancia)) { self::$instancia = new toba_admin_fuentes(); } return self::$instancia; }
function get_db($proyecto = null) { if (!isset($proyecto)) { $proyecto = $this->s__filtro['proyecto']; } $id = toba_info_editores::get_fuente_datos_defecto($proyecto); $fuente_datos = toba_admin_fuentes::instancia()->get_fuente($id, $proyecto); return $fuente_datos->get_db(); }
function evt__cuadro__explain($seleccion) { $info = toba::memoria()->get_dato_instancia('previsualizacion_consultas'); if (!isset($info)) { throw new toba_error('No se encontró información de consultas ejecutadas'); } if (isset($info['datos'][$seleccion['id']])) { $fuente = $info['fuente']; $base = toba_admin_fuentes::instancia()->get_fuente($fuente, toba_editor::get_proyecto_cargado())->get_db(); $sql = 'EXPLAIN ANALYZE ' . $info['datos'][$seleccion['id']]['sql']; $base->abrir_transaccion(); $datos = $base->consultar($sql, toba_db_fetch_num); $base->abortar_transaccion(); $salida = ''; foreach ($datos as $fila) { $salida .= $fila[0] . "\n "; } $salida = '<pre>' . $salida . '</pre>'; toba::notificacion()->info($salida); } }
/** * Indica las columnas por las que se relacionan dos tablas de un modelo de datos * retorna un array asociativo con un indice por tabla y un array con el listado de columnas en la segunda dimension. */ static function get_relacion($tabla_1, $tabla_2, $fuente_datos = null, $proyecto = null) { if (!$fuente_datos) { $fuente_datos = toba_admin_fuentes::instancia()->get_fuente_predeterminada(true, $proyecto); } if (!isset(self::$relaciones[$fuente_datos])) { self::cargar_relaciones($fuente_datos, $proyecto); } //Busco la relacion if (isset(self::$relaciones[$fuente_datos][$tabla_1][$tabla_2])) { $respuesta[$tabla_1] = self::$relaciones[$fuente_datos][$tabla_1][$tabla_2]['cols_1']; $respuesta[$tabla_2] = self::$relaciones[$fuente_datos][$tabla_1][$tabla_2]['cols_2']; } else { //La busco con el indice invertido if (isset(self::$relaciones[$fuente_datos][$tabla_2][$tabla_1])) { $respuesta[$tabla_1] = self::$relaciones[$fuente_datos][$tabla_2][$tabla_1]['cols_2']; $respuesta[$tabla_2] = self::$relaciones[$fuente_datos][$tabla_2][$tabla_1]['cols_1']; } else { throw new toba_error('Informacion del modelo de datos de la fuente: ' . $fuente_datos . ". No existe la relacion: {$tabla_1} - {$tabla_2}"); } } return $respuesta; }
static function db_proyecto_cargado($id_fuente) { $fuente_datos = toba_admin_fuentes::instancia()->get_fuente($id_fuente, toba_editor::get_proyecto_cargado()); return $fuente_datos->get_db(); }
function get_db($proyecto) { //Instancio la bd para el proyecto en cuestion $id = toba_info_editores::get_fuente_datos_defecto($proyecto); $fuente_datos = toba_admin_fuentes::instancia()->get_fuente($id, $proyecto); return $fuente_datos->get_db(); }
/** * Retorna un componente datos_tabla de una tabla específica del sistema * @param string $nombre_tabla * @param string $fuente Fuente a la que pertenece la tabla, si no se especifica se utiliza la por defecto del proyecto * @param boolean $reusar Indica si se reutiliza una instancia existente o se crea un objeto nuevo. Por defecto true. * @return toba_datos_tabla */ static function tabla($nombre_tabla, $fuente = null, $reusar = true) { if (!isset($fuente)) { $fuente = toba_admin_fuentes::get_fuente_predeterminada(true); } $id = array(); $id['proyecto'] = toba_proyecto::get_id(); $id['componente'] = toba_admin_fuentes::instancia()->get_fuente($fuente)->get_id_datos_tabla($nombre_tabla); //Se pide el dt con el cache activado asi evita duplicar las instancias $comp = toba_constructor::get_runtime($id, 'toba_datos_tabla', $reusar); if (!$comp->inicializado()) { $comp->inicializar(); } return $comp; }
function get_id_objeto($tabla) { try { $id = toba_admin_fuentes::instancia()->get_fuente($this->_fuente, $this->_proyecto)->get_id_datos_tabla($tabla); } catch (toba_error $e) { $id = null; } return $id; }