class SQLiteDatabase { void createAggregate ( string nombre_funcion, callback funcion_intermedia, callback funcion_final [, int numero_argumentos] ) }
sqlite_create_aggregate() es similar a
sqlite_create_function() salvo que registrar funciones que se
emplean para calcular resultados agrupados de todas las filas del resultado de
una consulta.
La diferencia principal entre esta función y sqlite_create_function()
es que se requieren 2 funciones para manejar los cálculos agrupados. La función
indicada en funcion_intermedia se llama para cada una de las filas del
resultado. La función PHP acumula y guarda el resultado temporal en el llamado "contexto de
agregación". Una vez que todas las filas han sido procesadas, se llama a la función
funcion_final, que obtendrá los resultados intermedios a partir del
contexto de agregación y devolverá el resultado calculado.
Las funciones de callback deben devolver un tipo de datos entendido por SQLite (esto es,
tipo escalar).
El nombre de la función a utilizar en las sentencias SQL.
funcion_intermedia
La función de callback que se llama para cada una de las filas del resultado.
funcion_final
La función de callback que se llama para realizar los cálculos agrupados a partir
de los datos temporales almacenados por la función intermedia que se ejecuta sobre
cada una de las filas.
numero_argumentos
Valor destinado al parseador de SQLite si la función de callback
acepta un número predeterminado de argumentos.
Ejemplos
Ejemplo 1. Ejemplo de función de grupo llamada max_longitud
var_dump(sqlite_array_query($manejador_bd, 'SELECT max_longitud(a) from tabla_cadenas'));
?>
En este ejemplo, se crea una función de agregación que
calcula la longitud de la cadena más larga de una de las columnas
de la tabla.
Para cada filam se llama a la función max_longitud_temporal y
se le pasa el parámetro contexto. El parámetro
contexto es como cualquier otra variable de PHP y puede contener una
matriz o incluso un objeto. En el ejemplo, solamente almacena la longitud más larga
hasta ese momento. Si la cadena tiene una longitud superior al máximo
de ese momento, se actualiza el valor almacenado en el contexto para que contenga el nuevo valor máximo.
Una vez que todas las filas han sido procesadas, SQLite llama a la función
max_longitud_final que calcula el resultado de la agregación.
en esta función se pueden realizar los calculos necesarios a partir del valor de
contexto. En este ejemplo tan sencillo, simplemente se devuelve
el valor almacenado en contexto, porque ya contiene la longitud máxima de todas las
cadenas procesadas.
Nota:
El ejemplo mostrado no funciona correctamente si la columna contiene datos binarios.
Vea la página del manual de la función sqlite_udf_decode_binary()
para una explicación detallada de este hecho y para ver un ejemplo sobre la forma de
tratar los datos binarios mediante su codificación.
Atención técnica y comercial: (54)-11-5031-1111 las 24 hs. los 365 días del año. ToWebs, (c) 2008
Virtucom Networks S.A Av. Belgrano 1586, piso 10 (C1093AAQ) Cap. Fed. Bs. As, Argentina.