functions as $f=>$t) { $pdo->sqliteCreateFunction($f, array($this, $t)); } } private $functions = array( 'month' => 'month', 'year' => 'year', 'day' => 'day', 'unix_timestamp' => 'unix_timestamp', 'now' => 'now', 'char_length' => 'char_length', 'md5' => 'md5', 'curdate' => 'curdate', 'rand' => 'rand', 'substring' => 'substring', 'dayofmonth' => 'day', 'second' => 'second', 'minute' => 'minute', 'hour' => 'hour', 'date_format' => 'dateformat', 'from_unixtime' => 'from_unixtime', 'date_add' => 'date_add', 'date_sub' => 'date_sub', 'adddate' => 'date_add', 'subdate' => 'date_sub', 'localtime' => 'now', 'localtimestamp' => 'now', //'date'=>'date', 'isnull' => 'isnull', 'if' => '_if', 'regexpp' => 'regexp', 'concat' => 'concat', 'field' => 'field', 'log' => 'log', 'least' => 'least', 'replace' => 'replace', 'get_lock' => 'get_lock', 'release_lock' => 'release_lock', 'ucase' => 'ucase', 'lcase' => 'lcase', 'inet_ntoa' => 'inet_ntoa', 'inet_aton' => 'inet_aton', 'datediff' => 'datediff', 'locate' => 'locate' ); public function month($field){ $t = strtotime($field); return date('n', $t); } public function year($field){ $t = strtotime($field); return date('Y', $t); } public function day($field){ $t = strtotime($field); return date('j', $t); } public function unix_timestamp($field = null){ return is_null($field) ? time() : strtotime($field); } public function second($field){ $t = strtotime($field); return intval( date("s", $t) ); } public function minute($field){ $t = strtotime($field); return intval(date("i", $t)); } public function hour($time){ list($hours, $minutes, $seconds) = explode(":", $time); return intval($hours); } public function from_unixtime($field, $format=null){ // $field is a timestamp //convert to ISO time $date = date("Y-m-d H:i:s", $field); //now submit to dateformat return is_null($format) ? $date : $self->dateformat($date, $format); } public function now(){ return date("Y-m-d H:i:s"); } public function curdate() { return date("Y-m-d"); } public function char_length($field){ return strlen($field); } public function md5($field){ return md5($field); } public function rand(){ return rand(0,1); } public function substring($text, $pos, $len=null){ if (is_null($len)) return substr($text, $pos-1); else return substr($text, $pos-1, $len); } public function dateformat($date, $format){ $mysql_php_dateformats = array ( '%a' => 'D', '%b' => 'M', '%c' => 'n', '%D' => 'jS', '%d' => 'd', '%e' => 'j', '%H' => 'H', '%h' => 'h', '%I' => 'h', '%i' => 'i', '%j' => 'z', '%k' => 'G', '%l' => 'g', '%M' => 'F', '%m' => 'm', '%p' => 'A', '%r' => 'h:i:s A', '%S' => 's', '%s' => 's', '%T' => 'H:i:s', '%U' => 'W', '%u' => 'W', '%V' => 'W', '%v' => 'W', '%W' => 'l', '%w' => 'w', '%X' => 'Y', '%x' => 'o', '%Y' => 'Y', '%y' => 'y', ); $t = strtotime($date); $format = strtr($format, $mysql_php_dateformats); $output = date($format, $t); return $output; } public function date_add($date, $interval) { $interval = $this->deriveInterval($interval); switch (strtolower($date)) { case "curdate()": $objDate = new Datetime($this->curdate()); $objDate->add(new DateInterval($interval)); $returnval = $objDate->format("Y-m-d"); break; case "now()": $objDate = new Datetime($this->now()); $objDate->add(new DateInterval($interval)); $returnval = $objDate->format("Y-m-d H:i:s"); break; default: $objDate = new Datetime($date); $objDate->add(new DateInterval($interval)); $returnval = $objDate->format("Y-m-d H:i:s"); } return $returnval; } public function date_sub($date, $interval) { $interval = $this->deriveInterval($interval); switch (strtolower($date)) { case "curdate()": $objDate = new Datetime($this->curdate()); $objDate->sub(new DateInterval($interval)); $returnval = $objDate->format("Y-m-d"); break; case "now()": $objDate = new Datetime($this->now()); $objDate->sub(new DateInterval($interval)); $returnval = $objDate->format("Y-m-d H:i:s"); break; default: $objDate = new Datetime($date); $objDate->sub(new DateInterval($interval)); $returnval = $objDate->format("Y-m-d H:i:s"); } return $returnval; } private function deriveInterval($interval) { $interval = trim(substr(trim($interval), 8)); $parts = explode(' ', $interval); foreach ($parts as $part) { if (!empty($part)) { $_parts[] = $part; } } $type = strtolower(end($_parts)); switch ($type) { case "second": $unit = 'S'; return 'PT' . $_parts[0] . $unit; break; case "minute": $unit = 'M'; return 'PT' . $_parts[0] . $unit; break; case "hour": $unit = 'H'; return 'PT' . $_parts[0] . $unit; break; case "day": $unit = 'D'; return 'P' . $_parts[0] . $unit; break; case "week": $unit = 'W'; return 'P' . $_parts[0] . $unit; break; case "month": $unit = 'M'; return 'P' . $_parts[0] . $unit; break; case "year": $unit = 'Y'; return 'P' . $_parts[0] . $unit; break; case "minute_second": list($minutes, $seconds) = explode(':', $_parts[0]); return 'PT' . $minutes . 'M' . $seconds . 'S'; break; case "hour_second": list($hours, $minutes, $seconds) = explode (':', $_parts[0]); return 'PT' . $hours . 'H' . $minutes . 'M' . $seconds . 'S'; break; case "hour_minute": list($hours, $minutes) = explode (':', $_parts[0]); return 'PT' . $hours . 'H' . $minutes . 'M'; break; case "day_second": $days = intval($_parts[0]); list($hours, $minutes, $seconds) = explode (':', $_parts[1]); return 'P' . $days . 'D' . 'T' . $hours . 'H' . $minutes . 'M' . $seconds . 'S'; break; case "day_minute": $days = intval($_parts[0]); list($hours, $minutes) = explode(':', $parts[1]); return 'P' . $days . 'D' . 'T' . $hours . 'H' . $minutes . 'M'; break; case "day_hour": $days = intval($_parts[0]); $hours = intval($_parts[1]); return 'P' . $days . 'D' . 'T' . $hours . 'H'; break; case "year_month": list($years, $months) = explode ('-', $_parts[0]); return 'P' . $years . 'Y' . $months . 'M'; break; } } public function date($date){ return date("Y-m-d", strtotime($date)); } public function isnull($field){ return is_null($field); } public function _if($expression, $true, $false){ return ($expression == true) ? $true : $false; } public function regexp($field, $pattern){ $pattern = str_replace('/', '\/', $pattern); $pattern = "/" . $pattern ."/i"; return preg_match ($pattern, $field); } public function concat() { $returnValue = ""; $argsNum = func_num_args(); $argsList = func_get_args(); for ($i = 0; $i < $argsNum; $i++) { if (is_null($argsList[$i])) { return null; } $returnValue .= $argsList[$i]; } return $returnValue; } public function field() { $numArgs = func_num_args(); if ($numArgs < 2 or is_null(func_get_arg(0))) { return null; } $arr = func_get_args(); $searchString = strtolower(array_shift($arr)); for ($i = 0; $i < $numArgs-1; $i++) { if ($searchString === strtolower($arr[$i])) return $i + 1; } return null; } public function log() { $numArgs = func_num_args(); if ($numArgs == 1) { $arg1 = func_get_arg(0); return log($arg1); } else if ($numArgs == 2) { $arg1 = func_get_arg(0); $arg2 = func_get_arg(1); return log($arg1)/log($arg2); } else { return false; } } public function least() { $arr = func_get_args(); return min($arr); } public function replace($haystack, $needle, $replace) { return str_replace($needle, $replace, $haystack); } /** * These two functions are meaningless in SQLite * So we return meaningless statement and do nothing * @param string $name * @param integer $timeout * @return string */ public function get_lock($name, $timeout) { return '1=1'; } public function release_lock($name) { return '1=1'; } /** * MySQL aliases for upper and lower functions * @param $string * @return string */ public function ucase($string) { return "upper($string)"; } public function lcase($string) { return "lower($string)"; } /** * MySQL aliases for INET_NTOA and INET_ATON functions * @param unsigned integer, string respectively * @return string, unsigned integer respectively */ public function inet_ntoa($num) { return long2ip($num); } public function inet_aton($addr) { $int_data = ip2long($addr); $unsigned_int_data = sprintf('%u', $address); return $unsigned_int_data; } /** * MySQL aliase for DATEDIFF function * @param string, string * @return string */ public function datediff($start, $end) { /* PHP 5.3.2 has a serious bug in DateTime::diff() * see https://bugs.php.net/bug.php?id=51184 */ if (version_compare(PHP_VERSION, '5.3.2', '==')) { $start_date = strtotime($start); $end_date = strtotime($end); $interval = floor(($start_date - $end_date)/(3600*24)); return $interval; } else { $start_date = new DateTime($start); $end_date = new DateTime($end); $interval = $end_date->diff($start_date, false); return $interval->format('%r%a'); } } /** * emulates MySQL LOCATE() function */ public function locate($substr, $str, $pos = 0) { if (!extension_loaded('mbstring')) { if (($val = stros($str, $substr, $pos)) !== false) { return $val + 1; } else { return 0; } } else { if (($val = mb_strpos($str, $substr, $pos)) !== false) { return $val + 1; } else { return 0; } } } } ?>