summaryrefslogtreecommitdiff
path: root/ext/mysqli/tests/connect.inc
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mysqli/tests/connect.inc')
-rw-r--r--ext/mysqli/tests/connect.inc273
1 files changed, 273 insertions, 0 deletions
diff --git a/ext/mysqli/tests/connect.inc b/ext/mysqli/tests/connect.inc
new file mode 100644
index 0000000..3a9d8ec
--- /dev/null
+++ b/ext/mysqli/tests/connect.inc
@@ -0,0 +1,273 @@
+<?php
+ /*
+ Default values are "localhost", "root",
+ database "stest" and empty password.
+ Change the MYSQL_TEST environment values
+ if you want to use another configuration
+ */
+
+ $driver = new mysqli_driver;
+
+ $host = getenv("MYSQL_TEST_HOST") ? getenv("MYSQL_TEST_HOST") : "localhost";
+ $port = getenv("MYSQL_TEST_PORT") ? getenv("MYSQL_TEST_PORT") : 3306;
+ $user = getenv("MYSQL_TEST_USER") ? getenv("MYSQL_TEST_USER") : "root";
+ $passwd = getenv("MYSQL_TEST_PASSWD") ? getenv("MYSQL_TEST_PASSWD") : "";
+ $db = getenv("MYSQL_TEST_DB") ? getenv("MYSQL_TEST_DB") : "test";
+ $engine = getenv("MYSQL_TEST_ENGINE") ? getenv("MYSQL_TEST_ENGINE") : "MyISAM";
+ $socket = getenv("MYSQL_TEST_SOCKET") ? getenv("MYSQL_TEST_SOCKET") : null;
+ $skip_on_connect_failure = getenv("MYSQL_TEST_SKIP_CONNECT_FAILURE") ? getenv("MYSQL_TEST_SKIP_CONNECT_FAILURE") : true;
+ $connect_flags = getenv("MYSQL_TEST_CONNECT_FLAGS") ? (int)getenv("MYSQL_TEST_CONNECT_FLAGS") : 0;
+ if ($socket) {
+ ini_set('mysqli.default_socket', $socket);
+ }
+
+ /* Development setting: test experimal features and/or feature requests that never worked before? */
+ $TEST_EXPERIMENTAL = (in_array(getenv("MYSQL_TEST_EXPERIMENTAL"), array(0, 1))) ?
+ ((1 == getenv("MYSQL_TEST_EXPERIMENTAL")) ? true : false) :
+ false;
+
+ $IS_MYSQLND = stristr(mysqli_get_client_info(), "mysqlnd");
+ if (!$IS_MYSQLND) {
+ $MYSQLND_VERSION = NULL;
+ } else {
+ /*
+ The formatting of the version reported by mysqli_get_client_info()
+ has changed significantly in the past. To get tests working properly
+ with PHP 5.3.0 and up, we set everything that looks like prior to
+ PHP 5.3.0 to version 5.0.4 = 5 * 10000 + 0 * 100 + 4 = 50004.
+ PHP 5.3.0 reports mysqlnd 5.0.5 dev (= 5 * 10000 + 0 * 100 + 5 = 50005.
+ */
+ if (preg_match('@Revision:\s+(\d+)\s*\$@ism', mysqli_get_client_info(), $matches)) {
+ /* something prior to PHP 5.3.0 */
+ $MYSQLND_VERSION = 50004;
+ } else if (preg_match('@^mysqlnd (\d+)\.(\d+)\.(\d+).*@ism', mysqli_get_client_info(), $matches)) {
+ /* formatting schema used by PHP 5.3.0 */
+ $MYSQLND_VERSION = (int)$matches[1] * 10000 + (int)$matches[2] * 100 + (int)$matches[3];
+ } else if (preg_match('@^mysqlnd/PHP 6.0.0-dev@ism', mysqli_get_client_info(), $matches)) {
+ /*
+ PHP 6.0 at the time of the first PHP 5.3.0 release.
+ HEAD and 5.3 have been in sync when 5.3.0 was released.
+ It is at least 5.0.5-dev.
+ */
+ $MYSQLND_VERSION = 50005;
+ } else {
+ /* unknown */
+ $MYSQLND_VERSION = -1;
+ }
+
+ }
+
+ if (!function_exists('sys_get_temp_dir')) {
+ function sys_get_temp_dir() {
+
+ if (!empty($_ENV['TMP']))
+ return realpath( $_ENV['TMP'] );
+ if (!empty($_ENV['TMPDIR']))
+ return realpath( $_ENV['TMPDIR'] );
+ if (!empty($_ENV['TEMP']))
+ return realpath( $_ENV['TEMP'] );
+
+ $temp_file = tempnam(md5(uniqid(rand(), TRUE)), '');
+ if ($temp_file) {
+ $temp_dir = realpath(dirname($temp_file));
+ unlink($temp_file);
+ return $temp_dir;
+ }
+ return FALSE;
+ }
+ }
+
+ if (!function_exists('my_mysqli_connect')) {
+
+ /**
+ * Whenever possible, please use this wrapper to make testing ot MYSQLI_CLIENT_COMPRESS (and potentially SSL) possible
+ *
+ * @param enable_env_flags Enable setting of connection flags through env(MYSQL_TEST_CONNECT_FLAGS)?
+ */
+ function my_mysqli_connect($host, $user, $passwd, $db, $port, $socket, $enable_env_flags = true) {
+ global $connect_flags;
+
+ $flags = ($enable_env_flags) ? $connect_flags : false;
+
+ if ($flags !== false) {
+ $link = mysqli_init();
+ if (!mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket, $flags))
+ $link = false;
+ } else {
+ $link = mysqli_connect($host, $user, $passwd, $db, $port, $socket);
+ }
+
+ return $link;
+ }
+
+ /**
+ * Whenever possible, please use this wrapper to make testing ot MYSQLI_CLIENT_COMPRESS (and potentially SSL) possible
+ *
+ * @param enable_env_flags Enable setting of connection flags through env(MYSQL_TEST_CONNECT_FLAGS)
+ */
+ function my_mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket, $flags = 0, $enable_env_flags = true) {
+ global $connect_flags;
+
+ if ($enable_env_flags)
+ $flags & $connect_flags;
+
+ return mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket, $flags);
+ }
+
+ class my_mysqli extends mysqli {
+ public function __construct($host, $user, $passwd, $db, $port, $socket, $enable_env_flags = true) {
+ global $connect_flags;
+
+ $flags = ($enable_env_flags) ? $connect_flags : false;
+
+ if ($flags !== false) {
+ parent::init();
+ $this->real_connect($host, $user, $passwd, $db, $port, $socket, $flags);
+ } else {
+ parent::__construct($host, $user, $passwd, $db, $port, $socket);
+ }
+ }
+ }
+
+ function my_get_charsets($link) {
+
+ /* Those tree are set by SET NAMES */
+ $charsets = array(
+ 'client' => NULL,
+ 'results' => NULL,
+ 'connection' => NULL,
+ );
+
+ if (!($res = mysqli_query($link, "SHOW VARIABLES LIKE '%character%'"))) {
+ printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+ return $charsets;
+ }
+
+ $names = array();
+ while ($row = mysqli_fetch_assoc($res)) {
+ $names[$row['Variable_name']] = $row['Value'];
+ }
+ mysqli_free_result($res);
+
+ if (!($res = mysqli_query($link, sprintf("SHOW CHARACTER SET LIKE '%s'", $names['character_set_client']))) ||
+ !($details = mysqli_fetch_assoc($res))) {
+ printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+ return $charsets;
+ }
+ mysqli_free_result($res);
+
+ $charsets['client'] = array(
+ 'charset' => $details['Charset'],
+ 'desc' => $details['Description'],
+ 'collation' => $details['Default collation'],
+ 'maxlen' => $details['Maxlen'],
+ 'nr' => NULL,
+ );
+
+ if (!($res = mysqli_query($link, sprintf("SHOW COLLATION LIKE '%s'", $details['Default collation']))) ||
+ !($collation = mysqli_fetch_assoc($res))) {
+ printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+ return $charsets;
+ }
+ mysqli_free_result($res);
+ $charsets['client']['nr'] = $collation['Id'];
+
+ if (!($res = mysqli_query($link, sprintf("SHOW CHARACTER SET LIKE '%s'", $names['character_set_results']))) ||
+ !($details = mysqli_fetch_assoc($res))) {
+ printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+ return $charsets;
+ }
+ mysqli_free_result($res);
+
+ $charsets['results'] = array(
+ 'charset' => $details['Charset'],
+ 'desc' => $details['Description'],
+ 'collation' => $details['Default collation'],
+ 'maxlen' => $details['Maxlen'],
+ 'nr' => NULL,
+ );
+
+ if (!($res = mysqli_query($link, sprintf("SHOW COLLATION LIKE '%s'", $details['Default collation']))) ||
+ !($collation = mysqli_fetch_assoc($res))) {
+ printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+ return $charsets;
+ }
+ mysqli_free_result($res);
+ $charsets['results']['nr'] = $collation['Id'];
+
+
+ if (!($res = mysqli_query($link, sprintf("SHOW CHARACTER SET LIKE '%s'", $names['character_set_connection']))) ||
+ !($details = mysqli_fetch_assoc($res))) {
+ printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+ return $charsets;
+ }
+ mysqli_free_result($res);
+
+ $charsets['connection'] = array(
+ 'charset' => $details['Charset'],
+ 'desc' => $details['Description'],
+ 'collation' => $details['Default collation'],
+ 'maxlen' => $details['Maxlen'],
+ 'nr' => NULL,
+ );
+
+ if (!($res = mysqli_query($link, sprintf("SHOW COLLATION LIKE '%s'", $details['Default collation']))) ||
+ !($collation = mysqli_fetch_assoc($res))) {
+ printf("[%d] %s\n", mysqli_errno($link), mysqli_error($link));
+ return $charsets;
+ }
+ mysqli_free_result($res);
+ $charsets['connection']['nr'] = $collation['Id'];
+
+ return $charsets;
+ }
+
+ function have_innodb($link) {
+ if (($res = $link->query("SHOW VARIABLES LIKE 'have_innodb'")) &&
+ ($row = $res->fetch_row()) &&
+ !empty($row)) {
+ if ($row[1] == "DISABLED" || $row[1] == "NO") {
+ return false;
+ }
+ return true;
+ } else {
+ /* MySQL 5.6.1+ */
+ if ($res = $link->query("SHOW ENGINES")) {
+ while ($row = $res->fetch_assoc()) {
+ if (!isset($row['Engine']) || !isset($row['Support']))
+ return false;
+
+ if (('InnoDB' == $row['Engine']) &&
+ (('YES' == $row['Support']) || ('DEFAULT' == $row['Support']))
+ ) {
+ return true;
+ }
+ }
+ return false;
+ } else {
+ return false;
+ }
+ }
+ return false;
+ }
+
+ } else {
+ printf("skip Eeeek/BUG/FIXME - connect.inc included twice! skipif bug?\n");
+ }
+
+ function handle_catchable_fatal($errno, $error, $file, $line) {
+ static $errcodes = array();
+ if (empty($errcodes)) {
+ $constants = get_defined_constants();
+ foreach ($constants as $name => $value) {
+ if (substr($name, 0, 2) == "E_")
+ $errcodes[$value] = $name;
+ }
+ }
+ printf("[%s] %s in %s on line %s\n",
+ (isset($errcodes[$errno])) ? $errcodes[$errno] : $errno,
+ $error, $file, $line);
+
+ return true;
+ }
+?>