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

1.1       misho       1: --TEST--
                      2: mysqli_fetch_field() - data types/field->type
                      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('table.inc');
                     12: 
                     13:        function mysqli_field_datatypes($link, $sql_type, $php_value, $php_type, $datatypes, $default_charset="latin1") {
                     14:                if (!mysqli_query($link, "DROP TABLE IF EXISTS test")) {
                     15:                        printf("[001] %s, [%d] %s\n", $sql_type,
                     16:                                mysqli_errno($link), mysqli_error($link));
                     17:                        return false;
                     18:                }
                     19: 
                     20:                $create = sprintf("CREATE TABLE test(id %s) DEFAULT CHARSET %s", $sql_type, $default_charset);
                     21:                if (!mysqli_query($link, $create)) {
                     22:                        printf("[002] '%s' - '%s', [%d] %s\n", $sql_type, $create,
                     23:                                mysqli_errno($link), mysqli_error($link));
                     24:                        return false;
                     25:                }
                     26: 
                     27:                if (is_string($php_value))
                     28:                        $sql = sprintf("INSERT INTO test(id) VALUES ('%s')", $php_value);
                     29:                else
                     30:                        $sql = sprintf("INSERT INTO test(id) VALUES (%s)", $php_value);
                     31: 
                     32:                if (!mysqli_query($link, $sql)) {
                     33:                        printf("[003] '%s' - '%s' - '%s', [%d] %s\n", $sql_type, $create, $sql,
                     34:                                mysqli_errno($link), mysqli_error($link));
                     35:                        return false;
                     36:                }
                     37: 
                     38:                if (!$res = mysqli_query($link, 'SELECT id FROM test')) {
                     39:                        printf("[004] %s, [%d] %s\n", $sql_type,
                     40:                                mysqli_errno($link), mysqli_error($link));
                     41:                        return false;
                     42:                }
                     43: 
                     44:                if (!is_object($field = mysqli_fetch_field($res))) {
                     45:                        printf("[004] %s, expecting object got %s, [%d] %s\n", $sql_type,
                     46:                                gettype($field),
                     47:                                mysqli_errno($link), mysqli_error($link));
                     48:                        return false;
                     49:                }
                     50: 
                     51:                if ($field->type != $php_type) {
                     52:                        $code_name = 'unknown';
                     53:                        foreach ($datatypes as $k => $v) {
                     54:                                if ($k == $field->type) {
                     55:                                        $code_name = (is_array($v)) ? $v[0] : $v;
                     56:                                        break;
                     57:                                }
                     58:                        }
                     59:                        printf("[006] Expecting %d for %s got code %d for %s\n",
                     60:                                $php_type, $sql_type, $field->type, $code_name);
                     61:                        return false;
                     62:                }
                     63: 
                     64:                return true;
                     65:        }
                     66: 
                     67:        $datatypes = array(
                     68:                MYSQLI_TYPE_TINY => array('TINYINT', 5),
                     69:                MYSQLI_TYPE_SHORT => array('SMALLINT', 10),
                     70:                MYSQLI_TYPE_LONG => 'MYSQLI_TYPE_LONG - TODO add testing',
                     71:                MYSQLI_TYPE_FLOAT => array('FLOAT', '1.3'),
                     72:                MYSQLI_TYPE_DOUBLE => array('DOUBLE', '1.4'),
                     73:                MYSQLI_TYPE_TIMESTAMP => array('TIMESTAMP', '2007-08-20 18:34:00'),
                     74:                MYSQLI_TYPE_LONGLONG => array('BIGINT', 100),
                     75:                MYSQLI_TYPE_INT24       => array('MEDIUMINT', 10),
                     76:                MYSQLI_TYPE_DATE => array('DATE', '2007-08-20'),
                     77:                MYSQLI_TYPE_TIME => array('TIME', '18:41:38'),
                     78:                MYSQLI_TYPE_DATETIME => array('DATETIME', '2007-08-20 18:42:01'),
                     79:                MYSQLI_TYPE_YEAR => array('YEAR', '2007'),
                     80:                MYSQLI_TYPE_ENUM => array('ENUM("everything", "is", "just", "wonderful")', 'is'),
                     81:                // MYSQLI_TYPE_SET      => array('SET("I", "smash", "the")', 'I,smash,the'), - string
                     82:                // MYSQLI_TYPE_TINY_BLOB => array("TINYBLOB", "I got a tiny blog"), - blob
                     83:                // MYSQLI_TYPE_MEDIUM_BLOB => array("MEDIUMBLOB", "No blob for masses"), - blob
                     84:                // MYSQLI_TYPE_LONG_BLOB => array("LONGBLOB", "Small is beautiful?"), - blob
                     85:                MYSQLI_TYPE_BLOB => array("LONGBLOB", 'MySQL does not report proper type. Use Length to distinct BLOB types'),
                     86:                MYSQLI_TYPE_BLOB => array("MEDIUMBLOB", 'MySQL does not report proper type. Use Length to distinct BLOB types'),
                     87:                MYSQLI_TYPE_BLOB => array("TINYBLOB", 'MySQL does not report proper type. Use Length to distinct BLOB types'),
                     88:                MYSQLI_TYPE_BLOB => array("BLOB", 'silly'),
                     89:                MYSQLI_TYPE_VAR_STRING => array("VARCHAR(32768)", 'varchar'),
                     90:                MYSQLI_TYPE_STRING => 'MYSQLI_TYPE_STRING - TODO add testing',
                     91:                MYSQLI_TYPE_STRING => array('CHAR(1)', 'a'),
                     92:                MYSQLI_TYPE_STRING => array("SET('I', 'smash', 'the')", 'smash'),
                     93:                MYSQLI_TYPE_NULL => 'MYSQLI_TYPE_NULL - TODO add testing',
                     94:                MYSQLI_TYPE_NEWDATE => 'MYSQLI_TYPE_NEWDATE - TODO add testing',
                     95:                MYSQLI_TYPE_INTERVAL => 'MYSQLI_TYPE_INTERVAL - TODO add testing',
                     96:                MYSQLI_TYPE_GEOMETRY => 'MYSQLI_TYPE_GEOMETRY - TODO add testing',
                     97:        );
                     98: 
                     99:        if ($IS_MYSQLND) {
                    100:                $version = 50007 + 1;
                    101:        } else {
                    102:                $version = mysqli_get_client_version();
                    103:        }
                    104: 
                    105:        if ($version > 50002) {
                    106:                $datatypes[MYSQLI_TYPE_NEWDECIMAL] = array('DECIMAL', '1.1');
                    107:                $datatypes[MYSQLI_TYPE_BIT] = array('BIT', 0);
                    108:        } else {
                    109:                $datatypes[MYSQLI_TYPE_DECIMAL] = array('DECIMAL', '1.1');
                    110:        }
                    111: 
                    112:        foreach ($datatypes as $php_type => $datatype) {
                    113:                if (is_array($datatype))
                    114:                        mysqli_field_datatypes($link, $datatype[0], $datatype[1], $php_type, $datatypes);
                    115:        }
                    116: 
                    117:        mysqli_close($link);
                    118: 
                    119:        print "done!";
                    120: ?>
                    121: --CLEAN--
                    122: <?php
                    123:        require_once("clean_table.inc");
                    124: ?>
                    125: --EXPECTF--
                    126: done!

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