Nuevas operaciones con tablas virtuales

Nuevas operaciones con tablas virtuales

Se han añadido dos nuevas operaciones a los vtables o tablas virtuales. La primera operación permite añadir a una vtable los registros de otro vtable, evitando valores duplicados. La segunda operación, permite eliminar de una tabla virtual las filas que existan en una segunda vtable.

De esta forma, se siguen potenciando las tablas virtuales, como estructuras de datos que permiten simular el uso de tablas temporales y que cuenta, además con la ventaja de evitar accesos al servidor de base de datos y por consiguiente reduce el tráfico entre éste y el servido de aplicaciones.

Suma de vtables evitando duplicados

El tag vtable.addVTable tiene como argumentos dos tablas virtuales, añadiendo a la primera vtable las filas de la segunda. Ambas tablas virtuales han de tener la misma estructura. Es la operación equivalente al UNION ALL de SQL, pues se suman las dos tablas virtuales sin ninguna consideración sobre posible duplicación de filas. Hasta ahora, si la vtable primera tiene una clave primaria y la suma da como resultado duplicados en dicha clave, se emite un error.

A addVTable, se le ha incorporado un atributo booleano, union, que con valor true, permite realizar la suma de las dos vtables, sin que se produzca como resultado filas con valores duplicados para la clave primaria. Es la operación análoga a una sentencia UNION de SQL. Con union=’false’, la operación funciona sin eliminar filas duplicadas; es decir, de la misma forma que hasta ahora.

El atributo no es obligatorio. Si se omite, se contempla con valor false y la operación no evita posibles filas duplicadas. La sintaxis con el nuevo atributo es:

<vtable.addVTable union='true'>
    <vtable1 />
    <vtable2 />
</vtable.addVTable>

Restar dos vtables

Hay un nuevo tag, vtable.subVTable que permite a un vtable restar todos las filas que existen en una segunda vtable. Equivale a la operador SQL NOT IN. La sintaxis del tag es:

<vtable.subVTable>
    <vtable1 />
    <vtable2 />
</vtable.subVTable>

Donde vtable1 es la tabla virtual a la que se eliminan filas y vtable2 es la tabla con las filas que se quieren eliminar a vtable1.