X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fecrire%2Freq%2Fsqlite_fonctions.php;fp=www%2Fecrire%2Freq%2Fsqlite_fonctions.php;h=29d79d54bb1ea064c606309a167e39e6d76da3c1;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/ecrire/req/sqlite_fonctions.php b/www/ecrire/req/sqlite_fonctions.php new file mode 100644 index 0000000..29d79d5 --- /dev/null +++ b/www/ecrire/req/sqlite_fonctions.php @@ -0,0 +1,277 @@ + array( '_sqlite_func_concat' ,2), + 'CEIL' => array( '_sqlite_func_ceil', 1), // absent de sqlite2 + + 'DATE_FORMAT' => array( '_sqlite_func_strftime' ,2), + 'DAYOFMONTH' => array( '_sqlite_func_dayofmonth' ,1), + + 'EXP' => array( 'exp' ,1),//exponentielle + 'FIND_IN_SET' => array( '_sqlite_func_find_in_set' ,2), + 'FLOOR' => array( '_sqlite_func_floor', 1), // absent de sqlite2 + + 'IF' => array( '_sqlite_func_if' ,3), + 'INSERT' => array( '_sqlite_func_insert' ,4), + 'INSTR' => array( '_sqlite_func_instr' ,2), + + 'LEAST' => array( '_sqlite_func_least' ,3), + 'LEFT' => array( '_sqlite_func_left' ,2), +# 'LENGTH' => array( 'strlen' ,1), // present v1.0.4 +# 'LOWER' => array( 'strtolower' ,1), // present v2.4 +# 'LTRIM' => array( 'ltrim' ,1), // present en theorie + + 'NOW' => array( '_sqlite_func_now' ,0), + + 'MD5' => array( 'md5' ,1), + 'MONTH' => array( '_sqlite_func_month' ,1), + + 'PREG_REPLACE' => array( '_sqlite_func_preg_replace' ,3), + + 'RAND' => array( '_sqlite_func_rand' ,0), // sinon random() v2.4 + 'REGEXP' => array( '_sqlite_func_regexp_match' ,2), // critere REGEXP supporte a partir de v3.3.2 + //'REGEXP_MATCH' => array( '_sqlite_func_regexp_match' ,2), // critere REGEXP supporte a partir de v3.3.2 + + 'RIGHT' => array( '_sqlite_func_right' ,2), +# 'RTRIM' => array( 'rtrim' ,1), // present en theorie + + 'SETTYPE' => array( 'settype' ,2), // CAST present en v3.2.3 + 'SQRT' => array( 'sqrt' ,1), + 'SUBSTRING' => array( 'substr' ,3), + + 'TO_DAYS' => array( '_sqlite_func_to_days' ,1), +# 'TRIM' => array( 'trim' ,1), // present en theorie + + 'UNIX_TIMESTAMP'=> array( '_sqlite_func_unix_timestamp' ,1), +# 'UPPER' => array( 'strtoupper' ,1), // present v2.4 + + 'VIDE' => array( '_sqlite_func_vide' ,0), // du vide pour SELECT 0 as x ... ORDER BY x -> ORDER BY vide() + + 'YEAR' => array( '_sqlite_func_year' ,1) + ); + + + foreach ($fonctions as $f=>$r){ + _sqlite_add_function($sqlite, $f, $r); + } + + #spip_log('functions sqlite chargees '); +} + +// permet au besoin de charger des fonctions ailleurs par _sqlite_init_functions(); +// http://doc.spip.org/@_sqlite_add_function +function _sqlite_add_function(&$sqlite, &$f, &$r){ + if (_sqlite_is_version(3, $sqlite)){ + isset($r[1]) + ?$sqlite->sqliteCreateFunction($f, $r[0], $r[1]) + :$sqlite->sqliteCreateFunction($f, $r[0]); + } else { + isset($r[1]) + ?sqlite_create_function($sqlite, $f, $r[0], $r[1]) + :sqlite_create_function($sqlite, $f, $r[0]); + } +} + +// +// SQLite : fonctions sqlite -> php +// entre autre auteurs : mlebas +// + +function _sqlite_func_ceil($a) { + return ceil($a); +} + +// http://doc.spip.org/@_sqlite_func_concat +function _sqlite_func_concat ($a, $b) { + return $a.$b; +} + + +// http://doc.spip.org/@_sqlite_func_dayofmonth +function _sqlite_func_dayofmonth ($d) { + if (!$d){ + $result = date("j"); + } else { + preg_match(";^([0-9]{4})-([0-9]+)-([0-9]+) .*$;", $d, $f); + $result = $f[3]; + } + #spip_log("Passage avec DAYOFMONTH : $d, $result",'debug'); + return $result; +} + + +// http://doc.spip.org/@_sqlite_func_find_in_set +function _sqlite_func_find_in_set($num, $set) { + $rank=0; + foreach (explode(",",$set) as $v) { + if ($v == $num) return (++$rank); + $rank++; + } + return 0; +} + +function _sqlite_func_floor($a) { + return floor($a); +} + +// http://doc.spip.org/@_sqlite_func_if +function _sqlite_func_if ($bool, $oui, $non) { + return ($bool)?$oui:$non; +} + + +/* + * INSERT(chaine, index, longueur, chaine) MySQL + * Retourne une chaine de caracteres a partir d'une chaine dans laquelle "sschaine" + * a ete inseree a la position "index" en remplacant "longueur" caracteres. + */ +// http://doc.spip.org/@_sqlite_func_insert +function _sqlite_func_insert ($s, $index, $longueur, $chaine) { + return + substr($s,0, $index) + . $chaine + . substr(substr($s, $index), $longueur); +} + + +// http://doc.spip.org/@_sqlite_func_instr +function _sqlite_func_instr ($s, $search) { + return strpos($s,$search); +} + + +// http://doc.spip.org/@_sqlite_func_least +function _sqlite_func_least () { + $numargs = func_num_args(); + $arg_list = func_get_args(); + $least=$arg_list[0]; + for ($i = 0; $i < $numargs; $i++) { + if ($arg_list[$i] < $least) $least=$arg_list[$i]; + } + #spip_log("Passage avec LEAST : $least",'debug'); + return $least; +} + + +// http://doc.spip.org/@_sqlite_func_left +function _sqlite_func_left ($s, $lenght) { + return substr($s,$lenght); +} + + +// http://doc.spip.org/@_sqlite_func_now +function _sqlite_func_now(){ + $result = date("Y-m-d H:i:s", strtotime("now")); + #spip_log("Passage avec NOW : $result",'debug'); + return $result; +} + + +// http://doc.spip.org/@_sqlite_func_month +function _sqlite_func_month ($d) { + #spip_log("Passage avec MONTH : $d",'debug'); + if (!$d) return date("n"); + preg_match(";^([0-9]{4})-([0-9]+).*$;", $d, $f); + return $f[2]; +} + + + +// http://doc.spip.org/@_sqlite_func_preg_replace +function _sqlite_func_preg_replace($quoi, $cherche, $remplace) { + $return = preg_replace('%'.$cherche.'%', $remplace, $quoi); + #spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'debug'); + return $return; +} + + +// http://doc.spip.org/@_sqlite_func_rand +function _sqlite_func_rand() { + return rand(); +} + + +// http://doc.spip.org/@_sqlite_func_right +function _sqlite_func_right ($s, $lenght) { + return substr($s,0 - $lenght); +} + + +// http://doc.spip.org/@_sqlite_func_regexp_match +function _sqlite_func_regexp_match($cherche, $quoi) { + $return = preg_match('%'.$cherche.'%', $quoi); + #spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'debug'); + return $return; +} + +// http://doc.spip.org/@_sqlite_func_strftime +function _sqlite_func_strftime($date, $conv){ + return strftime($conv, $date); +} + +// http://doc.spip.org/@_sqlite_func_to_days +function _sqlite_func_to_days ($d) { + $result = date("z", _sqlite_func_unix_timestamp($d)); + #spip_log("Passage avec TO_DAYS : $d, $result",'debug'); + return $result; +} + + +// http://doc.spip.org/@_sqlite_func_unix_timestamp +function _sqlite_func_unix_timestamp($d) { + //2005-12-02 20:53:53 + #spip_log("Passage avec UNIX_TIMESTAMP : $d",'debug'); + // mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] ) + if (!$d) return mktime(); + return strtotime($d); + #preg_match(";^([0-9]{4})-([0-9]+)-([0-9]+)\s*(?:([0-9]+)(?::([0-9]+)(?::([0-9]+))?)?)?;", $d, $f); + #return mktime($f[4],$f[5],$f[6],$f[2],$f[3],$f[1]); +} + + +// http://doc.spip.org/@_sqlite_func_year +function _sqlite_func_year ($d) { + if (!$d){ + $result = date("Y"); + } else { + preg_match(";^([0-9]{4}).*$;", $d, $f); + $result = $f[1]; + } + spip_log("Passage avec YEAR : $d, $result",'debug'); + return $result; +} + + +// http://doc.spip.org/@_sqlite_func_vide +function _sqlite_func_vide(){ + return; +} + + + +?>