Rapide Advanced Adulte
 
 Web|Image|Shop|Video|News|Wmx|Mobile|Wiki|Ajouter ce moteur

     Manuel PHP     
Partager
 
 
Partager
Partager

 

Table :

.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 exec
.sqlite factory
.sqlite fetch all
.sqlite fetch array
.sqlite fetch column types
.sqlite fetch object
.sqlite fetch single
.sqlite fetch string
.sqlite fetch single()
.sqlite field name
.sqlite has more
.sqlite has prev
.sqlite key
.sqlite last error
.sqlite last insert rowid
.sqlite libencoding
.sqlite libversion
.sqlite next
.sqlite num fields
.sqlite num rows
.sqlite open
.sqlite popen
.sqlite prev
.sqlite query
.sqlite rewind
.sqlite seek
.sqlite single query
.sqlite udf decode binary
.sqlite udf encode binary
.sqlite unbuffered query
.sqlite valid
 
   

  sqlite_create_aggregate  


sqlite_create_aggregate

(PHP 5)

sqlite_create_aggregate

(no version information, might be only in CVS)

SQLiteDatabase->createAggregate -- Enregistre une UDF agregeante pour les requêtes SQLite

Description

void sqlite_create_aggregate ( resource dbhandle, string function_name, callback step_func, callback finalize_func [, int num_args] )

Style orienté objet (méthode)

class SQLiteDatabase {

void createAggregate ( string function_name, callback step_func, callback 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. Les fonctions de callback doivent retourner un type compréhensible par SQLite (i.e. type scalaire).

Liste de paramètres

dbhandle

La ressource de base de données SQLite; retournée par sqlite_open() lorsqu'utilisée de manière procédurale. Ce paramètre n'est pas requis si vous utilisez la méthode orientée objet.

function_name

Le nom de la fonction utilisée dans les requêtes SQL.

step_func

Fonction de procédure de rappel appelée pour chaque ligne du jeu de résultats.

finalize_func

Fonction de procédure de rappel pour le contexte d'agrégation des données de chaque ligne.

num_args

Conseil à l'analyseur SQLite si la fonction de procédure de rappel accepte un nombre prédéterminé d'arguments.

Exemples

Exemple 1. 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) {
    
$str = sqlite_escape_string($str);
    
sqlite_query($db, "INSERT INTO strings VALUES('$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ée, 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ées 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.

Astuce : Il n'est pas recommandé de stocker une copie des valeurs dans le contexte, puis de les traiter à la fin, car cela conduirait SQLite à consommer beaucoup de mémoire : imaginez simplement la quantité de mémoire que prendrons vos millions de lignes de 32 caractères en fin de requête.

Astuce : Vous pouvez utiliser sqlite_create_function() et sqlite_create_aggregate() pour remplacer des fonctions natives SQLite.


    Annonces       
 

 Retour au chapitre Php

 

Top
 

Ajouter JungleKey.fr à votre Explorateur

 
 

About Us | © 2007 JungleKey




iBlack | Mobile | Wiki | Ajouter ce moteur
.