En realidad, he visto este tipo de cosas usadas en los informes de BIRT. La consulta pasada al tiempo de ejecución BIRT tiene la forma:
select a,b,c from t where a = ?
y el '?' se reemplaza en tiempo de ejecución por un valor de parámetro real seleccionado de un cuadro desplegable. Las opciones en el menú desplegable están dadas por:
select distinct a from t
union all
select '*' from sysibm.sysdummy1
para que obtenga todos los valores posibles más " *
". Si el usuario selecciona " *
" en el cuadro desplegable (lo que significa que todos los valores de a deben seleccionarse), la consulta debe modificarse (mediante Javascript) antes de ejecutarse.
Desde el "?" es un parámetro posicional y DEBE permanecer allí para que otras cosas funcionen, el Javascript modifica la consulta para que sea:
select a,b,c from t where ((a = ?) or (1==1))
Básicamente, eso elimina el efecto de la cláusula where y deja el parámetro posicional en su lugar.
También he visto el caso AND utilizado por los codificadores perezosos al crear dinámicamente una consulta SQL.
Supongamos que tiene que crear dinámicamente una consulta que comienza con select * from t
y comprueba:
- el nombre es Bob; y
- el salario es> $ 20,000
algunas personas agregarían el primero con un DÓNDE y los siguientes con un Y así:
select * from t where name = 'Bob' and salary > 20000
Los programadores perezosos (y eso no es necesariamente un mal rasgo) no distinguirían entre las condiciones agregadas, comenzarían select * from t where 1=1
y simplemente agregarían cláusulas AND después de eso.
select * from t where 1=1 and name = 'Bob' and salary > 20000