Annotation of embedaddon/php/ext/mysqli/tests/mysqli_stmt_get_result_geom.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: mysqli_stmt_get_result - geometry / spatial types
3: --SKIPIF--
4: <?php
5: require_once('skipif.inc');
6: require_once('skipifemb.inc');
7: require_once('skipifconnectfailure.inc');
8:
9: if (!function_exists('mysqli_stmt_get_result'))
10: die("skip mysqli_stmt_get_result() not available");
11:
12: if (!defined("MYSQLI_TYPE_GEOMETRY"))
13: die("skip MYSQLI_TYPE_GEOMETRY not defined");
14: ?>
15: --FILE--
16: <?php
17: require('connect.inc');
18: if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
19: printf("[001] [%d] %s\n", mysqli_connect_errno(), mysqli_connect_error());
20:
21: function func_mysqli_stmt_get_result_geom($link, $engine, $sql_type, $bind_value, $offset) {
22:
23: if (!mysqli_query($link, "DROP TABLE IF EXISTS test")) {
24: printf("[%04d] [%d] %s\n", $offset, mysqli_errno($link), mysqli_error($link));
25: return false;
26: }
27:
28: if (!mysqli_query($link, sprintf("CREATE TABLE test(id INT, label %s, PRIMARY KEY(id)) ENGINE = %s", $sql_type, $engine))) {
29: // don't bail - column type might not be supported by the server, ignore this
30: return false;
31: }
32:
33: for ($id = 1; $id < 4; $id++) {
34: $sql = sprintf("INSERT INTO test(id, label) VALUES (%d, %s)", $id, $bind_value);
35: if (!mysqli_query($link, $sql)) {
36: printf("[%04d] [%d] %s\n", $offset + 2 + $id, mysqli_errno($link), mysqli_error($link));
37: }
38: }
39:
40: if (!$stmt = mysqli_stmt_init($link)) {
41: printf("[%04d] [%d] %s\n", $offset + 6, mysqli_errno($link), mysqli_error($link));
42: return false;
43: }
44:
45: if (!mysqli_stmt_prepare($stmt, "SELECT id, label FROM test")) {
46: printf("[%04d] [%d] %s\n", $offset + 7, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
47: mysqli_stmt_close($stmt);
48: return false;
49: }
50:
51: if (!mysqli_stmt_execute($stmt)) {
52: printf("[%04d] [%d] %s\n", $offset + 8, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
53: mysqli_stmt_close($stmt);
54: return false;
55: }
56: if (!$res = mysqli_stmt_get_result($stmt)) {
57: printf("[%04d] [%d] %s\n", $offset + 9, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt));
58: mysqli_stmt_close($stmt);
59: return false;
60: }
61:
62: $result = mysqli_stmt_result_metadata($stmt);
63: $fields = mysqli_fetch_fields($result);
64: if ($fields[1]->type != MYSQLI_TYPE_GEOMETRY) {
65: printf("[%04d] [%d] %s wrong type %d\n", $offset + 10, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt), $fields[1]->type);
66: }
67:
68: $num = 0;
69: while ($row = mysqli_fetch_assoc($res)) {
70: $bind_res = &$row['label'];
71:
72: if (!$stmt2 = mysqli_stmt_init($link)) {
73: printf("[%04d] [%d] %s\n", $offset + 11, mysqli_errno($link), mysqli_error($link));
74: return false;
75: }
76:
77: if (!mysqli_stmt_prepare($stmt2, "INSERT INTO test(id, label) VALUES (?, ?)")) {
78: printf("[%04d] [%d] %s\n", $offset + 12, mysqli_stmt_errno($stmt2), mysqli_stmt_error($stmt2));
79: return false;
80: }
81:
82: $id = $row['id'] + 10;
83: if (!mysqli_stmt_bind_param($stmt2, "is", $id, $bind_res)) {
84: printf("[%04d] [%d] %s\n", $offset + 13, mysqli_stmt_errno($stmt2), mysqli_stmt_error($stmt2));
85: return false;
86: }
87:
88: if (!mysqli_stmt_execute($stmt2)) {
89: printf("[%04d] [%d] %s\n", $offset + 14, mysqli_stmt_errno($stmt2), mysqli_stmt_error($stmt2));
90: return false;
91: }
92: mysqli_stmt_close($stmt2);
93:
94: if (!$res_normal = mysqli_query($link, sprintf("SELECT id, label FROM test WHERE id = %d",
95: $row['id'] + 10))) {
96: printf("[%04d] [%d] %s\n", $offset + 15, mysqli_errno($link), mysqli_error($link));
97: return false;
98: }
99:
100: if (!$row_normal = mysqli_fetch_assoc($res_normal)) {
101: printf("[%04d] [%d] %s\n", $offset + 16, mysqli_errno($link), mysqli_error($link));
102: return false;
103: }
104:
105: if ($row_normal['label'] != $bind_res) {
106: printf("[%04d] PS and non-PS return different data.\n", $offset + 17);
107: return false;
108: }
109: mysqli_free_result($res_normal);
110: $num++;
111: }
112:
113: if ($num != 3) {
114: printf("[%04d] [%d] %s, expecting 3 results, got only %d results\n",
115: $offset + 18, mysqli_stmt_errno($stmt), mysqli_stmt_error($stmt), $num);
116: mysqli_free_result($res);
117: mysqli_stmt_close($stmt);
118: return false;
119: }
120: mysqli_free_result($res);
121: mysqli_stmt_close($stmt);
122:
123: return true;
124: }
125:
126: func_mysqli_stmt_get_result_geom($link, $engine, "GEOMETRY", "GeomFromText('POINT(2 2)')", 20);
127: func_mysqli_stmt_get_result_geom($link, $engine, "POINT", "GeomFromText('POINT(1 1)')", 40);
128: func_mysqli_stmt_get_result_geom($link, $engine, "LINESTRING", "GeomFromText('LINESTRING(0 0,1 1,2 2)')", 60);
129: func_mysqli_stmt_get_result_geom($link, $engine, "POLYGON", "GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))')", 80);
130: func_mysqli_stmt_get_result_geom($link, $engine, "MULTIPOINT", "GeomFromText('MULTIPOINT(1 1, 2 2)')", 100);
131: func_mysqli_stmt_get_result_geom($link, $engine, "MULTILINESTRING", "GeomFromText('MULTILINESTRING((0 0,1 1,2 2),(0 0,1 1,3 3))')", 120);
132: func_mysqli_stmt_get_result_geom($link, $engine, "MULTIPOLYGON", "GeomFromText('MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5)),((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5)))')", 140);
133: func_mysqli_stmt_get_result_geom($link, $engine, "GEOMETRYCOLLECTION", "GeomFromText('GEOMETRYCOLLECTION(POINT(1 1),LINESTRING(0 0,1 1,2 2,3 3,4 4))')", 160);
134:
135: mysqli_close($link);
136: print "done!";
137: ?>
138: --CLEAN--
139: <?php
140: require_once("clean_table.inc");
141: ?>
142: --EXPECTF--
143: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>