Annotation of embedaddon/php/ext/mysql/tests/mysql_fetch_field.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: mysql_fetch_field()
                      3: --SKIPIF--
                      4: <?php
                      5: require_once('skipif.inc');
                      6: require_once('skipifconnectfailure.inc');
                      7: ?>
                      8: --FILE--
                      9: <?php
                     10:        include "connect.inc";
                     11: 
                     12:        $tmp    = NULL;
                     13:        $link   = NULL;
                     14: 
                     15:        // Note: no SQL type tests, internally the same function gets used as for mysql_fetch_array() which does a lot of SQL type test
                     16:        if (!is_null($tmp = @mysql_fetch_field()))
                     17:                printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
                     18: 
                     19:        if (NULL !== ($tmp = @mysql_fetch_field($link)))
                     20:                printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
                     21: 
                     22:        require('table.inc');
                     23: 
                     24:        $version = mysql_get_server_info($link);
                     25:        if (!preg_match('@(\d+)\.(\d+)\.(\d+)@ism', $version, $matches))
                     26:                printf("[003] Cannot get server version\n");
                     27:        $version = ($matches[1] * 100) + ($matches[2] * 10) + $matches[3];
                     28: 
                     29:        if (!$res = mysql_query("SELECT id AS ID, label FROM test AS TEST ORDER BY id LIMIT 1", $link)) {
                     30:                printf("[004] [%d] %s\n", mysql_errno($link), mysql_error($link));
                     31:        }
                     32: 
                     33:        while ($tmp = mysql_fetch_field($res))
                     34:                var_dump($tmp);
                     35:        var_dump($tmp);
                     36: 
                     37:        mysql_free_result($res);
                     38: 
                     39:        if (!$res = mysql_query("SELECT id AS ID, label FROM test AS TEST ORDER BY id LIMIT 1", $link)) {
                     40:                printf("[005] [%d] %s\n", mysql_errno($link), mysql_error($link));
                     41:        }
                     42:        if (false !== ($tmp = mysql_fetch_field($res, PHP_INT_MAX - 1)))
                     43:                printf("[006] Expecting boolean/false got %s/%s\n", gettype($tmp), var_export($tmp, true));
                     44: 
                     45:        mysql_free_result($res);
                     46: 
                     47:        if (false !== ($tmp = mysql_fetch_field($res)))
                     48:                printf("[007] Expecting boolean/false, got %s/%s\n", gettype($tmp), var_export($tmp, true));
                     49: 
                     50:        $types = array(
                     51:                'BIT'               => array(1, 'int'),
                     52:                'TINYINT'           => array(1, 'int'),
                     53:                'BOOL'              => array('true', 'int'),
                     54:                'BOOL'              => array(1, 'int'),
                     55:                'SMALLINT'          => array(32767, 'int'),
                     56:                'MEDIUMINT'         => array(8388607, 'int'),
                     57:                'INT'               => array(100, 'int'),
                     58:                'BIGINT'            => array(100, 'int'),
                     59:                'FLOAT'             => array(100, 'real'),
                     60:                'DOUBLE'            => array(100, 'real'),
                     61:                'DECIMAL'           => array(100, 'real'),
                     62:                'DATE'              => array(@date('Y-m-d'), 'date'),
                     63:                'DATETIME'          => array(@date('Y-m-d H:i:s'), 'datetime'),
                     64:                'TIMESTAMP'         => array(@date('Y-m-d H:i:s'), 'timestamp'),
                     65:                'TIME'              => array(@date('H:i:s'), 'time'),
                     66:                'YEAR'              => array(@date('Y'), 'year'),
                     67:                'CHAR(1)'           => array('a', 'string'),
                     68:                'VARCHAR(1)'        => array('a', 'string'),
                     69:                'BINARY(1)'         => array('a', 'string'),
                     70:                'VARBINARY(1)'      => array('a', 'string'),
                     71:                'TINYBLOB'          => array('a', 'blob'),
                     72:                'TINYTEXT'          => array('a', 'blob'),
                     73:                'BLOB'              => array('a', 'blob'),
                     74:                'TEXT'              => array('a', 'blob'),
                     75:                'MEDIUMBLOB'        => array('a', 'blob'),
                     76:                'MEDIUMTEXT'        => array('a', 'blob'),
                     77:                'LONGBLOB'          => array('a', 'blob'),
                     78:                'LONGTEXT'          => array('a', 'blob'),
                     79:                'ENUM("a", "b")'    => array('a', 'string'), /* !!! */
                     80:                'SET("a", "b")'     => array('a', 'string'), /* !!! */
                     81:        );
                     82: 
                     83:        foreach ($types as $type_name => $type_desc) {
                     84:                if (!mysql_query("DROP TABLE IF EXISTS test", $link))
                     85:                        printf("[008/%s] [%d] %s\n", $type_name, mysql_errno($link), mysql_error($link));
                     86:                if (!mysql_query(sprintf("CREATE TABLE test(id INT, label %s) ENGINE = %s", $type_name, $engine), $link)) {
                     87:                        // server and/or engine might not support the data type
                     88:                        continue;
                     89:                }
                     90: 
                     91:                if (is_string($type_desc[0]))
                     92:                        $insert = sprintf("INSERT INTO test(id, label) VALUES (1, '%s')", $type_desc[0]);
                     93:                else
                     94:                        $insert = sprintf("INSERT INTO test(id, label) VALUES (1, %s)", $type_desc[0]);
                     95: 
                     96:                if (!mysql_query($insert, $link)) {
                     97:                        if (1366 == mysql_errno($link)) {
                     98:                                /* Strict SQL mode - 1366, Incorrect integer value: 'true' for column 'label' at row 1 */
                     99:                                continue;
                    100:                        }
                    101:                        printf("[009/%s] [%d] %s\n", $type_name, mysql_errno($link), mysql_error($link));
                    102:                        continue;
                    103:                }
                    104:                if (!$res = mysql_query("SELECT id, label FROM test", $link)) {
                    105:                        printf("[010/%s] [%d] %s\n", $type_name, mysql_errno($link), mysql_error($link));
                    106:                        continue;
                    107:                }
                    108:                if (!$tmp = mysql_fetch_field($res, 1)) {
                    109:                        printf("[011/%s] [%d] %s\n", $type_name, mysql_errno($link), mysql_error($link));
                    110:                }
                    111: 
                    112:                if ($type_desc[1] != $tmp->type) {
                    113:                        printf("[012/%s] Expecting type '%s' got '%s'\n", $type_name, $type_desc[1], $tmp->type);
                    114:                }
                    115:                mysql_free_result($res);
                    116:        }
                    117: 
                    118:        if (!mysql_query("DROP TABLE IF EXISTS test", $link))
                    119:                printf("[013] [%d] %s\n", mysql_errno($link), mysql_error($link));
                    120: 
                    121:        if (!mysql_query("CREATE TABLE test(id INT DEFAULT 1)"))
                    122:                printf("[014] [%d] %s\n", mysql_errno($link), mysql_error($link));
                    123: 
                    124:        if (!mysql_query("INSERT INTO test(id) VALUES (2)"))
                    125:                printf("[015] [%d] %s\n", mysql_errno($link), mysql_error($link));
                    126: 
                    127:        if (!$res = mysql_query("SELECT id FROM test", $link)) {
                    128:                printf("[016] [%d] %s\n", mysql_errno($link), mysql_error($link));
                    129:        }
                    130: 
                    131:        var_dump(mysql_fetch_field($res));
                    132:        mysql_free_result($res);
                    133: 
                    134:        if (!$res = mysql_query("SELECT id FROM test", $link)) {
                    135:                printf("[017] [%d] %s\n", mysql_errno($link), mysql_error($link));
                    136:        }
                    137:        $res = mysql_list_fields($db, 'test');
                    138:        $found = false;
                    139:        while ($tmp = mysql_fetch_field($res)) {
                    140:                if ($tmp->name == 'id') {
                    141:                        printf("Fetch field from mysql_list_fields result set.\n");
                    142:                        $found = true;
                    143:                        var_dump($tmp);
                    144:                }
                    145:        }
                    146:        if (!$found)
                    147:                printf("[018] mysqli_list_fields result set processing has failed.\n");
                    148: 
                    149:        mysql_free_result($res);
                    150: 
                    151:        mysql_close($link);
                    152:        print "done!";
                    153: ?>
                    154: --CLEAN--
                    155: <?php
                    156: require_once("clean_table.inc");
                    157: ?>
                    158: --EXPECTF--
                    159: object(stdClass)#%d (13) {
                    160:   [%u|b%"name"]=>
                    161:   %unicode|string%(2) "ID"
                    162:   [%u|b%"table"]=>
                    163:   %unicode|string%(4) "TEST"
                    164:   [%u|b%"def"]=>
                    165:   %unicode|string%(0) ""
                    166:   [%u|b%"max_length"]=>
                    167:   int(1)
                    168:   [%u|b%"not_null"]=>
                    169:   int(1)
                    170:   [%u|b%"primary_key"]=>
                    171:   int(1)
                    172:   [%u|b%"multiple_key"]=>
                    173:   int(0)
                    174:   [%u|b%"unique_key"]=>
                    175:   int(0)
                    176:   [%u|b%"numeric"]=>
                    177:   int(1)
                    178:   [%u|b%"blob"]=>
                    179:   int(0)
                    180:   [%u|b%"type"]=>
                    181:   %unicode|string%(3) "int"
                    182:   [%u|b%"unsigned"]=>
                    183:   int(0)
                    184:   [%u|b%"zerofill"]=>
                    185:   int(0)
                    186: }
                    187: object(stdClass)#%d (13) {
                    188:   [%u|b%"name"]=>
                    189:   %unicode|string%(5) "label"
                    190:   [%u|b%"table"]=>
                    191:   %unicode|string%(4) "TEST"
                    192:   [%u|b%"def"]=>
                    193:   %unicode|string%(0) ""
                    194:   [%u|b%"max_length"]=>
                    195:   int(1)
                    196:   [%u|b%"not_null"]=>
                    197:   int(0)
                    198:   [%u|b%"primary_key"]=>
                    199:   int(0)
                    200:   [%u|b%"multiple_key"]=>
                    201:   int(0)
                    202:   [%u|b%"unique_key"]=>
                    203:   int(0)
                    204:   [%u|b%"numeric"]=>
                    205:   int(0)
                    206:   [%u|b%"blob"]=>
                    207:   int(0)
                    208:   [%u|b%"type"]=>
                    209:   %unicode|string%(6) "string"
                    210:   [%u|b%"unsigned"]=>
                    211:   int(0)
                    212:   [%u|b%"zerofill"]=>
                    213:   int(0)
                    214: }
                    215: bool(false)
                    216: 
                    217: Warning: mysql_fetch_field(): Bad field offset in %s on line %d
                    218: 
                    219: Warning: mysql_fetch_field(): %d is not a valid MySQL result resource in %s on line %d
                    220: object(stdClass)#%d (13) {
                    221:   [%u|b%"name"]=>
                    222:   %unicode|string%(2) "id"
                    223:   [%u|b%"table"]=>
                    224:   %unicode|string%(4) "test"
                    225:   [%u|b%"def"]=>
                    226:   %unicode|string%(0) ""
                    227:   [%u|b%"max_length"]=>
                    228:   int(1)
                    229:   [%u|b%"not_null"]=>
                    230:   int(0)
                    231:   [%u|b%"primary_key"]=>
                    232:   int(0)
                    233:   [%u|b%"multiple_key"]=>
                    234:   int(0)
                    235:   [%u|b%"unique_key"]=>
                    236:   int(0)
                    237:   [%u|b%"numeric"]=>
                    238:   int(1)
                    239:   [%u|b%"blob"]=>
                    240:   int(0)
                    241:   [%u|b%"type"]=>
                    242:   %unicode|string%(3) "int"
                    243:   [%u|b%"unsigned"]=>
                    244:   int(0)
                    245:   [%u|b%"zerofill"]=>
                    246:   int(0)
                    247: }
                    248: Fetch field from mysql_list_fields result set.
                    249: object(stdClass)#%d (13) {
                    250:   [%u|b%"name"]=>
                    251:   %unicode|string%(2) "id"
                    252:   [%u|b%"table"]=>
                    253:   %unicode|string%(4) "test"
                    254:   [%u|b%"def"]=>
                    255:   %unicode|string%(1) "1"
                    256:   [%u|b%"max_length"]=>
                    257:   int(0)
                    258:   [%u|b%"not_null"]=>
                    259:   int(0)
                    260:   [%u|b%"primary_key"]=>
                    261:   int(0)
                    262:   [%u|b%"multiple_key"]=>
                    263:   int(0)
                    264:   [%u|b%"unique_key"]=>
                    265:   int(0)
                    266:   [%u|b%"numeric"]=>
                    267:   int(1)
                    268:   [%u|b%"blob"]=>
                    269:   int(0)
                    270:   [%u|b%"type"]=>
                    271:   %unicode|string%(3) "int"
                    272:   [%u|b%"unsigned"]=>
                    273:   int(0)
                    274:   [%u|b%"zerofill"]=>
                    275:   int(0)
                    276: }
                    277: done!

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