Annotation of embedaddon/php/ext/mysqli/tests/connect.inc, revision 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>