Annotation of embedaddon/php/ext/mysqli/tests/mysqli_stmt_result_metadata_sqltests.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: mysqli_stmt_result_metadata() - non SELECT statements
                      3: --SKIPIF--
                      4: <?php
                      5: require_once('skipif.inc');
                      6: require_once('skipifemb.inc');
                      7: require_once('skipifconnectfailure.inc');
                      8: 
                      9: die("skip Check again when the Klingons visit earth - http://bugs.mysql.com/bug.php?id=42490");
                     10: ?>
                     11: --FILE--
                     12: <?php
                     13:        require('table.inc');
                     14: 
                     15:        function testStatement($offset, $link, $sql, $expected_lib, $expected_mysqlnd, $check_mysqlnd, $compare) {
                     16: 
                     17:                if (!$stmt = mysqli_stmt_init($link)) {
                     18:                        printf("[%04d - %s] [%d] %s\n",
                     19:                                $offset, $sql,
                     20:                                mysqli_errno($link), mysqli_error($link));
                     21:                        return false;
                     22:                }
                     23: 
                     24:                if (!@mysqli_stmt_prepare($stmt, $sql)) {
                     25:                        /* Not all server versions will support all statements */
                     26:                        /* Failing to prepare is OK */
                     27:                        return true;
                     28:                }
                     29: 
                     30:                if (empty($expected_lib) && (false !== $res)) {
                     31:                        printf("[%04d - %s] No metadata expected\n",
                     32:                                $offset + 1, $sql);
                     33:                        return false;
                     34:                } else if (!empty($expected_lib) && (false == $res)) {
                     35:                        printf("[%04d - %s] Metadata expected\n",
                     36:                                $offset + 2, $sql);
                     37:                        return false;
                     38:                }
                     39:                if (!empty($expected_lib)) {
                     40:                        if (!is_object($res)) {
                     41:                                printf("[%04d - %s] [%d] %s\n",
                     42:                                        $offset + 3, $sql,
                     43:                                        mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
                     44:                                return false;
                     45:                        }
                     46:                        if (get_class($res) != 'mysqli_result') {
                     47:                                printf("[%04d - %s] Expecting object/mysqli_result got object/%s\n",
                     48:                                        $offset + 4, $sql, get_class($res));
                     49:                                return false;
                     50:                        }
                     51: 
                     52:                        $meta = array(
                     53:                                'num_fields'            => mysqli_num_fields($res),
                     54:                                'fetch_field'           => mysqli_fetch_field($res),
                     55:                                'fetch_field_direct0'   => mysqli_fetch_field_direct($res, 0),
                     56:                                'fetch_field_direct1'   => @mysqli_fetch_field_direct($res, 1),
                     57:                                'fetch_fields'          => count(mysqli_fetch_fields($res)),
                     58:                                'field_count'           => $res->field_count,
                     59:                                'field_seek-1'          => @mysqli_field_seek($res, -1),
                     60:                                'field_seek0'           => mysqli_field_seek($res, 0),
                     61:                                'field_tell'            => mysqli_field_tell($res),
                     62:                        );
                     63:                        if (is_object($meta['fetch_field'])) {
                     64:                                $meta['fetch_field']->charsetnr = 'ignore';
                     65:                                $meta['fetch_field']->flags     = 'ignore';
                     66:                        }
                     67:                        if (is_object($meta['fetch_field_direct0'])) {
                     68:                                $meta['fetch_field_direct0']->charsetnr = 'ignore';
                     69:                                $meta['fetch_field_direct0']->flags     = 'ignore';
                     70:                        }
                     71:                        if (is_object($meta['fetch_field_direct1'])) {
                     72:                                $meta['fetch_field_direct1']->charsetnr = 'ignore';
                     73:                                $meta['fetch_field_direct1']->flags     = 'ignore';
                     74:                        }
                     75:                        mysqli_free_result($res);
                     76: 
                     77:                        if ($meta != $expected_lib) {
                     78:                                printf("[%04d - %s] Metadata differes from expected values\n",
                     79:                                        $offset + 5, $sql);
                     80:                                var_dump($meta);
                     81:                                var_dump($expected_lib);
                     82:                                return false;
                     83:                        }
                     84:                }
                     85: 
                     86:                if (function_exists('mysqli_stmt_get_result')) {
                     87:                        /* mysqlnd only */
                     88:                        if (!mysqli_stmt_execute($stmt)) {
                     89:                                printf("[%04d - %s] [%d] %s\n",
                     90:                                        $offset + 6, $sql,
                     91:                                        mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
                     92:                                return false;
                     93:                        }
                     94: 
                     95:                        $res = mysqli_stmt_get_result($stmt);
                     96:                        if (false === $res && !empty($expected_mysqlnd)) {
                     97:                                printf("[%04d - %s] Expecting resultset [%d] %s\n",
                     98:                                        $offset + 7, $sql,
                     99:                                        mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
                    100:                                return false;
                    101:                        } else if (empty($expected_mysqlnd) && false !== $res) {
                    102:                                printf("[%04d - %s] Unexpected resultset [%d] %s\n",
                    103:                                        $offset + 8, $sql,
                    104:                                        mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
                    105:                                return false;
                    106:                        }
                    107: 
                    108:                        if (!is_object($res)) {
                    109:                                printf("[%04d - %s] [%d] %s\n",
                    110:                                        $offset + 9, $sql,
                    111:                                        mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
                    112:                                return false;
                    113:                        }
                    114:                        if ('mysqli_result' != get_class($res)) {
                    115:                                printf("[%04d - %s] Expecting object/mysqli_result got object/%s\n",
                    116:                                        $offset + 10, $sql,
                    117:                                        get_class($res));
                    118:                                return false;
                    119:                        }
                    120: 
                    121:                        $meta_res = array(
                    122:                                'num_fields'            => mysqli_num_fields($res),
                    123:                                'fetch_field'           => mysqli_fetch_field($res),
                    124:                                'fetch_field_direct0'   => mysqli_fetch_field_direct($res, 0),
                    125:                                'fetch_field_direct1'   => @mysqli_fetch_field_direct($res, 1),
                    126:                                'fetch_fields'          => count(mysqli_fetch_fields($res)),
                    127:                                'field_count'           => mysqli_field_count($link),
                    128:                                'field_seek-1'          => @mysqli_field_seek($res, -1),
                    129:                                'field_seek0'           => mysqli_field_seek($res, 0),
                    130:                                'field_tell'            => mysqli_field_tell($res),
                    131:                        );
                    132:                        if (is_object($meta_res['fetch_field'])) {
                    133:                                $meta_res['fetch_field']->charsetnr     = 'ignore';
                    134:                                $meta_res['fetch_field']->flags = 'ignore';
                    135:                        }
                    136:                        if (is_object($meta_res['fetch_field_direct0'])) {
                    137:                                $meta_res['fetch_field_direct0']->charsetnr     = 'ignore';
                    138:                                $meta_res['fetch_field_direct0']->flags = 'ignore';
                    139:                        }
                    140:                        if (is_object($meta_res['fetch_field_direct1'])) {
                    141:                                $meta_res['fetch_field_direct1']->charsetnr     = 'ignore';
                    142:                                $meta_res['fetch_field_direct1']->flags = 'ignore';
                    143:                        }
                    144:                        mysqli_free_result($res);
                    145:                        if ($check_mysqlnd && $meta_res != $expected_mysqlnd) {
                    146:                                printf("[%04d - %s] Metadata differs from expected\n",
                    147:                                        $offset + 11, $sql);
                    148:                                var_dump($meta_res);
                    149:                                var_dump($expected_mysqlnd);
                    150:                        } else {
                    151:                                if ($meta_res['field_count'] < 1) {
                    152:                                        printf("[%04d - %s] Metadata seems wrong, no fields?\n",
                    153:                                        $offset + 12, $sql);
                    154:                                        var_dump($meta_res);
                    155:                                        var_dump(mysqli_fetch_assoc($res));
                    156:                                }
                    157:                        }
                    158: 
                    159:                        if ($compare && $meta_res != $meta) {
                    160:                                printf("[%04d - %s] Metadata returned by mysqli_stmt_result_metadata() and mysqli_stmt_get_result() differ\n",
                    161:                                        $offset + 13, $sql);
                    162:                                var_dump($meta_res);
                    163:                                var_dump($meta);
                    164:                        }
                    165: 
                    166:                }
                    167: 
                    168:                mysqli_stmt_close($stmt);
                    169:                return true;
                    170:        }
                    171: 
                    172:        /* Note: very weak testing, we accept almost any result */
                    173: 
                    174:        testStatement(100, $link, 'ANALYZE TABLE test', array(), array(1), false, false);
                    175:        testStatement(120, $link, 'OPTIMIZE TABLE test', array(), array(1), false, false);
                    176:        testStatement(140, $link, 'REPAIR TABLE test', array(), array(1), false, false);
                    177: 
                    178:        testStatement(160, $link, 'SHOW AUTHORS', array(), array(1), false, false);
                    179:        testStatement(180, $link, 'SHOW CHARACTER SET', array(), array(1), false, false);
                    180:        testStatement(200, $link, 'SHOW COLLATION', array(), array(1), false, false);
                    181:        testStatement(220, $link, 'SHOW CONTRIBUTORS', array(), array(1), false, false);
                    182:        testStatement(240, $link, 'SHOW CREATE DATABASE ' . $db, array(), array(1), false, false);
                    183:        testStatement(260, $link, 'SHOW DATABASES', array(), array(1), false, false);
                    184:        testStatement(280, $link, 'SHOW ENGINE InnoDB STATUS', array(), array(1), false, false);
                    185:        testStatement(300, $link, 'SHOW ENGINES', array(), array(1), false, false);
                    186:        testStatement(320, $link, 'SHOW PLUGINS', array(), array(1), false, false);
                    187:        testStatement(340, $link, 'SHOW PROCESSLIST', array(), array(1), false, false);
                    188:        testStatement(360, $link, 'SHOW FULL PROCESSLIST', array(), array(1), false, false);
                    189:        testStatement(380, $link, 'SHOW STATUS', array(), array(1), false, false);
                    190:        testStatement(400, $link, 'SHOW TABLE STATUS', array(), array(1), false, false);
                    191:        testStatement(420, $link, 'SHOW TABLE STATUS', array(), array(1), false, false);
                    192:        testStatement(440, $link, 'SHOW TABLES', array(), array(1), false, false);
                    193:        testStatement(460, $link, 'SHOW OPEN TABLES', array(), array(1), false, false);
                    194:        testStatement(460, $link, 'SHOW VARIABLES', array(), array(1), false, false);
                    195: 
                    196:        $field0 = new stdClass();
                    197:        $field0->name           = 'id';
                    198:        $field0->orgname        = 'id';
                    199:        $field0->table          = 'test';
                    200:        $field0->orgtable       = 'test';
                    201:        $field0->def            = '';
                    202:        $field0->max_length     = 0;
                    203:        $field0->length         = 11;
                    204:        $field0->charsetnr      = 'ignore';
                    205:        $field0->flags          = 'ignore';
                    206:        $field0->type           = MYSQLI_TYPE_LONG;
                    207:        $field0->decimals       = 0;
                    208:        $meta_lib = array(
                    209:                'num_fields'            => 1,
                    210:                'fetch_field'           => $field0,
                    211:                'fetch_field_direct0'   => $field0,
                    212:                'fetch_field_direct1'   => false,
                    213:                'fetch_fields'          => 1,
                    214:                'field_count'           => 1,
                    215:                'field_seek-1'          => false,
                    216:                'field_seek0'           => true,
                    217:                'field_tell'            => 0,
                    218:        );
                    219:        $meta_mysqlnd = $meta_lib;
                    220:        testStatement(480, $link, 'SELECT id FROM test', $meta_lib, $meta_mysqlnd, true, true);
                    221: 
                    222:        testStatement(500, $link, 'CHECKSUM TABLE test', array(), array(1), false, false);
                    223: 
                    224:        mysqli_close($link);
                    225:        print "done!";
                    226: ?>
                    227: --CLEAN--
                    228: <?php
                    229:        require_once("clean_table.inc");
                    230: ?>
                    231: --EXPECTF--
                    232: done!

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