Annotation of embedaddon/php/ext/mysqli/tests/mysqli_stmt_attr_set.phpt, revision 1.1
1.1 ! misho 1: --TEST--
! 2: mysqli_stmt_attr_set() - mysqlnd does not check for invalid codes
! 3: --SKIPIF--
! 4: <?php
! 5: require_once('skipif.inc');
! 6: require_once('skipifemb.inc');
! 7: require_once('skipifconnectfailure.inc');
! 8: ?>
! 9: --FILE--
! 10: <?php
! 11: require_once("connect.inc");
! 12:
! 13: $tmp = NULL;
! 14: $link = NULL;
! 15:
! 16: if (!is_null($tmp = @mysqli_stmt_attr_set()))
! 17: printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
! 18:
! 19: if (!is_null($tmp = @mysqli_stmt_attr_set($link)))
! 20: printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
! 21:
! 22: if (!is_null($tmp = @mysqli_stmt_attr_set($link, $link)))
! 23: printf("[003] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
! 24:
! 25: if (!is_null($tmp = @mysqli_stmt_attr_set($link, $link, $link)))
! 26: printf("[004] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
! 27:
! 28: require('table.inc');
! 29:
! 30: $valid_attr = array(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
! 31: if ((mysqli_get_client_version() > 50003) || $IS_MYSQLND) {
! 32: $valid_attr[] = MYSQLI_STMT_ATTR_CURSOR_TYPE;
! 33: $valid_attr[] = MYSQLI_CURSOR_TYPE_NO_CURSOR;
! 34: $valid_attr[] = MYSQLI_CURSOR_TYPE_READ_ONLY;
! 35: $valid_attr[] = MYSQLI_CURSOR_TYPE_FOR_UPDATE;
! 36: $valid_attr[] = MYSQLI_CURSOR_TYPE_SCROLLABLE;
! 37: }
! 38:
! 39: if ((mysqli_get_client_version() > 50007) || $IS_MYSQLND)
! 40: $valid_attr[] = MYSQLI_STMT_ATTR_PREFETCH_ROWS;
! 41:
! 42:
! 43: $stmt = mysqli_stmt_init($link);
! 44: if (!is_null($tmp = @mysqli_stmt_attr_set($stmt, 0, 0)))
! 45: printf("[005] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
! 46:
! 47: $stmt->prepare("SELECT * FROM test");
! 48:
! 49: mt_srand(microtime(true));
! 50:
! 51: for ($i = -100; $i < 1000; $i++) {
! 52: if (in_array($i, $valid_attr))
! 53: continue;
! 54: $invalid_attr = $i;
! 55: if (false !== ($tmp = @mysqli_stmt_attr_set($stmt, $invalid_attr, 0))) {
! 56: printf("[006a] Expecting boolean/false for attribute %d, got %s/%s\n", $invalid_attr, gettype($tmp), $tmp);
! 57: }
! 58: }
! 59:
! 60: for ($i = 0; $i < 2; $i++) {
! 61: do {
! 62: $invalid_attr = mt_rand(-1 * (min(4294967296, PHP_INT_MAX) + 1), min(4294967296, PHP_INT_MAX));
! 63: } while (in_array($invalid_attr, $valid_attr));
! 64: if (false !== ($tmp = @mysqli_stmt_attr_set($stmt, $invalid_attr, 0))) {
! 65: printf("[006b] Expecting boolean/false for attribute %d, got %s/%s\n", $invalid_attr, gettype($tmp), $tmp);
! 66: }
! 67: }
! 68: $stmt->close();
! 69:
! 70: //
! 71: // MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH
! 72: //
! 73:
! 74:
! 75: // expecting max_length not to be set and be 0 in all cases
! 76: $stmt = mysqli_stmt_init($link);
! 77: $stmt->prepare("SELECT label FROM test");
! 78: $stmt->execute();
! 79: $stmt->store_result();
! 80: $res = $stmt->result_metadata();
! 81: $fields = $res->fetch_fields();
! 82: $max_lengths = array();
! 83: foreach ($fields as $k => $meta) {
! 84: $max_lengths[$meta->name] = $meta->max_length;
! 85: if ($meta->max_length !== 0)
! 86: printf("[007] max_length should be not set (= 0), got %s for field %s\n", $meta->max_length, $meta->name);
! 87: }
! 88: $res->close();
! 89: $stmt->close();
! 90:
! 91: // expecting max_length to _be_ set
! 92: $stmt = mysqli_stmt_init($link);
! 93: $stmt->prepare("SELECT label FROM test");
! 94: $stmt->attr_set(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH, 1);
! 95: $res = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
! 96: if ($res !== 1)
! 97: printf("[007.1] max_length should be 1, got %s\n", $res);
! 98: $stmt->execute();
! 99: $stmt->store_result();
! 100: $res = $stmt->result_metadata();
! 101: $fields = $res->fetch_fields();
! 102: $max_lengths = array();
! 103: foreach ($fields as $k => $meta) {
! 104: $max_lengths[$meta->name] = $meta->max_length;
! 105: if ($meta->max_length === 0)
! 106: printf("[008] max_length should be set (!= 0), got %s for field %s\n", $meta->max_length, $meta->name);
! 107: }
! 108: $res->close();
! 109: $stmt->close();
! 110:
! 111: // expecting max_length not to be set
! 112: $stmt = mysqli_stmt_init($link);
! 113: $stmt->prepare("SELECT label FROM test");
! 114: $stmt->attr_set(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH, 0);
! 115: $res = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
! 116: if ($res !== 0)
! 117: printf("[008.1] max_length should be 0, got %s\n", $res);
! 118: $stmt->execute();
! 119: $stmt->store_result();
! 120: $res = $stmt->result_metadata();
! 121: $fields = $res->fetch_fields();
! 122: $max_lengths = array();
! 123: foreach ($fields as $k => $meta) {
! 124: $max_lengths[$meta->name] = $meta->max_length;
! 125: if ($meta->max_length !== 0)
! 126: printf("[009] max_length should not be set (= 0), got %s for field %s\n", $meta->max_length, $meta->name);
! 127: }
! 128: $res->close();
! 129: $stmt->close();
! 130:
! 131: //
! 132: // Cursors
! 133: //
! 134:
! 135: if (mysqli_get_client_version() > 50003) {
! 136:
! 137: $cursor_types = array(
! 138: MYSQLI_CURSOR_TYPE_NO_CURSOR,
! 139: MYSQLI_CURSOR_TYPE_READ_ONLY,
! 140: MYSQLI_CURSOR_TYPE_FOR_UPDATE,
! 141: MYSQLI_CURSOR_TYPE_SCROLLABLE
! 142: );
! 143: do {
! 144: $invalid_cursor_type = mt_rand(-1000, 1000);
! 145: } while (in_array($invalid_cursor_type, $cursor_types));
! 146:
! 147: $stmt = mysqli_stmt_init($link);
! 148: $stmt->prepare("SELECT id, label FROM test");
! 149:
! 150: if (false !== ($tmp = @$stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, $invalid_cursor_type)))
! 151: printf("[010] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
! 152:
! 153: if (false !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_FOR_UPDATE)))
! 154: printf("[011] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
! 155:
! 156: if (false !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_SCROLLABLE)))
! 157: printf("[012] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
! 158:
! 159: if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_NO_CURSOR)))
! 160: printf("[013] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
! 161:
! 162: if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY)))
! 163: printf("[014] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
! 164:
! 165: $stmt->close();
! 166:
! 167: $stmt = mysqli_stmt_init($link);
! 168: $stmt->prepare("SELECT id, label FROM test");
! 169: $stmt->execute();
! 170: $id = $label = NULL;
! 171: $stmt->bind_result($id, $label);
! 172: $results = array();
! 173: while ($stmt->fetch())
! 174: $results[$id] = $label;
! 175: $stmt->close();
! 176: if (empty($results))
! 177: printf("[015] Results should not be empty, subsequent tests will probably fail!\n");
! 178:
! 179: $stmt = mysqli_stmt_init($link);
! 180: $stmt->prepare("SELECT id, label FROM test");
! 181: if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_NO_CURSOR)))
! 182: printf("[016] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
! 183: $stmt->execute();
! 184: $id = $label = NULL;
! 185: $stmt->bind_result($id, $label);
! 186: $results2 = array();
! 187: while ($stmt->fetch())
! 188: $results2[$id] = $label;
! 189: $stmt->close();
! 190: if ($results != $results2) {
! 191: printf("[017] Results should not differ. Dumping both result sets.\n");
! 192: var_dump($results);
! 193: var_dump($results2);
! 194: }
! 195:
! 196: $stmt = mysqli_stmt_init($link);
! 197: $stmt->prepare("SELECT id, label FROM test");
! 198: if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY)))
! 199: printf("[018] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
! 200: $stmt->execute();
! 201: $id = $label = NULL;
! 202: $stmt->bind_result($id, $label);
! 203: $results2 = array();
! 204: while ($stmt->fetch())
! 205: $results2[$id] = $label;
! 206: $stmt->close();
! 207: if ($results != $results2) {
! 208: printf("[019] Results should not differ. Dumping both result sets.\n");
! 209: var_dump($results);
! 210: var_dump($results2);
! 211: }
! 212:
! 213: }
! 214:
! 215:
! 216: //
! 217: // MYSQLI_STMT_ATTR_PREFETCH_ROWS
! 218: //
! 219:
! 220: if (mysqli_get_client_version() > 50007) {
! 221:
! 222: $stmt = mysqli_stmt_init($link);
! 223: $stmt->prepare("SELECT id, label FROM test");
! 224: if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, 1)))
! 225: printf("[020] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
! 226: $stmt->execute();
! 227: $id = $label = NULL;
! 228: $stmt->bind_result($id, $label);
! 229: $results = array();
! 230: while ($stmt->fetch())
! 231: $results[$id] = $label;
! 232: $stmt->close();
! 233: if (empty($results))
! 234: printf("[021] Results should not be empty, subsequent tests will probably fail!\n");
! 235:
! 236: /* prefetch is not supported
! 237: $stmt = mysqli_stmt_init($link);
! 238: $stmt->prepare("SELECT label FROM test");
! 239: if (false !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, -1)))
! 240: printf("[022] Expecting boolean/false, got %s/%s\n", gettype($tmp), $tmp);
! 241: $stmt->close();
! 242:
! 243: $stmt = mysqli_stmt_init($link);
! 244: $stmt->prepare("SELECT label FROM test");
! 245: if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, PHP_INT_MAX)))
! 246: printf("[023] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
! 247: $stmt->close();
! 248:
! 249: $stmt = mysqli_stmt_init($link);
! 250: $stmt->prepare("SELECT id, label FROM test");
! 251: if (true !== ($tmp = $stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, 2)))
! 252: printf("[024] Expecting boolean/true, got %s/%s\n", gettype($tmp), $tmp);
! 253: $stmt->execute();
! 254: $id = $label = NULL;
! 255: $stmt->bind_result($id, $label);
! 256: $results2 = array();
! 257: while ($stmt->fetch())
! 258: $results2[$id] = $label;
! 259: $stmt->close();
! 260: if ($results != $results2) {
! 261: printf("[025] Results should not differ. Dumping both result sets.\n");
! 262: var_dump($results);
! 263: var_dump($results2);
! 264: }
! 265: */
! 266:
! 267: }
! 268:
! 269: mysqli_close($link);
! 270: print "done!";
! 271: ?>
! 272: --CLEAN--
! 273: <?php
! 274: require_once("clean_table.inc");
! 275: ?>
! 276: --EXPECTF--
! 277: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>