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>