Annotation of embedaddon/php/ext/mysqli/tests/connect.inc, revision 1.1.1.1
1.1 misho 1: <?php
2: /*
3: Default values are "localhost", "root",
4: database "stest" and empty password.
5: Change the MYSQL_TEST environment values
6: if you want to use another configuration
7: */
8:
9: $driver = new mysqli_driver;
10:
11: $host = getenv("MYSQL_TEST_HOST") ? getenv("MYSQL_TEST_HOST") : "localhost";
12: $port = getenv("MYSQL_TEST_PORT") ? getenv("MYSQL_TEST_PORT") : 3306;
13: $user = getenv("MYSQL_TEST_USER") ? getenv("MYSQL_TEST_USER") : "root";
14: $passwd = getenv("MYSQL_TEST_PASSWD") ? getenv("MYSQL_TEST_PASSWD") : "";
15: $db = getenv("MYSQL_TEST_DB") ? getenv("MYSQL_TEST_DB") : "test";
16: $engine = getenv("MYSQL_TEST_ENGINE") ? getenv("MYSQL_TEST_ENGINE") : "MyISAM";
17: $socket = getenv("MYSQL_TEST_SOCKET") ? getenv("MYSQL_TEST_SOCKET") : null;
18: $skip_on_connect_failure = getenv("MYSQL_TEST_SKIP_CONNECT_FAILURE") ? getenv("MYSQL_TEST_SKIP_CONNECT_FAILURE") : true;
19: $connect_flags = getenv("MYSQL_TEST_CONNECT_FLAGS") ? (int)getenv("MYSQL_TEST_CONNECT_FLAGS") : 0;
20: if ($socket) {
21: ini_set('mysqli.default_socket', $socket);
22: }
23:
24: /* Development setting: test experimal features and/or feature requests that never worked before? */
25: $TEST_EXPERIMENTAL = (in_array(getenv("MYSQL_TEST_EXPERIMENTAL"), array(0, 1))) ?
26: ((1 == getenv("MYSQL_TEST_EXPERIMENTAL")) ? true : false) :
27: false;
28:
29: $IS_MYSQLND = stristr(mysqli_get_client_info(), "mysqlnd");
30: if (!$IS_MYSQLND) {
31: $MYSQLND_VERSION = NULL;
32: } else {
33: /*
34: The formatting of the version reported by mysqli_get_client_info()
35: has changed significantly in the past. To get tests working properly
36: with PHP 5.3.0 and up, we set everything that looks like prior to
37: PHP 5.3.0 to version 5.0.4 = 5 * 10000 + 0 * 100 + 4 = 50004.
38: PHP 5.3.0 reports mysqlnd 5.0.5 dev (= 5 * 10000 + 0 * 100 + 5 = 50005.
39: */
40: if (preg_match('@Revision:\s+(\d+)\s*\$@ism', mysqli_get_client_info(), $matches)) {
41: /* something prior to PHP 5.3.0 */
42: $MYSQLND_VERSION = 50004;
43: } else if (preg_match('@^mysqlnd (\d+)\.(\d+)\.(\d+).*@ism', mysqli_get_client_info(), $matches)) {
44: /* formatting schema used by PHP 5.3.0 */
45: $MYSQLND_VERSION = (int)$matches[1] * 10000 + (int)$matches[2] * 100 + (int)$matches[3];
46: } else if (preg_match('@^mysqlnd/PHP 6.0.0-dev@ism', mysqli_get_client_info(), $matches)) {
47: /*
48: PHP 6.0 at the time of the first PHP 5.3.0 release.
49: HEAD and 5.3 have been in sync when 5.3.0 was released.
50: It is at least 5.0.5-dev.
51: */
52: $MYSQLND_VERSION = 50005;
53: } else {
54: /* unknown */
55: $MYSQLND_VERSION = -1;
56: }
57:
58: }
59:
60: if (!function_exists('sys_get_temp_dir')) {
61: function sys_get_temp_dir() {
62:
63: if (!empty($_ENV['TMP']))
64: return realpath( $_ENV['TMP'] );
65: if (!empty($_ENV['TMPDIR']))
66: return realpath( $_ENV['TMPDIR'] );
67: if (!empty($_ENV['TEMP']))
68: return realpath( $_ENV['TEMP'] );
69:
70: $temp_file = tempnam(md5(uniqid(rand(), TRUE)), '');
71: if ($temp_file) {
72: $temp_dir = realpath(dirname($temp_file));
73: unlink($temp_file);
74: return $temp_dir;
75: }
76: return FALSE;
77: }
78: }
79:
80: if (!function_exists('my_mysqli_connect')) {
81:
82: /**
83: * Whenever possible, please use this wrapper to make testing ot MYSQLI_CLIENT_COMPRESS (and potentially SSL) possible
84: *
85: * @param enable_env_flags Enable setting of connection flags through env(MYSQL_TEST_CONNECT_FLAGS)?
86: */
87: function my_mysqli_connect($host, $user, $passwd, $db, $port, $socket, $enable_env_flags = true) {
88: global $connect_flags;
89:
90: $flags = ($enable_env_flags) ? $connect_flags : false;
91:
92: if ($flags !== false) {
93: $link = mysqli_init();
94: if (!mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket, $flags))
95: $link = false;
96: } else {
97: $link = mysqli_connect($host, $user, $passwd, $db, $port, $socket);
98: }
99:
100: return $link;
101: }
102:
103: /**
104: * Whenever possible, please use this wrapper to make testing ot MYSQLI_CLIENT_COMPRESS (and potentially SSL) possible
105: *
106: * @param enable_env_flags Enable setting of connection flags through env(MYSQL_TEST_CONNECT_FLAGS)
107: */
108: function my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket, $flags = 0, $enable_env_flags = true) {
109: global $connect_flags;
110:
111: if ($enable_env_flags)
112: $flags & $connect_flags;
113:
114: return mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket, $flags);
115: }
116:
117: class my_mysqli extends mysqli {
118: public function __construct($host, $user, $passwd, $db, $port, $socket, $enable_env_flags = true) {
119: global $connect_flags;
120:
121: $flags = ($enable_env_flags) ? $connect_flags : false;
122:
123: if ($flags !== false) {
124: parent::init();
125: $this->real_connect($host, $user, $passwd, $db, $port, $socket, $flags);
126: } else {
127: parent::__construct($host, $user, $passwd, $db, $port, $socket);
128: }
129: }
130: }
131:
132: function my_get_charsets($link) {
133:
134: /* Those tree are set by SET NAMES */
135: $charsets = array(
136: 'client' => NULL,
137: 'results' => NULL,
138: 'connection' => NULL,
139: );
140:
141: if (!($res = mysqli_query($link, "SHOW VARIABLES LIKE '%character%'"))) {
142: printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
143: return $charsets;
144: }
145:
146: $names = array();
147: while ($row = mysqli_fetch_assoc($res)) {
148: $names[$row['Variable_name']] = $row['Value'];
149: }
150: mysqli_free_result($res);
151:
152: if (!($res = mysqli_query($link, sprintf("SHOW CHARACTER SET LIKE '%s'", $names['character_set_client']))) ||
153: !($details = mysqli_fetch_assoc($res))) {
154: printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
155: return $charsets;
156: }
157: mysqli_free_result($res);
158:
159: $charsets['client'] = array(
160: 'charset' => $details['Charset'],
161: 'desc' => $details['Description'],
162: 'collation' => $details['Default collation'],
163: 'maxlen' => $details['Maxlen'],
164: 'nr' => NULL,
165: );
166:
167: if (!($res = mysqli_query($link, sprintf("SHOW COLLATION LIKE '%s'", $details['Default collation']))) ||
168: !($collation = mysqli_fetch_assoc($res))) {
169: printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
170: return $charsets;
171: }
172: mysqli_free_result($res);
173: $charsets['client']['nr'] = $collation['Id'];
174:
175: if (!($res = mysqli_query($link, sprintf("SHOW CHARACTER SET LIKE '%s'", $names['character_set_results']))) ||
176: !($details = mysqli_fetch_assoc($res))) {
177: printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
178: return $charsets;
179: }
180: mysqli_free_result($res);
181:
182: $charsets['results'] = array(
183: 'charset' => $details['Charset'],
184: 'desc' => $details['Description'],
185: 'collation' => $details['Default collation'],
186: 'maxlen' => $details['Maxlen'],
187: 'nr' => NULL,
188: );
189:
190: if (!($res = mysqli_query($link, sprintf("SHOW COLLATION LIKE '%s'", $details['Default collation']))) ||
191: !($collation = mysqli_fetch_assoc($res))) {
192: printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
193: return $charsets;
194: }
195: mysqli_free_result($res);
196: $charsets['results']['nr'] = $collation['Id'];
197:
198:
199: if (!($res = mysqli_query($link, sprintf("SHOW CHARACTER SET LIKE '%s'", $names['character_set_connection']))) ||
200: !($details = mysqli_fetch_assoc($res))) {
201: printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
202: return $charsets;
203: }
204: mysqli_free_result($res);
205:
206: $charsets['connection'] = array(
207: 'charset' => $details['Charset'],
208: 'desc' => $details['Description'],
209: 'collation' => $details['Default collation'],
210: 'maxlen' => $details['Maxlen'],
211: 'nr' => NULL,
212: );
213:
214: if (!($res = mysqli_query($link, sprintf("SHOW COLLATION LIKE '%s'", $details['Default collation']))) ||
215: !($collation = mysqli_fetch_assoc($res))) {
216: printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
217: return $charsets;
218: }
219: mysqli_free_result($res);
220: $charsets['connection']['nr'] = $collation['Id'];
221:
222: return $charsets;
223: }
224:
225: function have_innodb($link) {
226: if (($res = $link->query("SHOW VARIABLES LIKE 'have_innodb'")) &&
227: ($row = $res->fetch_row()) &&
228: !empty($row)) {
229: if ($row[1] == "DISABLED" || $row[1] == "NO") {
230: return false;
231: }
232: return true;
233: } else {
234: /* MySQL 5.6.1+ */
235: if ($res = $link->query("SHOW ENGINES")) {
236: while ($row = $res->fetch_assoc()) {
237: if (!isset($row['Engine']) || !isset($row['Support']))
238: return false;
239:
240: if (('InnoDB' == $row['Engine']) &&
241: (('YES' == $row['Support']) || ('DEFAULT' == $row['Support']))
242: ) {
243: return true;
244: }
245: }
246: return false;
247: } else {
248: return false;
249: }
250: }
251: return false;
252: }
253:
254: } else {
255: printf("skip Eeeek/BUG/FIXME - connect.inc included twice! skipif bug?\n");
256: }
257:
258: function handle_catchable_fatal($errno, $error, $file, $line) {
259: static $errcodes = array();
260: if (empty($errcodes)) {
261: $constants = get_defined_constants();
262: foreach ($constants as $name => $value) {
263: if (substr($name, 0, 2) == "E_")
264: $errcodes[$value] = $name;
265: }
266: }
267: printf("[%s] %s in %s on line %s\n",
268: (isset($errcodes[$errno])) ? $errcodes[$errno] : $errno,
269: $error, $file, $line);
270:
271: return true;
272: }
273: ?>
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>