Permite realizar filtrado de datos en tablas virtuales. Es el equivalentea las condiciones where en los SQL tradicionales, es decir permite seleccionar registros de una tabla virtual filtrando por los valores de sus columnas.

Los filtros se escriben como expresiones regulares. La tabla virtual puede ser indicada mediante su nombre vía el atributo name o bien ser pasadacomo argumento.

La comparación entre la expresión regular y el dato correspondiente de la columna para cada registro, se realiza mediante la función java toString(). En general es una buena solución, pero puede que para campos decimales no funcione correctamente, debido a que el dato puede estar almacenado de forma diferente a como se indica en la expresión regular.

Cuando se desee filtrar por valores nulos de la columna, no hay que indicar el atributo regexp.

1 vtable.filter

<vtable.filter name='name'>
    <column
        name='name'
        regexp='regexp'
    /> +
    <vtable /> ?
</vtable.filter>
Example

Seleccionar registros de una tabla virtual filtrando por los valores de sus columnas.

Copy
<xsql-script name='vtable_filter_sample1'>
    <body>
        <vtable name='v_test'>
            <column name='codigo' type='char' unique='true' />
            <column name='nombre' type='char' size='25' />
            <column name='numero' type='integer' />
            <column name='saldo' type='decimal' scale='2' />
        </vtable>

        <vtable.insert name='v_test'>
            <column name='codigo'>A1</column>
            <column name='nombre'>Nombre A1</column>
            <column name='numero'>1</column>
            <column name='saldo'>123.4</column>
        </vtable.insert>

        <vtable.insert name='v_test'>
            <column name='codigo'>A2</column>
            <column name='nombre'>Nombre A2</column>
            <column name='numero'>2</column>
            <column name='saldo'>355.891</column>
        </vtable.insert>

        <vtable.insert name='v_test'>
            <column name='codigo'>A3</column>
            <column name='nombre'>Nombre A3</column>
            <column name='numero'>3</column>
            <column name='saldo'>10002020.891</column>
        </vtable.insert>

        <vtable.insert name='v_test'>
            <column name='codigo'>A4</column>
            <column name='nombre'>Nombre A4</column>
            <column name='numero'>4</column>
            <column name='saldo'><null /></column>
        </vtable.insert>

        <vtable.insert name='v_test'>
            <column name='codigo'>A5</column>
            <column name='nombre'>Ultimo A5</column>
            <column name='numero'>5</column>
            <column name='saldo'><null /></column>
        </vtable.insert>

        <!-- La tabla virtual con todos sus registros -->
<!--
        +......+.........+......+...........+
        |codigo|nombre   |numero|saldo      |
        +......+.........+......+...........+
        |A1    |Nombre A1|     1|     123.40|
        |A2    |Nombre A2|     2|     355.89|
        |A3    |Nombre A3|     3|10002020.89|
        |A4    |Nombre A4|     4|           |
        |A5    |Ultimo A5|     5|           |
        +......+.........+......+...........+
-->     <println><v_test/></println>

        <!-- Seleccionar registros donde codigo es 'A3' -->
<!--
        +......+.........+......+...........+
        |codigo|nombre   |numero|saldo      |
        +......+.........+......+...........+
        |A3    |Nombre A3|     3|10002020.89|
        +......+.........+......+...........+
-->     <println>
            <vtable.filter name='v_test'>
                <column name='codigo' regexp='A3' />
            </vtable.filter>
        </println>

        <!-- Seleccionar registros donde el saldo 355.89. -->
        <!-- La escala tiene 2 dígitos, es importante ponerlo igual que    -->
        <!-- el dato almacenado, o de lo contrario no encontrará el valor. -->
<!--
        +......+.........+......+......+
        |codigo|nombre   |numero|saldo |
        +......+.........+......+......+
        |A2    |Nombre A2|     2|355.89|
        +......+.........+......+......+
-->
        <println>
            <vtable.filter name='v_test'>
                <column name='saldo' regexp='355.89' />
            </vtable.filter>
        </println>

        <!-- Seleccionar registros donde el saldo es nulo. -->
<!--
        +......+.........+......+.....+
        |codigo|nombre   |numero|saldo|
        +......+.........+......+.....+
        |A4    |Nombre A4|     4|     |
        |A5    |Ultimo A5|     5|     |
        +......+.........+......+.....+
-->     <println>
            <vtable.filter name='v_test'>
                <column name='saldo' />
            </vtable.filter>
        </println>

        <!-- Seleccionar registros cuyo nombre empieza por 'N'. -->
<!--
        +......+.........+......+...........+
        |codigo|nombre   |numero|saldo      |
        +......+.........+......+...........+
        |A1    |Nombre A1|     1|     123.40|
        |A2    |Nombre A2|     2|     355.89|
        |A3    |Nombre A3|     3|10002020.89|
        |A4    |Nombre A4|     4|           |
        +......+.........+......+...........+-->
        <println>
            <vtable.filter name='v_test'>
                <column name='nombre' regexp='^N.*' />
            </vtable.filter>
        </println>

        <!-- Seleccionar registros con numero = 2 o numero = 4 -->
<!--
        +......+.........+......+......+
        |codigo|nombre   |numero|saldo |
        +......+.........+......+......+
        |A2    |Nombre A2|     2|355.89|
        |A4    |Nombre A4|     4|      |
        +......+.........+......+......+
-->
        <println>
            <vtable.filter name='v_test'>
                <column name='numero' regexp='[24]' />
            </vtable.filter>
        </println>
    </body>
</xsql-script>