PDO::sqliteCreateAggregate

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo_sqlite >= 1.0.0)

PDO::sqlite Create Aggregate — Реєстрація агрегуючої функції користувача для використання в SQL-запитах

Опис

public PDO::sqliteCreateAggregate(    string $function_name,    callable $step_func,    callable $finalize_func,    int $num_args = ?): bool

Увага

Ця функція є ЕКСПЕРИМЕНТАЛЬНОЇ. Поведінка цієї функції, її ім'я та документація, що до неї належить, можуть змінитися в наступних версіях PHP без повідомлення. Використовуйте цю функцію на свій страх та ризик.

Цей метод аналогічний PDO::sqliteCreateFunction, крім того, що він реєструє функцію, яку можна використовувати для обчислення агрегованого результату по всіх рядках у запиті.

Ключова відмінність цього методу від PDO::sqliteCreateFunction у тому, що для керування агрегуванням вимагає використання двох функцій.

Список параметрів

function_name

Ім'я функції для використання у запитах.

step_func

Функція зворотного дзвінка для кожного рядка в результуючому наборі. Ваша PHP-функція повинна акумулювати результат та зберігати його у контексті агрегації.

Ця функція має бути визначена так:

step(    mixed $context,    int $rownumber,    mixed $value,    mixed ...$values): mixed

context

Для першого рядка має дорівнювати null; Для всіх наступних рядків його значення має дорівнювати значенням, повернутим на попередньому кроці; Ви повинні використовувати його, щоб зберегти стан агрегації.

rownumber

Номер поточного рядка.

value

Перший аргумент передано агрегатору.

values

Подальші аргументи.

Значення функції, що повертається, буде використано як параметр context при наступному запуску функції, або як значення, що передається фіналізуючої функції.

finalize_func

Функція зворотного дзвінка для обчислення підсумкового агрегованого значення. Вона буде викликана як тільки всі рядки результуючого набору будуть оброблені, їй буде переданий контекст, що агрегує, і вона поверне фінальне значення. Ця функція має повернути значення типу зрозумілого SQLite (тобто . скалярний тип

Ця функція має бути визначена так:

fini(mixed $context, int $rowcount): mixed

context

Містить значення, повернене останнім викликом агрегуючої функції step_func.

rowcount

Кількість рядків, до яких застосовувалася функція, що агрегує.

Значення цієї функції, що повертається, буде використано як результат агрегації.

num_args

Підказка для парсера SQLite, якщо функція зворотного дзвінка отримує задану кількість аргументів.

Значення, що повертаються

Повертає true у разі успішного виконання або **false**в случае возникновения ошибки.

Приклади

Приклад #1 Приклад агрегуючої функції max_length

Loading...

У цьому прикладі ми створили функцію, що агрегує, яка обчислює довжину найбільшого рядка в одному зі стовпців таблиці. Для кожного рядка викликається функція max_len_step і їй передається параметр $context. Цей параметр, як і будь-яка інша змінна PHP, може містити і масив, і об'єкт. У цьому прикладі вона використовується для зберігання максимальної довжини рядка; Якщо $string має довжину більшу, ніж міститься у контексті, ми оновлюємо контекст новим значенням.

Після обробки всіх рядків SQLite викличе функцію max_len_finalize для обчислення результату агрегації. У ній ми робимо обчислення, ґрунтуючись на даних з $context. У нашому простому прикладі ми просто повертаємо його значення, оскільки жодних додаткових обчислень не потрібно.

Підказка

Вкрай не рекомендується зберігати в контексті копії значень для обробки їх у фінальній функції, оскільки це спричинить велику перевитрату пам'яті SQLite для обробки запиту. Просто уявіть, скільки пам'яті вам знадобиться, якщо вам потрібно агрегувати, наприклад, мільйон значень по 32 байти.

Підказка

Ви можете використовувати PDO::sqliteCreateFunction і PDO::sqliteCreateAggregate для перевизначення стандартних функцій SQLite, що агрегують.

Дивіться також