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>