Annotation of embedaddon/php/ext/mysqli/tests/mysqli_explain_metadata.phpt, revision 1.1.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>