PDO->sqliteCreateAggregate()
(No version information available, might be only in CVS)
PDO->sqliteCreateAggregate() — SQL æ–‡ã§ä½¿ç”¨ã™ã‚‹é›†ç´„ユーザ定義関数 (UDF) を登録ã™ã‚‹
説明
ã“ã®é–¢æ•°ã¯ã€ 実験的 ãªã‚‚ã®ã§ã™ã€‚ã“ã®é–¢æ•°ã®å‹•作・ åå‰ãƒ»ãã®ä»–ドã‚ãƒ¥ãƒ¡ãƒ³ãƒˆã«æ›¸ã‹ã‚Œã¦ã„ã‚‹äº‹é …ã¯ã€äºˆå‘Šãªãã€å°†æ¥çš„㪠PHP ã®ãƒªãƒªãƒ¼ã‚¹ã«ãŠã„ã¦å¤‰æ›´ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ ã“ã®é–¢æ•°ã¯è‡ªå·±è²¬ä»»ã§ä½¿ç”¨ã—ã¦ãã ã•ã„。
ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ PDO->sqliteCreateFunction() ã¨ä¼¼ã¦ã„ã¾ã™ãŒã€ ã“ã®é–¢æ•°ã§ç™»éŒ²ã—ãŸé–¢æ•°ã¯ã€ã‚¯ã‚¨ãƒªã®ã™ã¹ã¦ã®è¡Œã®å†…容を集約ã™ã‚‹é–¢æ•°ã‚’登録ã—ã¾ã™ã€‚
ã“ã®é–¢æ•°ã¨ PDO->sqliteCreateFunction() ã®æœ€å¤§ã®é•ã„ã¯ã€ 集約関数を作æˆã™ã‚‹ãŸã‚ã«ã¯ 2 ã¤ã®é–¢æ•°ãŒå¿…è¦ã§ã‚ã‚‹ã¨ã„ã†ã“ã¨ã§ã™ã€‚
パラメータ
- function_name
-
SQL æ–‡ã§ä½¿ç”¨ã™ã‚‹é–¢æ•°ã®åå‰ã€‚
- step_func
-
çµæžœã‚»ãƒƒãƒˆã®å„行ã«ã¤ã„ã¦ã‚³ãƒ¼ãƒ«ã•れるコールãƒãƒƒã‚¯é–¢æ•°ã€‚ ã“ã® PHP 関数ã¯ã€çµæžœã‚’è“„ç©ã—ã¦é›†ç´„コンテã‚ストã«ä¿å˜ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
ã“ã®é–¢æ•°ã¯æ¬¡ã®ã‚ˆã†ã«å®šç¾©ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
step ( mixed $context , int $rownumber , mixed $value1 [, mixed $value2 [, mixed $.. ]] )context ã¯æœ€åˆã®è¡Œã§ã¯ NULL ã¨ãªã‚Šã¾ã™ã€‚ ãれ以é™ã®è¡Œã§ã¯ã€ãã®å‰ã® step 関数ãŒè¿”ã—ãŸå€¤ã‚’ä¿æŒã—ã¾ã™ã€‚ ã“れを使用ã—ã¦ã€é›†ç´„ã®çŠ¶æ…‹ã‚’ç®¡ç†ã—ã¾ã™ã€‚
rownumber ã¯ç¾åœ¨ã®è¡Œç•ªå·ã‚’ä¿æŒã—ã¾ã™ã€‚
- finalize_func
-
ã™ã¹ã¦ã®è¡ŒãŒå‡¦ç†ã•れãŸå¾Œã§ã‚³ãƒ¼ãƒ«ã•れるコールãƒãƒƒã‚¯é–¢æ•°ã€‚ ã“ã“ã§ã¯ã€é›†ç´„コンテã‚ストã‹ã‚‰ãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã—ã¦çµæžœã‚’è¿”ã—ã¾ã™ã€‚ コールãƒãƒƒã‚¯é–¢æ•°ã®è¿”ã™å€¤ã¯ã€SQLite ãŒç†è§£ã§ãã‚‹å½¢å¼ (ã™ãªã‚㡠スカラー型) ã§ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
ã“ã®é–¢æ•°ã¯æ¬¡ã®ã‚ˆã†ã«å®šç¾©ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
fini ( mixed $context , int $rownumber )context ã«ã¯ã€æœ€å¾Œã® step 関数ã®è¿”ã‚Šå€¤ãŒæ ¼ç´ã•れã¾ã™ã€‚
rownumber ã¯ã€ã“ã®é›†ç´„関数ãŒå‡¦ç†ã—ãŸè¡Œæ•°ã‚’ä¿æŒã—ã¾ã™ã€‚
ã“ã®é–¢æ•°ã®è¿”り値ãŒã€é›†ç´„ã®è¿”り値ã¨ãªã‚Šã¾ã™ã€‚
- num_args
-
コールãƒãƒƒã‚¯é–¢æ•°ãŒã‚らã‹ã˜ã‚定義済ã¿ã®å¼•æ•°ã‚’å—ã‘å–ã‚‹å ´åˆã«ã€ SQLite ã®ãƒ‘ãƒ¼ã‚µã«æ¸¡ã™ãƒ’ント。
返り値
æˆåŠŸã—ãŸå ´åˆã« TRUE ã‚’ã€å¤±æ•—ã—ãŸå ´åˆã« FALSE ã‚’è¿”ã—ã¾ã™ã€‚
例
Example#1 集約関数 max_length ã®ä¾‹
<?php
$data = array(
'one',
'two',
'three',
'four',
'five',
'six',
'seven',
'eight',
'nine',
'ten',
);
$db = new PDO('sqlite::memory:');
$db->exec("CREATE TABLE strings(a)");
$insert = $db->prepare('INSERT INTO strings VALUES (?)');
foreach ($data as $str) {
$insert->execute(array($str));
}
$insert = null;
function max_len_step(&$context, $rownumber, $string)
{
if (strlen($string) > $context) {
$context = strlen($string);
}
}
function max_len_finalize(&$context, $rownumber)
{
return $context;
}
$db->sqliteCreateAggregate('max_len', 'max_len_step', 'max_len_finalize');
var_dump($db->query('SELECT max_len(a) from strings')->fetchAll());
?>
ã“ã®ä¾‹ã§ã¯ã€ テーブルã®ã‚«ãƒ©ãƒ ã®ä¸ã§ä¸€ç•ªé•·ã„æ–‡å—列ã®é•·ã•を計算ã™ã‚‹é›†ç´„関数を作æˆã—ã¾ã™ã€‚ å„行ã«ã¤ã„㦠max_len_step 関数ãŒã‚³ãƒ¼ãƒ«ã•れ〠context ãƒ‘ãƒ©ãƒ¡ãƒ¼ã‚¿ãŒæ¸¡ã•れã¾ã™ã€‚ ã“ã®ãƒ‘ラメータã«ã¯ã€ä»–ã® PHP 変数ã¨åŒæ§˜ã«ã€é…列やオブジェクトãŒè¨å®šã•れã¾ã™ã€‚ ã“ã®ä¾‹ã§ã¯ã€ã“れã¾ã§ã«ç™»å ´ã—ãŸå€¤ã®ã†ã¡é•·ã•ãŒæœ€å¤§ã®ã‚‚ã®ã®é•·ã•ã‚’ä¿æŒã—ã¦ã„ã¾ã™ã€‚ string ãŒç¾åœ¨ã®æœ€å¤§å€¤ã‚ˆã‚Šé•·ã„å ´åˆã«ã€ ãã®å€¤ã§ç¾åœ¨ã®æœ€å¤§å€¤ã‚’æ›´æ–°ã—ã¾ã™ã€‚
ã™ã¹ã¦ã®è¡Œã«å¯¾ã™ã‚‹å‡¦ç†ãŒçµ‚ã‚ã‚‹ã¨ã€SQLite 㯠max_len_finalize 関数をコールã—ã¦é›†ç´„çµæžœã‚’決定ã—ã¾ã™ã€‚ ã“ã“ã§ã¯ã€context ã®å†…容ã«åŸºã¥ã„ãŸã€ ãªã‚“らã‹ã®è¨ˆç®—を行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ ã—ã‹ã—ã€ã“ã®ä¾‹ã§ã¯ã‚¯ã‚¨ãƒªã‚’処ç†ã—ã¦ã„ã‚‹éŽç¨‹ã§æ—¢ã«çµæžœãŒæ±ºå®šã—ã¦ã„ã‚‹ã®ã§ã€ ã“ã“ã§ã¯å˜ã« context ã®å€¤ã‚’è¿”ã—ã¦ã„ã‚‹ã ã‘ã§ã™ã€‚
çµæžœã®å€¤ã‚’ context ã«æºœã‚込んã§ãŠãã€æœ€å¾Œã«ä¸€æ‹¬ã—ã¦å‡¦ç†ã™ã‚‹ã¨ã„ã†æ–¹æ³•ã¯æŽ¨å¥¨ 「ã—ã¾ã›ã‚“ã€ã€‚ã“れã¯ã€SQLite ã®ãƒ¡ãƒ¢ãƒªæ¶ˆè²»é‡ãŒå¤§ãããªã‚‹ã‹ã‚‰ã§ã™ã€‚ 仮㫠32 ãƒã‚¤ãƒˆã®é•·ã•ã®ãƒ‡ãƒ¼ã‚¿ãŒç™¾ä¸‡ä»¶ã‚ã£ãŸã¨ã—ã¦ã€ ãれを溜ã‚込むãŸã‚ã«ã©ã‚Œã ã‘ã®ãƒ¡ãƒ¢ãƒªãŒå¿…è¦ã«ãªã‚‹ã‹è€ƒãˆã¦ã¿ã¾ã—ょã†ã€‚
PDO->sqliteCreateFunction() ãŠã‚ˆã³ PDO->sqliteCreateAggregate() を使用ã—ã¦ã€ SQLite ã®ãƒã‚¤ãƒ†ã‚£ãƒ– SQL 関数を上書ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
注æ„: ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€SQLite2 ドライãƒã§ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。 代ã‚りã«ã€å¤ã„å½¢å¼ã® sqlite API を使用ã—ã¦ãã ã•ã„。