Annotation of embedaddon/php/ext/mysqli/tests/mysqli_explain_metadata.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: EXPLAIN - metadata
        !             3: --SKIPIF--
        !             4: <?php
        !             5: require_once('skipif.inc');
        !             6: require_once('skipifemb.inc');
        !             7: require_once('skipifconnectfailure.inc');
        !             8: require_once("connect.inc");
        !             9: if (!$IS_MYSQLND)
        !            10:   die("skip Open libmysql/MySQL issue http://bugs.mysql.com/?id=62350");
        !            11: ?>
        !            12: --FILE--
        !            13: <?php
        !            14:        require_once('connect.inc');
        !            15:        require_once('table.inc');
        !            16: 
        !            17:        if (!$res = mysqli_query($link, 'EXPLAIN SELECT t1.*, t2.* FROM test AS t1, test AS t2'))
        !            18:                printf("[001] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
        !            19: 
        !            20:        $num_rows       = 0;
        !            21:        $num_fields     = 0;
        !            22:        $field_names    = array();
        !            23:        if (!$row = mysqli_fetch_assoc($res)) {
        !            24:                printf("[002] Expecting result but got no data [%d] %s\n",
        !            25:                        mysqli_errno($link), mysqli_error($link));
        !            26:        } else {
        !            27:                $num_rows++;
        !            28:                $num_fields = count($row);
        !            29:                foreach ($row as $name => $value)
        !            30:                        $field_names[$name] = gettype($value);
        !            31:        }
        !            32: 
        !            33:        while ($row = mysqli_fetch_assoc($res))
        !            34:                $num_rows++;
        !            35: 
        !            36:        if (($tmp = mysqli_num_rows($res)) !== $num_rows) {
        !            37:                printf("[003] Expecting int/%d got %s/%s\n",
        !            38:                        $num_rows, gettype($tmp), $tmp);
        !            39:        }
        !            40:        if (($tmp = mysqli_field_count($link)) !== $num_fields) {
        !            41:                printf("[004] Expecting int/%d got %s/%s\n",
        !            42:                        $num_fields, gettype($tmp), $tmp);
        !            43:        }
        !            44:        $fields = mysqli_fetch_fields($res);
        !            45:        if (($tmp = count($fields)) !== $num_fields) {
        !            46:                printf("[005] Expecting int/%d got %s/%s\n",
        !            47:                        $num_fields, gettype($tmp), $tmp);
        !            48:        }
        !            49: 
        !            50:        foreach ($fields as $k => $field) {
        !            51:                $field->max_length = 0;// change it or we will get diff error
        !            52:                if (isset($field_names[$field->name])) {
        !            53:                        unset($field_names[$field->name]);
        !            54:                } else {
        !            55:                        printf("[006] Unexpected field '%s', dumping info\n");
        !            56:                        var_dump($field);
        !            57:                }
        !            58:        }
        !            59:        if (!empty($field_names)) {
        !            60:                printf("[007] Field descriptions missing for the following columns\n");
        !            61:                var_dump($field_names);
        !            62:        }
        !            63: 
        !            64:        mysqli_free_result($res);
        !            65: 
        !            66:        $stmt = mysqli_stmt_init($link);
        !            67:        /* Depending on your version, the MySQL server migit not support this */
        !            68:        if ($stmt->prepare('EXPLAIN SELECT t1.*, t2.* FROM test AS t1, test AS t2') && $stmt->execute()) {
        !            69:                if (!mysqli_stmt_store_result($stmt))
        !            70:                        printf("[008] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !            71: 
        !            72:                if (!$res_meta = mysqli_stmt_result_metadata($stmt))
        !            73:                        printf("[009] [%d] %s\n", mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !            74: 
        !            75:                if (($tmp = mysqli_stmt_num_rows($stmt)) !== $num_rows) {
        !            76:                        printf("[010] Expecting int/%d got %s/%s\n",
        !            77:                                $num_rows, gettype($tmp), $tmp);
        !            78:                }
        !            79:                if (($tmp = mysqli_stmt_field_count($stmt)) !== $num_fields) {
        !            80:                        printf("[011] Expecting int/%d got %s/%s\n",
        !            81:                                $num_fields, gettype($tmp), $tmp);
        !            82:                }
        !            83:                if (($tmp = mysqli_field_count($link)) !== $num_fields) {
        !            84:                        printf("[013] Expecting int/%d got %s/%s\n",
        !            85:                                $num_fields, gettype($tmp), $tmp);
        !            86:                }
        !            87:                if (($tmp = $res_meta->field_count) !== $num_fields) {
        !            88:                        printf("[014] Expecting int/%d got %s/%s\n",
        !            89:                                $num_fields, gettype($tmp), $tmp);
        !            90:                }
        !            91:                $fields_res_meta = mysqli_fetch_fields($res_meta);
        !            92:                if (($tmp = count($fields_res_meta)) !== $num_fields)
        !            93:                        printf("[015] Expecting int/%d got %s/%s\n",
        !            94:                                $num_fields, gettype($tmp), $tmp);
        !            95: 
        !            96:                if ($fields_res_meta != $fields) {
        !            97:                        printf("[016] Prepared Statement metadata differs from normal metadata, dumping\n");
        !            98:                        var_dump($fields_res_meta);
        !            99:                        var_dump($fields);
        !           100:                }
        !           101: 
        !           102:                if (function_exists('mysqli_stmt_get_result') &&
        !           103:                        $stmt->prepare('EXPLAIN SELECT t1.*, t2.* FROM test AS t1, test AS t2') &&
        !           104:                        $stmt->execute()) {
        !           105:                        if (!$res_stmt = mysqli_stmt_get_result($stmt)) {
        !           106:                                printf("[017] Cannot fetch result from PS [%d] %s\n",
        !           107:                                        mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
        !           108:                        }
        !           109:                        if (($tmp = mysqli_num_rows($res_stmt)) !== $num_rows) {
        !           110:                                printf("[018] Expecting int/%d got %s/%s\n",
        !           111:                                        $num_rows, gettype($tmp), $tmp);
        !           112:                        }
        !           113:                        if ((mysqli_stmt_num_rows($stmt)) !== 0) {
        !           114:                                printf("[019] Expecting int/0 got %s/%s\n", gettype($tmp), $tmp);
        !           115:                        }
        !           116:                        if (($tmp = mysqli_stmt_field_count($stmt)) !== $num_fields) {
        !           117:                                printf("[020] Expecting int/%d got %s/%s\n",
        !           118:                                        $num_fields, gettype($tmp), $tmp);
        !           119: 
        !           120:                        }
        !           121:                        if (($tmp = $res_stmt->field_count) !== $num_fields) {
        !           122:                                printf("[021] Expecting int/%d got %s/%s\n",
        !           123:                                        $num_fields, gettype($tmp), $tmp);
        !           124:                        }
        !           125: 
        !           126:                        $fields_stmt = mysqli_fetch_fields($res_stmt);
        !           127:                        if (($tmp = count($fields_stmt)) !== $num_fields) {
        !           128:                                printf("[022] Expecting int/%d got %s/%s\n",
        !           129:                                        $num_fields, gettype($tmp), $tmp);
        !           130:                        }
        !           131:                        reset($fields);
        !           132:                        foreach ($fields_stmt as $fields_stmt_val) {
        !           133:                                list(,$fields_val) = each($fields);
        !           134:                                unset($fields_stmt_val->max_length);
        !           135:                                unset($fields_val->max_length);
        !           136:                                if ($fields_stmt_val != $fields_val) {
        !           137:                                        printf("[023] PS mysqli_stmt_get_result() metadata seems wrong, dumping\n");
        !           138:                                        var_dump($fields_stmt_val);
        !           139:                                        var_dump($fields_val);
        !           140:                                }
        !           141:                        }
        !           142: /*
        !           143:                        if ($fields_stmt != $fields) {
        !           144:                                printf("[023] PS mysqli_stmt_get_result() metadata seems wrong, dumping\n");
        !           145:                                var_dump($fields_stmt);
        !           146:                                var_dump($fields);
        !           147:                        }
        !           148: */
        !           149:                        mysqli_free_result($res_stmt);
        !           150:                }
        !           151:        }
        !           152:        mysqli_stmt_close($stmt);
        !           153: 
        !           154:        mysqli_close($link);
        !           155:        print "done!";
        !           156: ?>
        !           157: --CLEAN--
        !           158: <?php
        !           159:        require_once("clean_table.inc");
        !           160: ?>
        !           161: --EXPECTF--
        !           162: done!

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>