(PHP 5)
sqlite_create_aggregate(no version information, might be only in CVS)
SQLiteDatabase->createAggregate -- Registra una FDU (funci贸n definida por el usuario) de grupo normal para su uso en sentencias SQLM茅todo que sigue el estilo orientado a objetos:
class SQLiteDatabase {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 recurso que identifica la base de datos SQLite (y que es el que devuelve la funci贸n sqlite_open()). Este par谩metro no se requiere cuando se emplea el m茅todo orientado a objetos.
El nombre de la funci贸n a utilizar en las sentencias SQL.
La funci贸n de callback que se llama para cada una de las filas del resultado.
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.
Valor destinado al parseador de SQLite si la funci贸n de callback acepta un n煤mero predeterminado de argumentos.
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.
Sugerencia: No se recomienda copiar todos los valores en el contexto y depues茅s realizar su procesamiento al final, ya que esto provocar铆a que SQLite emplee mucha memoria para almacenar todos los datos. Por ejemplo, es f谩cil hacerse una idea del problema que puede surgir si se almacenan 1 mill贸n de registros cada uno de ellos conteniendo 32 bytes de longitud.
Sugerencia: Se pueden emplear las funciones sqlite_create_function() y sqlite_create_aggregate() para sobrecargar las funciones SQL nativas de SQLite.