(PHP 5 >= 5.3.0, PHP 7, PHP 8)
SQLite3::createAggregate — Toparlayıcı bir SQL işlevi olarak kullanılmak üzere bir PHP işlevini kayda geçirir
$isim,$sekme_işlevi,$son_işlev,$değş_sayısı = -1SQL deyimlerinde toparlayıcı bir SQL işlevi olarak kullanılmak üzere bir PHP işlevini veya bir kullanıcı tanımlı işlevi kayda geçirir.
isimOluşturulacak veya yeniden tanımlanacak toparlayıcı SQL işlevinin ismi.
sekme_işleviSonuç kümesinin her satırı için çalıştırılacak geriçağırım işlevinin ismi. Bu geriçağırım işlevi sonucu biriktirmeli ve toparlayıcı bir bağlamda saklamalıdır.
Bu işlev şöyle tanımlanmalıdır:
bağlam
İlk satır için null; sonraki satırlarda
sekme_işlevinden evvelce dönmüş değer.
Bunu toparlayıcı bağlamı oluşturmakta kullanmalısınız.
satır_numİşlenen satır numarası.
değerToparlayıcı bağlama aktarılacak ilk bağımsız değişken.
değerlerToparlayıcı bağlama aktarılacak diğer bağımsız değişkenler.
bağlam bağımsız değişkeninde
kullanılmalıdır.
son_işlevVeri toplama işlemi bittikten sonra çalıştırılacak geriçağırım işlevinin ismi. Tüm satırlar işlendikten sonra, bu işlev çağrılmalı ve ardından verileri toparlama bağlamından alıp sonucu döndürmelidir. Bu geri çağırım işlevi, SQLite tarafından bilinen türde bir değer (yani değişmez bir değer) döndürmelidir.
Bu işlev şöyle tanımlanmalıdır:
bağlamSon sekme_işlevinden dönen değer.
satır_num
Daima 0.
değş_sayısıSQL işlevinin alacağı bağımsız değişken sayısı. Negatif bir sayı belirtilirse SQL işlevi herhangi bir sayıda bağımsız değişken alabilir demektir.
Örnek 1 - en_uzun toparlayıcı işlev örneği
<?php
$data = array(
'one',
'two',
'three',
'four',
'five',
'six',
'seven',
'eight',
'nine',
'ten',
);
$db = new SQLite3(':memory:');
$db->exec("CREATE TABLE strings(a)");
$insert = $db->prepare('INSERT INTO strings VALUES (?)');
foreach ($data as $str) {
$insert->bindValue(1, $str);
$insert->execute();
}
$insert = null;
function en_uzun_sekme($baglam, $str_num, $dizge)
{
if (strlen($dizge) > $baglam) {
$baglam = strlen($dizge);
}
return $baglam;
}
function en_uzun_son($baglam, $str_num)
{
return $baglam === null ? 0 : $baglam;
}
$db->createAggregate('en_uzun', 'en_uzun_sekme', 'en_uzun_son');
var_dump($db->querySingle('SELECT en_uzun(a) from strings'));
?>Yukarıdaki örneğin çıktısı:
int(5)
Bu örnekte, tablonun sütunlarından birindeki en uzun dizenin uzunluğunu
hesaplayacak bir toparlama işlevi oluşturulmaktadır. Her satır için
en_uzun_sekme işlevi çağrılmakta ve bir
$baglam bağımsız değişkenine aktarılmaktadır.
$baglam bağımsız değişkeni, diğer PHP değişkenleri gibidir ve
bir diziyi veya hatta bir nesne değerini tutacak şekilde ayarlanabilir. Bu
örnekte, bulunan en büyük uzunluğu tutmak için kullanılmaktadır.
$dizge önceki en uzun dizgeden daha uzunsa,
$baglam bağımsız değişkeni bu yeni değeri tutacak şekilde
güncellenmektedir.
Tüm satırlar işlendikten sonra SQLite, toparlama sonucunu belirlemek için
en_uzun_son işlevini çağırır. Burada,
$baglamda bulunan verilere dayanarak bir tür hesaplama
yapılabilir. Yine de bu basit örnekte, sorgu ilerledikçe sonuç
hesaplanmakta, bu nedenle bağlam değerini döndürmek yeterli olmaktadır.
SQLite'ın sorguyu işlemek için çok fazla bellek kullanmasına neden olacağından, değerlerin bir kopyasının bağlamda saklanması ve ardından bunların en sonda işlenmesi ÖNERİLMEZ. Her biri 32 bayt uzunluğunda bir dizge içeren bir milyon satır...
SQLite3::createAggregate() yöntemi SQLite'ın dahili SQL işlevlerini geçersiz kılmak için kullanılabilir.