7.96 SQLite
7 Index des fonctions
Manuel PHP
. Introduction . Installation . Contacts . Pré-requis . Types de ressources . Constantes prédéfinies . Configuration à l'exécution . sqlite_array_query . sqlite_busy_timeout . sqlite_changes . sqlite_close . sqlite_column ->sqlite_create_aggregate . sqlite_create_function . sqlite_current . sqlite_error_string . sqlite_escape_string . sqlite_fetch_array . sqlite_fetch_single . sqlite_fetch_string . sqlite_field_name . sqlite_has_more . sqlite_last_error . sqlite_last_insert_rowid . sqlite_libencoding . sqlite_libversion . sqlite_next . sqlite_num_fields . sqlite_num_rows . sqlite_open . sqlite_popen . sqlite_query . sqlite_rewind . sqlite_seek . sqlite_udf_decode_binary . sqlite_udf_encode_binary . sqlite_unbuffered_query
|
7.96.13 sqlite_create_aggregate()Enregistre une UDF agregeante pour les requêtes SQLite[ Exemples avec sqlite_create_aggregate ] CVS uniquement
bool
sqlite_create_aggregate (
resource
dbhandle
,
string
function_name
,
mixed
step_func
,
mixed
finalize_func
,
int
num_args
)
sqlite_create_aggregate
est similaire à
sqlite_create_function
, car elle enregistre une
fonction qui sera utilisée pour calculer un résultat agrégé sur plusieurs
lignes d'une requête.
La différence principale entre cette fonction et
sqlite_create_function
est que deux fonctions sont nécessaires
pour gérer les agrégations :
step_func
est
appelée pour chaque ligne du résultat. Votre fonction
PHP
doit accumuler
le résultat, et le stocker dans le contexte d'agrégation.
Une fois que toutes les lignes ont été appelées,
finalize_func
sera appelée, et elle doit alors
lire les données dans ce contexte d'agrégation, et en retourner le résultat.
Exemple d'UDF SQLite : taille maximale de chaîne |
<?php $data = array( 'one', 'two', 'three', 'four' 'five' 'six', 'seven', 'eight', 'nine' 'ten' ); $db = sqlite_open(':memory:'); sqlite_query($db, "CREATE TABLE strings(a)"); foreach ($data as $str) { sqlite_query($db, "INSERT INTO strings VALUES('" . sqlite_escape_string($str) . "')"); }
function max_len_step(&$context, $string) { if (strlen($string) > $context) { $context = strlen($string); } }
function max_len_finalize(&$context) { return $context; }
sqlite_create_aggregate($db, 'max_len', 'max_len_step', 'max_len_finalize');
var_dump(sqlite_array_query($db, 'SELECT max_len(a) from strings'));
?>
|
Dans cet exemple, nous créons une fonction d'agrégation qui va calculer
la taille de la plus longue chaîne dans l'une des colonnes de la table.
Pour chaque ligne, la fonction
max_len_step
est appelée, et reçoit le paramètre
context
. Le contexte
est une autre variable
PHP
, et il peut contenir un tableau ou même un objet.
Dans notre exemple, nous l'utilisons pour stocker la taille maximale
de la colonne courante. Si
string
est plus grand
que la valeur maximale que nous avons enregistré, nous modifions notre
contexte en conséquence.
Une fois que toutes les lignes ont été traitées, SQLite appelle la fonction
max_len_finalize
pour déterminer le résultat de
l'agrégation. Nous pourrions alors effectuer plusieurs calculs en fonction
des données que nous avons récolté dans
context
.
Dans notre exemple simple,
nous avons calculé le résultat au fur et à mesure de la progression de la requête,
ce qui nous permet de n'avoir qu'à retourner la valeur de notre contexte.
Note |
L'exemple ci-dessus ne fonctionnera pas correctement si
une colonne contient une donnée binaire. Reportez-vous à la fonction
sqlite_udf_decode_binary
pour plus de détails, et d'un
exemple pour travailler avec des chaînes binaires.
|
Array
Array
Voir aussi
sqlite_create_function
,
sqlite_udf_encode_binary
et
sqlite_udf_decode_binary
.
|