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>