function test_args() { $cmp = array('one', 'two'); $obj = (object) $cmp; $this->assertEquals($cmp, DB::args(array('one', 'two'))); $this->assertEquals($cmp, DB::args(array(array('one', 'two')))); $this->assertEquals($cmp, DB::args(array($obj))); }
/** * Internal read handler, which is used by all read functions * It also provides a pagination abstraction to the user * * @todo Find a better pagination abstraction * * @param string $query Query format string * @param mixed ... Query parameters * @return ressource MySQLi result of the query */ public static final function _read($query) { $query = xsprintf($query, 'DB::_escape', '#'); foreach (DB::$work as $q => $d) { if (isset(DB::$con[$q])) { DB::$cur =& DB::$con[$q]; break; } } DB::$work = DB::$args = array(); DB::$a = 0; if (empty(DB::$con[$q])) { $r = apc_fetch('database-' . $q); if ($q > 0) { $r = $r['slaves']; DB::_connect($r[array_rand($r)], $q); } else { DB::_connect($r, $q); } DB::$cur =& DB::$con[$q]; } mysqli_select_db(DB::$cur, DB_NAME . $q); if (null !== DB::$pre_query) { mysqli_query(DB::$cur, DB::$pre_query); DB::$pre_query = null; } $s = microtime(true); if (array() === DB::$options) { if (false === ($res = mysqli_query(DB::$cur, $query, DB::$result))) { DB::_log($query); } DB::$result = 0; } else { if (empty(DB::$options['table'])) { $table = '_rndtbl' . rand(1000, 9999); } else { $table = DB::$options['table']; } $param = DB::$options['sort']; if (isset($opt['dir']) && 0 === strcasecmp($opt['dir'], 'desc')) { $param .= ' DESC'; } if (false === ($res = mysqli_query(DB::$cur, 'CREATE TEMPORARY TABLE ' . $table . ' (KEY SORT(' . $param . ')) ' . $query))) { DB::_log($query); } else { $res->free(); if (isset($opt['offset'])) { $offset = (int) $opt['offset']; } else { $offset = '0'; } $res = mysqli_query(DB::$cur, 'ALTER TABLE ' . $table . ' ADD OFFSET INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, DROP INDEX SORT, ORDER BY ' . $param); $res->free(); if (isset($opt['limit'])) { $param .= ' LIMIT '; $param .= (int) $opt['limit']; } $res = mysqli_query(DB::$cur, 'SELECT * FROM ' . $table . ' WHERE OFFSET >=' . $offset . ' ORDER BY OFFSET' . $limit, DB::$result); } DB::$options = array(); } if (class_exists('FB')) { FB::log(microtime(true) - $s . " - " . $query); } return $res; }