|
sqlite_create_aggregateSQLiteDatabase::createAggregate(PHP 5, PECL sqlite >= 1.0.0) sqlite_create_aggregate -- SQLiteDatabase::createAggregate — Регистрирует агрегирующую функцию для использования в SQL-запросах Описание
void sqlite_create_aggregate
( resource $dbhandle
, string $function_name
, callback $step_func
, callback $finalize_func
[, int $num_args = -1
] )
Объектно-ориентированный стиль (метод):
void SQLiteDatabase::createAggregate
( string $function_name
, callback $step_func
, callback $finalize_func
[, int $num_args = -1
] )
sqlite_create_aggregate() похожа на sqlite_create_function(), за исключением того, что регистрирует функцию, которая может быть использована для вычисления результата на основе всех записей результата запроса. Главное отличие этой функции от sqlite_create_function() состоит в том, что для работы агрегирующей функции неоходимы 2 функции; step_func вызывается для каждой записи из результата запроса. Эта функция должна аккумулировать результат и сохранять его в контекстной переменной. После обработки всех записей, вызывается finalize_func, которая должна обработать данные из контекстной переменной и вернуть результат. Callback-функции должны возвращать тип, который сможет понять SQLite (т.е. скалярный). Список параметров
Возвращаемые значенияЭта функция не возвращает значения после выполнения. Примеры
Пример #1 Пример агрегирующей функции max_length
<?php В этом примере, мы создаем агрегирующую функцию, коорая возвращает длину самой длинной строки в одном из полей результата запроса. Для каждой записи, вызывается функция max_len_step, которой помимо строки передается контекстная переменная context. Эту переменню вы можете использовать по своему усмотрению для накопления результатов вычислений. В нашем примере, в этой переменной хранится максимальная длина строки; если длина строки string больше, чем значение, сохраненное в контекстной переменной, контекстной переменной присваивается новое значение. После обработки всех записей, SQLite вызовет функцию max_len_finalize для определения результата агрегирующей функции. Здесь можно было бы провести вычисления, основанные на значении контекстной переменной context, но в этом простейшем примере, все вычисления были произведены в процессе обработки запроса, и остается только вернуть полученное значение.
Подсказка
НЕ РЕКОМЕНДУЕТСЯ сохранять все полученные значения в контекстной переменной и затем производить все вычисления на последнем шаге, так как при этом SQLite может израсходовать большое количество памяти в процессе обработки запроса - представьте, сколько памяти потребуется, чтобы сохранить в памяти миллион записей, по 32 байта каждая. Подсказка
sqlite_create_function() и sqlite_create_aggregate() могут быть использованы для переопределения встроенных функций SQLite. Смотрите также
|
|