Error en los filtros de ef_combo_editables en toba 2.3

Hola!
Estaba trabajando en la version 2.1 de Toba y migré a la 2.3 (actualizada del repositorio).
Como consecuencia dejaron de filtrar los ef_combo_editables.
La dimension está bien definida, y en las pruebas en el editor funciona.
Siguiendo la causa del error, pude “parcharlo” a través de la siguiente modificación en el archivo toba_perfil_datos.php en lib.

if (! empty($where_join)) {
$sql = sql_concatenar_where($sql, $where_join, ‘PERFIL DE DATOS’);
//$sql = sql_concatenar_clausulas_producto_cartesiano($sql, $fuente_datos, $where_join);
}

en la función:

	function filtrar_sql($sql, $fuente_datos=null,$dimensiones_desactivar = null)
	{
		$where = $where_join = array();
		$this->operadores_asimetricos = array();
		$sql = $this->quitar_comentarios_sql($sql);
		//-- 1 -- Busco GATILLOS en el SQL
		$tablas_gatillo_encontradas = $this->buscar_tablas_gatillo_en_sql( $sql, $fuente_datos );
		//-- 2 -- Busco las dimensiones implicadas
		$dimensiones_implicadas = $this->reconocer_dimensiones_implicadas( array_keys($tablas_gatillo_encontradas), $fuente_datos );
		//-- 3 -- Obtengo la clausula WHERE correspondiente a cada dimension
		foreach( $dimensiones_implicadas as $dimension => $tabla ) {
			if(isset($dimensiones_desactivar) && in_array($dimension,$dimensiones_desactivar)) continue;
			$alias_tabla = $tablas_gatillo_encontradas[$tabla];
			//Genero la clausula para la tabla gatillo
			$where_gatillo = $this->get_where_dimension_gatillo($fuente_datos, $dimension, $tabla, $alias_tabla);
			if (isset($this->operadores_asimetricos[$tabla]) && ($this->operadores_asimetricos[$tabla] != ',')) {			//Si existe un operador opcional para la tabla gatillo
				$where_join[$tabla] = $where_gatillo;
			} else {
				$where[] = $where_gatillo;											//Lo incorporo a las clausulas del where
			}
		}
		$sql = $this->quitar_comentarios_sql($sql);
		//-- 4 -- Altero el SQL
		if(! empty($where)) {
			$sql = sql_concatenar_where($sql, $where, 'PERFIL DE DATOS');
		}

		// -- 5 -- Altero el From cuando hay left/right joins (Esta detras porque sql_concatenar_where no se banca subselects)
		if (! empty($where_join)) {
			$sql = sql_concatenar_where($sql, $where_join, 'PERFIL DE DATOS');
			//$sql = sql_concatenar_clausulas_producto_cartesiano($sql, $fuente_datos, $where_join);
		}
		return $sql;
	}

Está claro que es un parche inmediato que soluciona mi problema “urgente”, y no una solución definitiva que requiere un mayor análisis para poder cerrar correctamente la corrección (o la corrección que yo deberé hacer).

De todas formas, más allá de que pareciera ser necesario revisar esta función, la que no devuelve el aparente resultado deseado es toba_sql::sql_concantenar_clausular_producto_cartesiano (en la carpeta nucleo/lib).

Adjunto la consulta afectada, y la definición de la dimensión.


1.JPG

1.JPG_thumb.png

2.JPG

2.JPG_thumb.png

filtro.doc (31 KB)

Martin,

Probaste borrando el cache por si esta usando algun JS viejo?.

La dimension está bien definida, y en las pruebas en el editor funciona.

De todas formas, más allá de que pareciera ser necesario revisar esta función, la que no devuelve el aparente resultado deseado es toba_sql::sql_concantenar_clausular_producto_cartesiano (en la carpeta nucleo/lib).

Adjunto la consulta afectada, y la definición de la dimensión.

La consulta que adjuntaste, es el resultado luego de tu modificacion o es la prueba desde el editor sin realizar la modificacion?.
Tenes la SQL que te genera equivocadamente?, digamos el resultado final asi puedo ver donde esta modificando equivocadamente?.

Saludos

La prueba es en el editor.
La consulta es esa misma.
Tiré logs en todos lados y $where_join llega con valor.
Pero de sql_concantenar_clausular_producto_cartesiano sale sin la inclusión del filtro en $sql.
Al aplicarle la otra función, sale andando.
Por esto me parece que es más de php que por un js en cache (pero no, no lo borré explicitamente).
Lo que no sé si es que con esa consulta debería salir $where o $where_join con valor.
Y tampoco estudie la lógica de las funciones… probé, funcionó… llevé a producción.
Así anda… pero algo no esté bien del todo (mi “parche” seguro no lo esta!!! jeje)

Hola Martin,

ok, me fijo de replicar las tablas en el proyecto referencia y probar con esa SQL, en ppio la funcion deberia modificar las clausulas del join nomas, no tocar el where de toda la SQL.

Por esto me parece que es más de php que por un js en cache (pero no, no lo borré explicitamente).
Esto era por lo del combo_editable, no por la SQL en si... no entendia muy bien que tenia que ver con el problema que mencionabas... pero como decias que no te funcionaban por eso te pregunte.
Lo que no sé si es que con esa consulta debería salir $where o $where_join con valor.
Segun lo que vi, ambos dos deberian salir con valor debido a que en el FROM esta tanto un gatillo directo, como la tabla de la dimension directamente involucradas. Lo que seguro no tiene que pasar, es que por agregar algo al JOIN se pierda el where de la tabla.
Y tampoco estudie la lógica de las funciones... probé, funcionó... llevé a producción. Así anda... pero algo no esté bien del todo (mi "parche" seguro no lo esta!!! jeje)
Ehhh... no quiero meterme con tu esquema de desarrollo... pero migrar de version de Toba asi, te va a traer problemas tarde o temprano.

Saludos

Ehhh... no quiero meterme con tu esquema de desarrollo... pero migrar de version de Toba asi, te va a traer problemas tarde o temprano.
Todo bien... acepto la sugerencia. Lo hice porque necesito 2 funcionalidades, 1 el trabajar con tablas de distintos esquemas que puedan pertenecer a un mismo datos_relación, y por otro lado, la exportación del ei_grafico a pdf (no probé aún ninguna de ambas dos, pero es el camino).

Con respecto a las prueba, el $where sale sin valor, aunque si el $where_join, por ello, entra en la segunda consulta. Si el $where saliera con valor, no entraría en la segunda consulta, y entonces la falla podría estar en la función de origen, y no en sql_concantenar_clausular_producto_cartesiano.
Estos datos te los paso, porque fui tirando dumps de dichas variables para ver como solucionar mi problema inmediato.