This is the platform-independent base DB implementation class.
This class will not be called directly. Rather, the adapter
class for the specific database will extend and instantiate it.
/** * @return Bitstream */ public function get_original_bitstream() { $sql = "select a.bitstream_id as original_id, count(b.bitstream_id) as converted_count " . "from bitstream as a left join bitstream as b on a.bitstream_id = b.original_id " . "group by a.bitstream_id " . "having converted_count = 0 " . "and a.deleted = 0 " . "and a.type = 'uploaded'" . "order by a.bitstream_id desc limit 0,1"; $query = $this->db->query($sql); //echo $query->num_rows(); if ($query->num_rows() == 0) { return NULL; } $result = $query->result_array(); if (!isset($result[0])) { return NULL; } //print_r($result); $bitstream_id = $result[0]["original_id"]; $bitstream = new Bitstream($bitstream_id); // 再檢查一下 $path = $bitstream->get_path(); if (is_file($path) === FALSE) { $this->puli_log->create_log($bitstream, "delete"); $bitstream->delete(); return $this->get_original_bitstream(); } return $bitstream; }
/** * Determines if a query is a "write" type. * * @param string An SQL query string * @return bool */ public function is_write_type($sql) { if (preg_match('#^(INSERT|UPDATE).*RETURNING\\s.+(\\,\\s?.+)*$#is', $sql)) { return FALSE; } return parent::is_write_type($sql); }
public static function closures(\CI_DB_driver $db) { $_ = array(); $lastquery = ''; $_['__tostring'] = function () use($db, &$lastquery) { $errmsg = $db->_error_message(); $error = $errmsg ? $db->_error_number() . ': ' . $errmsg : ''; $res = '(Gaia\\DB\\CI object - ' . "\n" . ' [driver] => ' . $db->dbdriver . "\n" . ' [connection] => ' . $db->hostname . "\n" . ' [error] => ' . $error . "\n" . ' [lastquery] => ' . $lastquery . "\n" . ')'; return $res; }; $_['prep_args'] = $format_args = function ($query, array $args) use($db, &$lastquery) { if (!$args || count($args) < 1) { return $query; } return \Gaia\DB\Query::prepare($query, $args, function ($v) use($db) { return "'" . $db->escape_str($v) . "'"; }); }; $_['execute'] = function ($query) use($db, &$lastquery) { $lastquery = $query; if (strlen($lastquery) > 500) { $lastquery = substr($lastquery, 0, 485) . ' ...[trucated]'; } try { $res = $db->query($query); if (!$res) { return FALSE; } $_ = array(); if (is_object($res)) { $_['fetch'] = function () use($res) { return $res->_fetch_assoc(); }; $_['free'] = function () use($res) { $res->free_result(); }; } $_['affected'] = $db->affected_rows(); if (preg_match('#^insert#i', $query)) { $_['insertid'] = $db->insert_id(); } return new Result($_); } catch (Exception $e) { return FALSE; } }; $_['start'] = function ($auth = NULL) use($db) { if ($db instanceof Iface) { return $db->start($auth); } $db->trans_start(); return TRUE; }; $_['commit'] = function ($auth = NULL) use($db) { if ($db instanceof Iface) { return $db->commit($auth); } $db->trans_complete(); return TRUE; }; $_['rollback'] = function ($auth = NULL) use($db) { if ($db instanceof Iface) { return $db->rollback($auth); } $db->trans_rollback($auth); return TRUE; }; $_['error'] = function () use($db) { return $db->_error_message(); }; $_['errorcode'] = function () use($db) { return $db->_error_number(); }; $_['isa'] = function ($name) use($db) { if ($db instanceof $name) { return TRUE; } if ($db->dbdriver == $name) { return TRUE; } return FALSE; }; $_['hash'] = function () use($db) { if ($db instanceof Iface) { return $db->hash(); } return spl_object_hash($db); }; return $_; }