public static function initConnections() { static::$_data['db'] = array(); static::$_data['db.queries'] = array(); static::$_data['db.time'] = 0; static::$_data['db.invalid'] = 0; Connections::applyFilter('_initAdapter', function ($self, $params, $chain) { $adapter = $chain->next($self, $params, $chain); $adapter->applyFilter(array('read', 'create', 'update', 'delete'), function ($self, $params, $chain) { $options = $params['options']; $query = $params['query']; $data = array(); $queries = array(); $data['start'] = microtime(true); $data['memory'] = memory_get_usage(true); if (is_object($query) && method_exists($query, 'model')) { $data['name'] = $query->model() . '::' . $query->type(); } else { $data['name'] = '?'; } if ($result = $chain->next($self, $params, $chain)) { switch (true) { case method_exists($result, 'data'): $queries[] = array('explain' => $result->result()->resource()->explain(), 'query' => $result->result()->resource()->info()); break; case $query->calculate(): $queries[] = array('explain' => $result->explain(), 'query' => $result->info()); break; default: } $data['name'] .= ' (' . count($result) . ')'; } else { Debugger::inc('db.invalid', 1); } $data['end'] = microtime(true); $data['memory'] = memory_get_usage(true) - $data['memory']; $data['time'] = $data['end'] - $data['start']; Debugger::push('events', $data); Debugger::inc('events.time', $data['time']); Debugger::push('db', $data); Debugger::push('db.queries', $queries); Debugger::inc('db.time', $data['time']); return $result; }); return $adapter; }); }