[SOLUCIONADO] Error con toba::db()->get_sql_carga_tabla

Buenas…

Resulta que el método toba::db()->get_sql_carga_tabla(…) construye mal el SQL cuando mas de dos columnas son FK de las misma tabla…

Aquí les muestro el SQL arrojado (es un ejemplo) :

SELECT 
t_tp.id_principal, t_ts.descripcion as fk_secundaria_uno_nombre, 
t_secundaria.descripcion as fk_secundaria_dos_nombre, 
t_secundaria.descripcion as fk_secundaria_tres_nombre 
FROM t_principal as t_tp LEFT OUTER JOIN t_secundaria as t_ts ON (t_tp.fk_secundaria_uno = t_ts.id_secundario) 
LEFT OUTER JOIN t_secundaria as t_secundaria ON (t_tp.fk_secundaria_dos = t_secundaria.id_secundario) 
LEFT OUTER JOIN t_secundaria as t_secundaria ON (t_tp.fk_secundaria_tres = t_secundaria.id_secundario)

Como se puede apreciar, para la primera referencia se utiliza un alias, pero para la segunda y tercer referencia se utiliza el nombre de la tabla, con lo cual la ejecución de este SELECT arroja un error:

Duplicate alias: 7 ERROR: table name "t_secundaria" specified more than once

Les adjunto un parche al problema, simplemente cuando el alias figura más de una vez, se incluye un número para diferenciarlos. Con este ajuste el SQL arrojado es:

SELECT
t_tp.id_principal, t_ts.descripcion as fk_secundaria_uno_nombre, 
t_ts1.descripcion as fk_secundaria_dos_nombre, 
t_ts2.descripcion as fk_secundaria_tres_nombre 
FROM t_principal as t_tp LEFT OUTER JOIN t_secundaria as t_ts ON (t_tp.fk_secundaria_uno = t_ts.id_secundario) 
LEFT OUTER JOIN t_secundaria as t_ts1 ON (t_tp.fk_secundaria_dos = t_ts1.id_secundario) 
LEFT OUTER JOIN t_secundaria as t_ts2 ON (t_tp.fk_secundaria_tres = t_ts2.id_secundario)

Espero les sirva para poder encontrar una solución mas elegante…

Saludos

José


Hola Jose,

te cuento que acabo de subir el fix que nos enviaste a la rama 1.5, de mas esta decir gracias por el aviso y por la solucion.

Saludos