1: | <?php |
2: | |
3: | |
4: | |
5: | |
6: | |
7: | |
8: | |
9: | |
10: | |
11: | |
12: | |
13: | |
14: | |
15: | |
16: | |
17: | |
18: | |
19: | |
20: | |
21: | |
22: | |
23: | |
24: | |
25: | |
26: | namespace Kint\Parser; |
27: | |
28: | use Kint\Object\BasicObject; |
29: | use Mysqli; |
30: | |
31: | |
32: | |
33: | |
34: | |
35: | |
36: | |
37: | class MysqliPlugin extends Plugin |
38: | { |
39: | |
40: | protected $always_readable = array( |
41: | 'client_version' => true, |
42: | 'connect_errno' => true, |
43: | 'connect_error' => true, |
44: | ); |
45: | |
46: | |
47: | protected $empty_readable = array( |
48: | 'client_info' => true, |
49: | 'errno' => true, |
50: | 'error' => true, |
51: | ); |
52: | |
53: | |
54: | protected $connected_readable = array( |
55: | 'affected_rows' => true, |
56: | 'error_list' => true, |
57: | 'field_count' => true, |
58: | 'host_info' => true, |
59: | 'info' => true, |
60: | 'insert_id' => true, |
61: | 'server_info' => true, |
62: | 'server_version' => true, |
63: | 'stat' => true, |
64: | 'sqlstate' => true, |
65: | 'protocol_version' => true, |
66: | 'thread_id' => true, |
67: | 'warning_count' => true, |
68: | ); |
69: | |
70: | public function getTypes() |
71: | { |
72: | return array('object'); |
73: | } |
74: | |
75: | public function getTriggers() |
76: | { |
77: | return Parser::TRIGGER_COMPLETE; |
78: | } |
79: | |
80: | public function parse(&$var, BasicObject &$o, $trigger) |
81: | { |
82: | if (!$var instanceof Mysqli) { |
83: | return; |
84: | } |
85: | |
86: | $connected = false; |
87: | $empty = false; |
88: | |
89: | if (\is_string(@$var->sqlstate)) { |
90: | $connected = true; |
91: | } elseif (\is_string(@$var->client_info)) { |
92: | $empty = true; |
93: | } |
94: | |
95: | foreach ($o->value->contents as $key => $obj) { |
96: | if (isset($this->connected_readable[$obj->name])) { |
97: | if (!$connected) { |
98: | continue; |
99: | } |
100: | } elseif (isset($this->empty_readable[$obj->name])) { |
101: | if (!$connected && !$empty) { |
102: | continue; |
103: | } |
104: | } elseif (!isset($this->always_readable[$obj->name])) { |
105: | continue; |
106: | } |
107: | |
108: | if ('null' !== $obj->type) { |
109: | continue; |
110: | } |
111: | |
112: | $param = $var->{$obj->name}; |
113: | |
114: | if (null === $param) { |
115: | continue; |
116: | } |
117: | |
118: | $base = BasicObject::blank($obj->name, $obj->access_path); |
119: | |
120: | $base->depth = $obj->depth; |
121: | $base->owner_class = $obj->owner_class; |
122: | $base->operator = $obj->operator; |
123: | $base->access = $obj->access; |
124: | $base->reference = $obj->reference; |
125: | |
126: | $o->value->contents[$key] = $this->parser->parse($param, $base); |
127: | } |
128: | } |
129: | } |
130: | |