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