1
by brian
clean slate |
1 |
#!/usr/bin/perl
|
2 |
#
|
|
3 |
# Tests MySQL. Output is given to the stderr. Use
|
|
4 |
# diff to check the possible differencies.
|
|
5 |
#
|
|
6 |
||
7 |
use DBI; |
|
8 |
use Getopt::Long; |
|
9 |
||
10 |
$VER = "1.9"; |
|
11 |
$| = 1; |
|
12 |
||
13 |
$opt_db = "test"; |
|
14 |
$opt_user = $opt_password = $opt_without = ""; |
|
15 |
$opt_host = "localhost"; |
|
165.1.1
by Elliot Murphy
new port number from IANA |
16 |
$opt_port = "4427"; |
1
by brian
clean slate |
17 |
$opt_socket = "/tmp/mysql.sock"; |
18 |
$opt_help = 0; |
|
19 |
||
20 |
$NO_ERR = 0; # No error |
|
21 |
$EXP_ERR = 1; # Expect error |
|
22 |
$MAY_ERR = 2; # Maybe error |
|
23 |
$HS = 0; # Horizontal style of output |
|
24 |
$VS = 1; # Vertical style of output |
|
25 |
$VERBOSE = 0; # Print the results |
|
26 |
$SILENT = 1; # No output |
|
27 |
||
28 |
@test_packages = ("FUNC", "PROC", "SHOW"); |
|
29 |
||
30 |
####
|
|
31 |
#### main program
|
|
32 |
####
|
|
33 |
||
34 |
main(); |
|
35 |
||
36 |
sub main() |
|
37 |
{
|
|
38 |
GetOptions("help", "db=s", "port=i", "host=s", "password=s", "user=s", "socket=s", |
|
39 |
"without=s") || usage(); |
|
40 |
||
41 |
usage() if ($opt_help); |
|
42 |
||
43 |
$dbh = DBI->connect("DBI:mysql:$opt_db:$opt_host:port=$opt_port:mysql_socket=$opt_socket", $opt_user, $opt_password, { PrintError => 0 }) |
|
44 |
|| die $DBI::errstr; |
|
45 |
||
46 |
## QQ ######################################
|
|
47 |
||
48 |
$sth = $dbh->prepare("show felds from t2") |
|
49 |
|| die "Couldn't prepare query: $DBI::errstr\n"; |
|
50 |
if (!$sth->execute) |
|
51 |
{
|
|
52 |
print "Couldn't execute query: $DBI::errstr\n"; |
|
53 |
$sth->finish; |
|
54 |
die; |
|
55 |
}
|
|
56 |
while (($row = $sth->fetchrow_arrayref)) |
|
57 |
{
|
|
58 |
print "$row->[1]\n"; |
|
59 |
}
|
|
60 |
||
61 |
||
62 |
exit(0); |
|
63 |
||
64 |
## QQ ######################################
|
|
65 |
||
66 |
printf("####\n#### THIS IS mysql-test script RUNNING\n"); |
|
67 |
printf("#### mysql-test version $VER\n####\n"); |
|
68 |
||
69 |
test_mysql_functions() if (&chk_package($opt_without, $test_packages[0])); |
|
70 |
test_mysql_procedures() if (&chk_package($opt_without, $test_packages[1])); |
|
71 |
test_mysql_show() if (&chk_package($opt_without, $test_packages[2])); |
|
72 |
||
73 |
print "\n"; |
|
74 |
return; |
|
75 |
}
|
|
76 |
||
77 |
####
|
|
78 |
#### test show -command of MySQL
|
|
79 |
####
|
|
80 |
||
81 |
sub test_mysql_show |
|
82 |
{
|
|
83 |
my ($query, $i); |
|
84 |
||
85 |
$query = create_show_tables(); |
|
86 |
&exec_query(["drop table my_t"], $MAY_ERR, $SILENT); |
|
87 |
for ($i = 0; $query[$i]; $i++) |
|
88 |
{
|
|
89 |
&exec_query([$query[$i]], $NO_ERR, $VERBOSE, $HS); |
|
90 |
&exec_query(["show fields from my_t"], $NO_ERR, $VERBOSE, $HS); |
|
91 |
&exec_query(["show keys from my_t"], $NO_ERR, $VERBOSE, $HS); |
|
92 |
&exec_query(["drop table my_t"], $NO_ERR, $SILENT); |
|
93 |
}
|
|
94 |
}
|
|
95 |
||
96 |
sub create_show_tables |
|
97 |
{
|
|
98 |
my ($query, $i); |
|
99 |
||
100 |
$query[0] = <<EOF; |
|
101 |
create table my_t (i int, f float, s char(64), b blob, t text)
|
|
102 |
EOF
|
|
103 |
$query[1] = <<EOF; |
|
104 |
create table my_t (i int, f float, s char(64), b blob, t text, primary key (i))
|
|
105 |
EOF
|
|
106 |
$query[2] = <<EOF; |
|
107 |
create table my_t (i int, f float, s char(64), b blob, t text, unique (i), unique(s))
|
|
108 |
EOF
|
|
109 |
for ($i = 0; $query[$i]; $i++) { chop($query[$i]); } |
|
110 |
return $query; |
|
111 |
}
|
|
112 |
||
113 |
####
|
|
114 |
#### test procedures, currently only procedure analyze()
|
|
115 |
####
|
|
116 |
||
117 |
sub test_mysql_procedures |
|
118 |
{
|
|
119 |
test_analyze(); |
|
120 |
}
|
|
121 |
||
122 |
sub test_analyze |
|
123 |
{
|
|
124 |
my ($query, $i, $j); |
|
125 |
||
126 |
if ($opt_help) |
|
127 |
{
|
|
128 |
usage(); |
|
129 |
}
|
|
130 |
# invalid queries
|
|
131 |
&exec_query(["select * from mails procedure analyse(-1)"], |
|
132 |
$EXP_ERR, $VERBOSE, $HS); |
|
133 |
&exec_query(["select * from mails procedure analyse(10, -1)"], |
|
134 |
$EXP_ERR, $VERBOSE, $HS); |
|
135 |
&exec_query(["select * from mails procedure analyse(1, 2, 3)"], |
|
136 |
$EXP_ERR, $VERBOSE, $HS); |
|
137 |
&exec_query(["select * from mails procedure analyse(-10, 10)"], |
|
138 |
$EXP_ERR, $VERBOSE, $HS); |
|
139 |
&exec_query(["select * from mails procedure analyse('a', 'a')"], |
|
140 |
$EXP_ERR, $VERBOSE, $HS); |
|
141 |
# valid queries
|
|
142 |
# &exec_query(["select * from mails procedure analyse(10)"], 0, 0);
|
|
143 |
# &exec_query(["select * from mails procedure analyse(10, 10)"], 0, 0);
|
|
144 |
# &exec_query(["select hash from mails procedure analyse()"], 0, 0);
|
|
145 |
&exec_query(["use mysql_test"], $NO_ERR, $VERBOSE, $HS); |
|
146 |
# &exec_query(["select timestamp from w32_user procedure analyse(0)"], 0, 0);
|
|
147 |
$query = create_test_tables(); |
|
148 |
&exec_query(["drop table my_t"], $MAY_ERR, $SILENT); |
|
149 |
for ($i = 0; $query[$i][0]; $i++) |
|
150 |
{
|
|
151 |
&exec_query([$query[$i][0]], $NO_ERR, $SILENT); # create table |
|
152 |
for ($j = 1; $query[$i][$j]; $j++) |
|
153 |
{
|
|
154 |
&exec_query([$query[$i][$j]], $NO_ERR, $SILENT); # do inserts |
|
155 |
}
|
|
156 |
&exec_query(["select * from my_t procedure analyse(0,0)"], |
|
157 |
$NO_ERR, $VERBOSE, $HS); |
|
158 |
&exec_query(["select * from my_t procedure analyse()"], |
|
159 |
$NO_ERR, $VERBOSE, $HS); |
|
160 |
&exec_query(["drop table my_t"], $NO_ERR, $SILENT); |
|
161 |
}
|
|
162 |
}
|
|
163 |
||
164 |
####
|
|
165 |
#### if $opt is found as a part from the '--without=...' option string
|
|
166 |
#### return 0, else 1. if zero is returned, then that part of MySQL
|
|
167 |
#### won't be tested
|
|
168 |
####
|
|
169 |
||
170 |
sub chk_package |
|
171 |
{
|
|
172 |
my ($opt_str, $opt) = @_; |
|
173 |
||
174 |
$sub_opt_str = ''; |
|
175 |
for ($i = 0, $ptr = substr($opt_str, $i, 1); $ptr || $ptr eq '0'; |
|
176 |
$i++, $ptr = substr($opt_str, $i, 1)) |
|
177 |
{
|
|
178 |
$sub_opt_str .= $ptr; |
|
179 |
if ($sub_opt_str eq $opt) |
|
180 |
{
|
|
181 |
$next_chr = substr($opt_str, ($i + 1), 1); |
|
182 |
if ($next_chr eq ',' || (!$next_chr && $next_chr ne '0')) |
|
183 |
{
|
|
184 |
return 0; |
|
185 |
}
|
|
186 |
}
|
|
187 |
if ($ptr eq ',') |
|
188 |
{
|
|
189 |
# next word on the opt_str
|
|
190 |
$sub_opt_str = ''; |
|
191 |
}
|
|
192 |
}
|
|
193 |
return 1; |
|
194 |
}
|
|
195 |
||
196 |
####
|
|
197 |
#### Tests given function(s) with given value(s) $count rounds
|
|
198 |
#### If function doesn't have an arg, test it once and continue.
|
|
199 |
#### ulargs (number of unlimited args) is the number of arguments
|
|
200 |
#### to be placed in place of '.' . '.' means that any number
|
|
201 |
#### of the last argument type is possible to the function.
|
|
202 |
#### If force is given, never mind about errors
|
|
203 |
#### args: $func: list of functions to be tested
|
|
204 |
#### $value: list of values to be used with functions
|
|
205 |
#### $count: number of times one function should be tested
|
|
206 |
#### $ulargs: number of unlimited args to be used when possible
|
|
207 |
#### $table_info: information about the table to be used, contains:
|
|
208 |
#### table name, info about the fields in the table, for example:
|
|
209 |
#### [mysql_test1, "Zi", "Rd"], where mysql_test1 is the name of the
|
|
210 |
#### table, "Zi" tells, that the first field name is 'i' and it is
|
|
211 |
#### type 'Z' (integer), see test_mysql_functions, 'Rd' tells that
|
|
212 |
#### the second field name is 'd' and the type is 'R' (real number)
|
|
213 |
#### $force: if given, never mind about errors
|
|
214 |
#### $mix: if 0, use the same argument at a time in a
|
|
215 |
#### function that has two or more same type arguments
|
|
216 |
#### if 1, use different values
|
|
217 |
####
|
|
218 |
||
219 |
sub test_func() |
|
220 |
{
|
|
221 |
my ($func, $value, $count, $ulargs, $table_info, $force, $mix) = @_; |
|
222 |
my ($query, $i, $j, $k, $no_arg, $row, $ulimit, $tbinfo, $tbused, $arg); |
|
223 |
||
224 |
if (!$func->[0][0]) |
|
225 |
{
|
|
226 |
printf("No function found!\n"); |
|
227 |
if (!$force) { die; } |
|
228 |
}
|
|
229 |
||
230 |
for ($i = 0; $func->[$i][0]; $i++) |
|
231 |
{
|
|
232 |
$tbused = 0; |
|
233 |
$no_arg = 0; |
|
234 |
for ($j = 0; $j < $count && !$no_arg; $j++) |
|
235 |
{
|
|
236 |
if ($tbused || $no_arg) { next; } |
|
237 |
$query = "select $func->[$i][0]("; |
|
238 |
#search the values for the args
|
|
239 |
for ($k = 0; $k < length($func->[$i][1]) && !$no_arg; $k++) |
|
240 |
{
|
|
241 |
if ($mix) |
|
242 |
{
|
|
243 |
$arg = $j + 1 + $k; |
|
244 |
}
|
|
245 |
else
|
|
246 |
{
|
|
247 |
$arg = $j + 1; |
|
248 |
}
|
|
249 |
if (substr($func->[$i][1], $k, 1) eq 'E') |
|
250 |
{
|
|
251 |
$no_arg = 1; |
|
252 |
next; |
|
253 |
}
|
|
254 |
if ($k) { $query .= ','; } |
|
255 |
||
256 |
if (substr($func->[$i][1], $k, 1) eq 'S') |
|
257 |
{
|
|
258 |
$query .= &find_value(\@value, 'S', $arg); |
|
259 |
}
|
|
260 |
elsif (substr($func->[$i][1], $k, 1) eq 'N') |
|
261 |
{
|
|
262 |
$query .= &find_value(\@value, 'N', $arg); |
|
263 |
}
|
|
264 |
elsif (substr($func->[$i][1], $k, 1) eq 'Z') |
|
265 |
{
|
|
266 |
$query .= &find_value(\@value, 'Z', $arg); |
|
267 |
}
|
|
268 |
elsif ((substr($func->[$i][1], $k, 1) eq 'R')) |
|
269 |
{
|
|
270 |
$query .= &find_value(\@value, 'R', $arg); |
|
271 |
}
|
|
272 |
elsif (substr($func->[$i][1], $k, 1) eq 'T') |
|
273 |
{
|
|
274 |
$query .= &find_value(\@value, 'T', $arg); |
|
275 |
}
|
|
276 |
elsif (substr($func->[$i][1], $k, 1) eq 'D') |
|
277 |
{
|
|
278 |
$query .= &find_value(\@value, 'D', $arg); |
|
279 |
}
|
|
280 |
elsif (substr($func->[$i][1], $k, 1) eq 'B') |
|
281 |
{
|
|
282 |
$query .= &find_value(\@value, 'B', $arg); |
|
283 |
}
|
|
284 |
elsif (substr($func->[$i][1], $k, 1) eq 'C') |
|
285 |
{
|
|
286 |
$query .= &find_value(\@value, 'C', $arg); |
|
287 |
}
|
|
288 |
elsif (substr($func->[$i][1], $k, 1) eq 'F') |
|
289 |
{
|
|
290 |
$query .= &find_value(\@value, 'F', $arg); |
|
291 |
}
|
|
292 |
elsif (substr($func->[$i][1], $k, 1) eq '.') |
|
293 |
{
|
|
294 |
chop($query); |
|
295 |
for ($ulimit = 0; $ulimit < $ulargs; $ulimit++) |
|
296 |
{
|
|
297 |
$query .= ','; |
|
298 |
$query .= &find_value(\@value, |
|
299 |
substr($func->[$i][1], $k - 1, 1), |
|
300 |
$j + $ulimit + 2); |
|
301 |
}
|
|
302 |
}
|
|
303 |
elsif (substr($func->[$i][1], $k, 1) eq 'A') |
|
304 |
{
|
|
305 |
for ($tbinfo = 1; substr($table_info->[$tbinfo], 0, 1) ne |
|
306 |
substr($func->[$i][1], $k + 1, 1); $tbinfo++) |
|
307 |
{
|
|
308 |
if (!defined($table_info->[$tbinfo])) |
|
309 |
{
|
|
310 |
printf("Illegal function structure!\n"); |
|
311 |
printf("A table was needed, but no type specified!\n"); |
|
312 |
printf("Unready query was: $query\n"); |
|
313 |
if (!$force) { die; } |
|
314 |
else { next; } |
|
315 |
}
|
|
316 |
}
|
|
317 |
if ($k) { $query .= ","; } |
|
318 |
$query .= substr($table_info->[$tbinfo], 1, |
|
319 |
length($table_info->[$tbinfo]) - 1); |
|
320 |
$k++; |
|
321 |
$tbused = 1; |
|
322 |
}
|
|
323 |
else
|
|
324 |
{
|
|
325 |
printf("Not a valid type: \n"); |
|
326 |
printf(substr($func->[$i][1], $k, 1)); |
|
327 |
printf("\nAttempted to be used with unready query: \n"); |
|
328 |
printf("$query\n"); |
|
329 |
}
|
|
330 |
}
|
|
331 |
$query .= ")"; |
|
332 |
if ($tbused) |
|
333 |
{
|
|
334 |
$query .= " from "; |
|
335 |
$query .= $table_info->[0]; |
|
336 |
}
|
|
337 |
if (!($sth = $dbh->prepare($query))) |
|
338 |
{
|
|
339 |
printf("Couldn't prepare: $query\n"); |
|
340 |
if (!$force) { die; } |
|
341 |
}
|
|
342 |
if (!$sth->execute) |
|
343 |
{
|
|
344 |
printf("Execution failed: $DBI::errstr\n"); |
|
345 |
printf("Attempted query was:\n$query\n"); |
|
346 |
$sth->finish; |
|
347 |
if (!$force) { die; } |
|
348 |
}
|
|
349 |
else
|
|
350 |
{
|
|
351 |
printf("mysql> $query;\n"); |
|
352 |
display($sth, 1); |
|
353 |
printf("Query OK\n\n"); |
|
354 |
}
|
|
355 |
}
|
|
356 |
}
|
|
357 |
}
|
|
358 |
||
359 |
####
|
|
360 |
#### mk_str returns a string where the first arg is repeated second arg times
|
|
361 |
#### if repeat is 1, return the original str
|
|
362 |
####
|
|
363 |
||
364 |
sub mk_str() |
|
365 |
{
|
|
366 |
my ($str, $repeat) = @_; |
|
367 |
my ($res_str); |
|
368 |
||
369 |
if ($repeat <= 0) |
|
370 |
{
|
|
371 |
die "Invalid repeat times!\n"; |
|
372 |
}
|
|
373 |
||
374 |
for ($repeat--, $res_str = $str; $repeat > 0; $repeat--) |
|
375 |
{
|
|
376 |
$res_str .= $str; |
|
377 |
}
|
|
378 |
return $res_str; |
|
379 |
}
|
|
380 |
||
381 |
####
|
|
382 |
#### find_value: returns a value from list of values
|
|
383 |
#### args: $values: list of values
|
|
384 |
#### $type: type of argument (S = string, N = integer etc.)
|
|
385 |
#### $ordinal: the ordinal number of an argument in the list
|
|
386 |
####
|
|
387 |
||
388 |
sub find_value() |
|
389 |
{
|
|
390 |
my ($values, $type, $ordinal) = @_; |
|
391 |
my ($total, $i, $j, $tmp, $val); |
|
392 |
||
393 |
$total = -1; # The first one is the type |
|
394 |
||
395 |
for ($i = 0; $values[$i][0]; $i++) |
|
396 |
{
|
|
397 |
if ($values[$i][0] eq $type) |
|
398 |
{
|
|
399 |
$tmp = $values[$i]; |
|
400 |
foreach $val (@$tmp) { $total++; } |
|
401 |
for ( ;$total < $ordinal; ) |
|
402 |
{
|
|
403 |
$ordinal -= $total; |
|
404 |
}
|
|
405 |
return $values[$i][$ordinal]; |
|
406 |
}
|
|
407 |
}
|
|
408 |
printf("No type '$type' found in values\n"); |
|
409 |
die; |
|
410 |
}
|
|
411 |
||
412 |
####
|
|
413 |
#### exec_query: execute a query, print information if wanted and exit
|
|
414 |
#### args: $queries: list of queries to be executed
|
|
415 |
#### $expect_error: if 0, error is not expected. In this case if an
|
|
416 |
#### error occurs, inform about it and quit
|
|
417 |
#### if 1, error is expected. In this case if sql server
|
|
418 |
#### doesn't give an error message, inform about it
|
|
419 |
#### and quit
|
|
420 |
#### if 2, error may happen or not, don't care
|
|
421 |
#### $silent: if true, reduce output
|
|
422 |
#### $style: type of output, 0 == horizontal, 1 == vertical
|
|
423 |
####
|
|
424 |
||
425 |
sub exec_query() |
|
426 |
{
|
|
427 |
my ($queries, $expect_error, $silent, $style) = @_; |
|
428 |
my ($query); |
|
429 |
||
430 |
foreach $query (@$queries) |
|
431 |
{
|
|
432 |
if (!($sth = $dbh->prepare($query))) |
|
433 |
{
|
|
434 |
printf("Couldn't prepare: $query\n"); |
|
435 |
die; |
|
436 |
}
|
|
437 |
if (!$sth->execute) |
|
438 |
{
|
|
439 |
if ($expect_error == 1) |
|
440 |
{
|
|
441 |
printf("An invalid instruction was purposely made,\n"); |
|
442 |
printf("server failed succesfully:\n"); |
|
443 |
printf("$DBI::errstr\n"); |
|
444 |
printf("Everything OK, continuing...\n"); |
|
445 |
return; |
|
446 |
}
|
|
447 |
if ($expect_error != 2) |
|
448 |
{
|
|
449 |
printf("Execution failed: $DBI::errstr\n"); |
|
450 |
printf("Attempted query was:\n$query\n"); |
|
451 |
die; |
|
452 |
}
|
|
453 |
}
|
|
454 |
if ($expect_error == 1) |
|
455 |
{
|
|
456 |
printf("An invalid instruction was purposely made,\n"); |
|
457 |
printf("server didn't note, ALARM!\n"); |
|
458 |
printf("The query made was: $query\n"); |
|
459 |
printf("The output from the server:\n"); |
|
460 |
}
|
|
461 |
if ($expect_error == 2) { return; } |
|
462 |
if (!$silent) { printf("mysql> $query;\n"); } |
|
463 |
display($sth, $style); |
|
464 |
if (!$silent) { printf("Query OK\n\n"); } |
|
465 |
if ($expect_error) { die; } |
|
466 |
}
|
|
467 |
return; |
|
468 |
}
|
|
469 |
||
470 |
####
|
|
471 |
#### Display to stderr
|
|
472 |
#### Args: 1: ($sth) statememt handler
|
|
473 |
#### 2: ($style) 0 == horizontal style, 1 == vertical style
|
|
474 |
####
|
|
475 |
||
476 |
sub display() |
|
477 |
{
|
|
478 |
my ($sth, $style) = @_; |
|
479 |
my (@data, @max_length, $row, $nr_rows, $nr_cols, $i, $j, $tmp, $mxl); |
|
480 |
||
481 |
# Store the field names and values in @data.
|
|
482 |
# Store the max field lengths in @max_length
|
|
483 |
for ($i = 0; ($row = $sth->fetchrow_arrayref); $i++) |
|
484 |
{
|
|
485 |
if (!$i) |
|
486 |
{
|
|
487 |
$nr_cols = $#$row; |
|
488 |
for ($j = 0; $j <= $#$row; $j++) |
|
489 |
{
|
|
490 |
$data[$i][$j] = $sth->{NAME}->[$j]; |
|
491 |
$max_length[$j] = length($data[$i][$j]); |
|
492 |
}
|
|
493 |
$i++; |
|
494 |
}
|
|
495 |
for ($j = 0; $j <= $#$row; $j++) |
|
496 |
{
|
|
497 |
$data[$i][$j] = $row->[$j]; |
|
498 |
$max_length[$j] = $tmp if ($max_length[$j] < |
|
499 |
($tmp = length($data[$i][$j]))); |
|
500 |
}
|
|
501 |
}
|
|
502 |
if (!($nr_rows = $i)) |
|
503 |
{
|
|
504 |
return; |
|
505 |
}
|
|
506 |
# Display data
|
|
507 |
if ($style == 0) |
|
508 |
{
|
|
509 |
for ($i = 0; $i < $nr_rows; $i++) |
|
510 |
{
|
|
511 |
if (!$i) |
|
512 |
{
|
|
513 |
for ($j = 0; $j <= $nr_cols; $j++) |
|
514 |
{
|
|
515 |
print "+"; print "-" x ($max_length[$j] + 2); |
|
516 |
}
|
|
517 |
print "+\n"; |
|
518 |
}
|
|
519 |
print "|"; |
|
520 |
for ($j = 0; $j <= $nr_cols; $j++) |
|
521 |
{
|
|
522 |
print " "; |
|
523 |
if (defined($data[$i][$j])) |
|
524 |
{
|
|
525 |
print $data[$i][$j]; |
|
526 |
$tmp = length($data[$i][$j]); |
|
527 |
}
|
|
528 |
else
|
|
529 |
{
|
|
530 |
print "NULL"; |
|
531 |
$tmp = 4; |
|
532 |
}
|
|
533 |
print " " x ($max_length[$j] - $tmp); |
|
534 |
print " |"; |
|
535 |
}
|
|
536 |
print "\n"; |
|
537 |
if (!$i) |
|
538 |
{
|
|
539 |
for ($j = 0; $j <= $nr_cols; $j++) |
|
540 |
{
|
|
541 |
print "+"; print "-" x ($max_length[$j] + 2); |
|
542 |
}
|
|
543 |
print "+\n"; |
|
544 |
}
|
|
545 |
}
|
|
546 |
for ($j = 0; $j <= $nr_cols; $j++) |
|
547 |
{
|
|
548 |
print "+"; print "-" x ($max_length[$j] + 2); |
|
549 |
}
|
|
550 |
print "+\n"; |
|
551 |
return; |
|
552 |
}
|
|
553 |
if ($style == 1) |
|
554 |
{
|
|
555 |
for ($i = 0; $max_length[$i]; $i++) |
|
556 |
{
|
|
557 |
$mxl = $max_length[$i] if ($mxl < $max_length[$i]); |
|
558 |
}
|
|
559 |
||
560 |
for ($i = 1; $i < $nr_rows; $i++) |
|
561 |
{
|
|
562 |
print "*" x 27; |
|
563 |
print " " . $i . ". row "; |
|
564 |
print "*" x 27; |
|
565 |
print "\n"; |
|
566 |
for ($j = 0; $j <= $nr_cols; $j++) |
|
567 |
{
|
|
568 |
print " " x ($mxl - length($data[0][$j])); |
|
569 |
print "$data[0][$j]: "; |
|
570 |
if (defined($data[$i][$j])) |
|
571 |
{
|
|
572 |
print "$data[$i][$j] \n"; |
|
573 |
}
|
|
574 |
else
|
|
575 |
{
|
|
576 |
print "NULL\n"; |
|
577 |
}
|
|
578 |
}
|
|
579 |
}
|
|
580 |
return; |
|
581 |
}
|
|
582 |
}
|
|
583 |
||
584 |
####
|
|
585 |
#### usage
|
|
586 |
####
|
|
587 |
||
588 |
sub usage |
|
589 |
{
|
|
590 |
print <<EOF; |
|
591 |
mysql-test $VER by Jani Tolonen
|
|
592 |
||
593 |
Usage: mysql-test [options]
|
|
594 |
||
595 |
Options:
|
|
596 |
--help Show this help
|
|
597 |
--db= Database to use (Default: $opt_db)
|
|
598 |
--port= TCP/IP port to use for connection (Default: $opt_port)
|
|
599 |
--socket= UNIX socket to use for connection (Default: $opt_socket)
|
|
600 |
--host= Connect to host (Default: $opt_host)
|
|
601 |
--user= User for login if not current user
|
|
602 |
--password Password to use when connecting to server
|
|
603 |
||
604 |
--without=PART_NAME1,PART_NAME2,...
|
|
605 |
test without a certain part of MySQL, optional parts listed below
|
|
606 |
||
607 |
Optional parts:
|
|
608 |
||
609 |
FUNC Ignore MySQL basic functions
|
|
610 |
PROC Ignore MySQL procedure functions
|
|
611 |
EOF
|
|
612 |
exit(0); |
|
613 |
}
|
|
614 |
||
615 |
||
616 |
sub test_mysql_functions |
|
617 |
{
|
|
618 |
||
619 |
####
|
|
620 |
#### MySQL functions
|
|
621 |
####
|
|
622 |
#### Types: S = string (or real number) , N = unsigned integer, Z = integer,
|
|
623 |
#### R = real number, T = time_stamp, E = no argument, D = date,
|
|
624 |
#### B = boolean, C = character
|
|
625 |
#### F = format (usually used with the date-types)
|
|
626 |
#### . = any number of the last argument type possible
|
|
627 |
#### A = require table for test, the following argument
|
|
628 |
#### is the argument for the function
|
|
629 |
||
630 |
# Muista get_lock,group_unique_users,
|
|
631 |
# position, unique_users
|
|
632 |
||
633 |
# ks. kaikki date function, kerää yhteen, testaa erikseen
|
|
634 |
# adddate, date_add, subdate, date_sub, between, benchmark, count
|
|
635 |
||
636 |
# decode, encode, get_lock, make_set, position
|
|
637 |
||
638 |
@functions = (["abs","R"],["acos","R"],["ascii","C"],["asin","R"], |
|
639 |
["atan","R"],["atan2","R"],["avg","AR"],["bin","Z"], |
|
640 |
["bit_count","Z"],["bit_or","AZ"],["bit_and","AZ"], |
|
641 |
["ceiling","R"],["char","N."],["char_length","S"], |
|
642 |
["concat","SS."],["conv","ZZZ"], |
|
643 |
["cos","R"],["cot","R"],["curdate","E"], |
|
644 |
["curtime","E"],["database","E"],["date_format","DF"], |
|
645 |
["dayofmonth","D"],["dayofyear","D"],["dayname","D"], |
|
646 |
["degrees","R"],["elt","NS."],["encode","SS"], |
|
647 |
["encrypt","S"],["encrypt","SS"],["exp","R"],["field","SS."], |
|
648 |
["find_in_set","SS"],["floor","R"],["format","RN"], |
|
649 |
["from_days","N"],["from_unixtime","N"], |
|
650 |
["from_unixtime","NF"],["greatest","RR."],["hex","Z"], |
|
651 |
["hour","D"],["if","ZSS"],["ifnull","SS"],["insert","SNNS"], |
|
652 |
["instr","SS"],["interval","RR."],["isnull","S"], |
|
653 |
["last_insert_id","E"],["lcase","S"],["least","RR."], |
|
654 |
["left","SN"],["length","S"],["locate","SS"], |
|
655 |
["log","R"],["log10","R"],["lpad","SNS"],["ltrim","S"], |
|
656 |
["max","AR"],["mid","SNN"],["min","AR"],["minute","D"], |
|
657 |
["mod","ZZ"],["monthname","D"], |
|
658 |
["month","D"],["now","E"],["oct","Z"], |
|
659 |
["octet_length","S"],["password","S"],["period_add","DD"], |
|
660 |
["period_diff","DD"],["pi","E"], |
|
661 |
["pow","RR"],["quarter","D"],["radians","R"], |
|
662 |
["rand","E"],["rand","R"],["release_lock","S"], |
|
663 |
["repeat","SN"],["replace","SSS"],["reverse","S"], |
|
664 |
["right","SN"],["round","R"],["round","RN"], |
|
665 |
["rpad","SNS"],["rtrim","S"],["sec_to_time","N"], |
|
666 |
["second","T"],["sign","R"],["sin","R"], |
|
667 |
["space","N"],["soundex","S"],["sqrt","R"],["std","AR"], |
|
668 |
["strcmp","SS"],["substring","SN"],["substring","SNN"], |
|
669 |
["substring_index","SSZ"],["sum","AR"], |
|
670 |
["tan","R"],["time_format","TF"],["time_to_sec","T"], |
|
671 |
["to_days","D"],["trim","S"], |
|
672 |
["truncate","RN"],["ucase","S"], |
|
673 |
["unix_timestamp","E"],["unix_timestamp","D"],["user","E"], |
|
674 |
["version","E"],["week","D"],["weekday","D"],["year","D"]); |
|
675 |
||
676 |
####
|
|
677 |
#### Various tests for the functions above
|
|
678 |
####
|
|
679 |
||
680 |
&exec_query(["drop table mysql_test1"], $MAY_ERR, $SILENT); |
|
681 |
||
682 |
$query .= <<EOF; |
|
683 |
create table mysql_test1 (
|
|
684 |
i int,
|
|
685 |
d double
|
|
686 |
)
|
|
687 |
EOF
|
|
688 |
chop($query); |
|
689 |
&exec_query([$query], $NO_ERR, $SILENT); |
|
690 |
||
691 |
####
|
|
692 |
#### Basic tests
|
|
693 |
####
|
|
694 |
||
695 |
printf("####\n#### BASIC TESTS FOR FUNCTIONS\n####\n\n"); |
|
696 |
||
697 |
@bunch = ("insert into mysql_test1 values(-20,-10.5),(20,10.5),(50,100.00)", |
|
698 |
"insert into mysql_test1 values(100,500.333)"); |
|
699 |
&exec_query(\@bunch, $NO_ERR, $SILENT); |
|
700 |
||
701 |
printf("\n####\n#### First basic test part\n####\n\n"); |
|
702 |
||
703 |
@values = (["S", "'a'", "'abc'", "'abc def'", "'abcd'", "'QWERTY'", |
|
704 |
"'\\\\'", "'*.!\"#€%&/()'", "'" . &mk_str('a',1024) . "'", |
|
705 |
"?", "<>", "#__#"], |
|
706 |
["N", -1000, -500, -100, -1, 0, 1, 40, 50, 70, 90, |
|
707 |
100, 500, 1000], |
|
708 |
["Z", -100, -50, 200, 1000], |
|
709 |
["R", -500.5, -10.333, 100.667, 400.0], |
|
710 |
["T", 19980728154204, 19980728154205, 19980728154206, |
|
711 |
19980728154207], |
|
712 |
["D", "'1997-12-06'", "'1997-12-07'", "'1997-12-08'", |
|
713 |
"'1997-12-09'"], |
|
714 |
["B", 1, 0, 0, 1], |
|
715 |
["C", "'a'", "'e'", "'r'", "'q'"], |
|
716 |
["F", "'%a'", "'%b'", "'%d'", "'%H'"]); |
|
717 |
&test_func(\@functions, \@values, 4, 5, ["mysql_test1","Zi","Rd"]); |
|
718 |
||
719 |
printf("\n####\n#### Second basic test part\n####\n\n"); |
|
720 |
||
721 |
@values = (["S", "'a'", "'BC'", "'def'", "'HIJK'", "'lmnop'", "'QRSTUV'"], |
|
722 |
["N", 0, 1, 2, 3, 4, 5], |
|
723 |
["Z", 0, 1, 2, 3, 4, 5], |
|
724 |
["R", 0, 1, 2, 3, 4, 5], |
|
725 |
["T", 19990608234530, 20000709014631, 20010810024732, |
|
726 |
20020911034833, 20031012044934, 20041113055035], |
|
727 |
["D", "'1999-06-08'", "'2000-07-09'", "'2001-08-10'", |
|
728 |
"'2002-09-11'", "'2003-10-12'", "'2004-11-13'"], |
|
729 |
["B", 0, 1, 0, 1, 0, 1], |
|
730 |
["C", "'a'", "'BC'", "'def'", "'HIJK'", "'lmnop'", "'QRSTUV'"], |
|
731 |
["F", "'%a'", "'%b'", "'%d'", "'%h'", "'%H'", "'%i'"]); |
|
732 |
&test_func(\@functions, \@values, 6, 6, ["mysql_test1","Zi","Rd"], 0, 1); |
|
733 |
||
734 |
printf("\n####\n#### Third basic test part\n####\n\n"); |
|
735 |
||
736 |
@values = (["S", "'Monty'", "'Jani'", "'MySQL'", "''"], |
|
737 |
["N", 10, 54, -70, -499], |
|
738 |
["Z", 11.03, "'Abo'", 54.333, "''"], |
|
739 |
["R", 12, "'gnome'", -34.211, "''"], |
|
740 |
["T", 3, "'Redhat'", -19984021774433, "''"], |
|
741 |
["D", "'1990-01-31'", "'-3333-10-23'", -5631_23_12, "''"], |
|
742 |
["B", 0, "'asb'", -4, "''"], |
|
743 |
["C", "'a'", 503, -45353453, "''"], |
|
744 |
["F", "'%a'", -231, "'Mitsubishi'", "''"]); |
|
745 |
&test_func(\@functions, \@values, 3, 3, ["mysql_test1","Zi","Rd"], 0, 1); |
|
746 |
||
747 |
&exec_query(["delete from mysql_test1"], $NO_ERR, $SILENT); |
|
748 |
||
749 |
####
|
|
750 |
#### Null tests
|
|
751 |
####
|
|
752 |
||
753 |
printf("\n\n####\n#### NULL TESTS FOR FUNCTIONS\n####\n\n\n"); |
|
754 |
||
755 |
&exec_query(["insert into mysql_test1 values(null,null)"], $NO_ERR, |
|
756 |
$SILENT); |
|
757 |
@values = (["S", "NULL"], |
|
758 |
["N", "NULL"], |
|
759 |
["Z", "NULL"], |
|
760 |
["R", "NULL"], |
|
761 |
["T", "NULL"], |
|
762 |
["D", "NULL"], |
|
763 |
["B", "NULL"], |
|
764 |
["C", "NULL"], |
|
765 |
["F", "NULL"]); |
|
766 |
&test_func(\@functions, \@values, 1, 5, ["mysql_test1","Zi","Rd"], 1); |
|
767 |
&exec_query(["delete from mysql_test1"], $NO_ERR, $SILENT); |
|
768 |
||
769 |
####
|
|
770 |
#### Tests to fulfill the main part of function tests above
|
|
771 |
####
|
|
772 |
||
773 |
printf("\n\n####\n#### FULFILL TESTS \n####\n\n\n"); |
|
774 |
||
775 |
&exec_query(["drop table my_t"], $MAY_ERR, $SILENT); |
|
776 |
&exec_query(["create table my_t (s1 char(64), s2 char(64))"], |
|
777 |
$NO_ERR, $VERBOSE, $HS); |
|
778 |
$query = <<EOF; |
|
779 |
insert into my_t values('aaa','aaa'),('aaa|qqq','qqq'),('gheis','^[^a-dXYZ]+\$'),('aab','^aa?b'),('Baaan','^Ba*n'),('aaa','qqq|aaa'),('qqq','qqq|aaa'),('bbb','qqq|aaa'),('bbb','qqq'),('aaa','aba'),(null,'abc'),('def',null),(null,null),('ghi','ghi[')
|
|
780 |
EOF
|
|
781 |
chop($query); |
|
782 |
&exec_query([$query], $NO_ERR, $VERBOSE, $HS); |
|
783 |
&exec_query(["select s1 regexp s2 from my_t"], |
|
784 |
$NO_ERR, $VERBOSE, $HS); |
|
785 |
||
786 |
||
787 |
####
|
|
788 |
#### ["position","SS"],
|
|
789 |
####
|
|
790 |
||
791 |
}
|
|
792 |
||
793 |
sub create_test_tables |
|
794 |
{
|
|
795 |
$query[0][0] = <<EOF; |
|
796 |
CREATE TABLE my_t (
|
|
797 |
auto int(5) unsigned DEFAULT '0' NOT NULL auto_increment,
|
|
798 |
string varchar(10) DEFAULT 'hello',
|
|
799 |
binary_string varchar(10) binary DEFAULT '' NOT NULL,
|
|
800 |
tiny tinyint(4) DEFAULT '0' NOT NULL,
|
|
801 |
short smallint(6) DEFAULT '1' NOT NULL,
|
|
802 |
medium mediumint(8) DEFAULT '0' NOT NULL,
|
|
803 |
longint int(11) DEFAULT '0' NOT NULL,
|
|
804 |
longlong bigint(13) DEFAULT '0' NOT NULL,
|
|
805 |
num decimal(5,2) DEFAULT '0.00' NOT NULL,
|
|
806 |
num_fill decimal(6,2) unsigned zerofill DEFAULT '0000.00' NOT NULL,
|
|
807 |
real_float float(13,1) DEFAULT '0.0' NOT NULL,
|
|
808 |
real_double double(13,1),
|
|
809 |
utiny tinyint(3) unsigned DEFAULT '0' NOT NULL,
|
|
810 |
ushort smallint(5) unsigned zerofill DEFAULT '00000' NOT NULL,
|
|
811 |
umedium mediumint(8) unsigned DEFAULT '0' NOT NULL,
|
|
812 |
ulong int(11) unsigned DEFAULT '0' NOT NULL,
|
|
813 |
ulonglong bigint(13) unsigned DEFAULT '0' NOT NULL,
|
|
814 |
zero int(5) unsigned zerofill,
|
|
815 |
time_stamp timestamp(14),
|
|
816 |
date_field date,
|
|
817 |
time_field time,
|
|
818 |
date_time datetime,
|
|
819 |
blob_col blob,
|
|
820 |
tinyblob_col tinyblob,
|
|
821 |
mediumblob_col mediumblob NOT NULL,
|
|
822 |
longblob_col longblob NOT NULL,
|
|
823 |
options enum('one','two','three'),
|
|
824 |
flags set('one','two','three'),
|
|
825 |
PRIMARY KEY (auto)
|
|
826 |
)
|
|
827 |
EOF
|
|
828 |
chop($query[0][0]); |
|
829 |
$query[0][1] = <<EOF; |
|
830 |
INSERT INTO my_t VALUES (1,'hello','',0,1,0,0,0,0.00,0000.00,0.0,NULL,0,
|
|
831 |
00000,0,0,0,NULL,19980728154204,NULL,'01:00:00',
|
|
832 |
NULL,NULL,NULL,'','',NULL,NULL)
|
|
833 |
EOF
|
|
834 |
chop($query[0][1]); |
|
835 |
$query[0][2] = <<EOF; |
|
836 |
INSERT INTO my_t VALUES (2,'hello','',0,1,0,0,0,0.00,0000.00,
|
|
837 |
-340282346638528859811704183484516925440.0,NULL,0,
|
|
838 |
00000,0,0,0,NULL,19980728154205,NULL,NULL,NULL,NULL,
|
|
839 |
NULL,'','',NULL,NULL)
|
|
840 |
EOF
|
|
841 |
chop($query[0][2]); |
|
842 |
$query[0][3] = <<EOF; |
|
843 |
INSERT INTO my_t VALUES (3,'hello','',0,1,0,0,0,0.00,0000.00,0.0,NULL,0,00000,
|
|
844 |
0,0,0,NULL,19980728154205,NULL,NULL,
|
|
845 |
'2002-12-30 22:04:02',NULL,NULL,'','',NULL,NULL)
|
|
846 |
EOF
|
|
847 |
chop($query[0][3]); |
|
848 |
$query[0][4] = <<EOF; |
|
849 |
INSERT INTO my_t VALUES (4,'hello','',0,1,0,0,0,0.00,0000.00,0.0,NULL,0,00000,
|
|
850 |
0,0,0,NULL,19980728154205,'1997-12-06',NULL,NULL,
|
|
851 |
NULL,NULL,'','',NULL,NULL)
|
|
852 |
EOF
|
|
853 |
chop($query[0][4]); |
|
854 |
$query[0][5] = <<EOF; |
|
855 |
INSERT INTO my_t VALUES (5,'hello','',0,1,0,0,0,0.00,0000.00,0.0,NULL,0,00000,
|
|
856 |
0,0,0,NULL,19980728154205,NULL,'20:10:08',NULL,NULL,
|
|
857 |
NULL,'','',NULL,NULL)
|
|
858 |
EOF
|
|
859 |
chop($query[0][5]); |
|
860 |
$query[0][6] = <<EOF; |
|
861 |
INSERT INTO my_t VALUES (6,'hello','',0,1,0,0,0,-0.22,0000.00,0.0,NULL,0,
|
|
862 |
00000,0,0,0,NULL,19980728154205,NULL,NULL,NULL,
|
|
863 |
NULL,NULL,'','',NULL,NULL)
|
|
864 |
EOF
|
|
865 |
chop($query[0][6]); |
|
866 |
$query[0][7] = <<EOF; |
|
867 |
INSERT INTO my_t VALUES (7,'hello','',0,1,0,0,0,-0.00,0000.00,0.0,NULL,0,
|
|
868 |
00000,0,0,0,NULL,19980728154205,NULL,NULL,NULL,
|
|
869 |
NULL,NULL,'','',NULL,NULL)
|
|
870 |
EOF
|
|
871 |
chop($query[0][7]); |
|
872 |
$query[0][8] = <<EOF; |
|
873 |
INSERT INTO my_t VALUES (8,'hello','',0,1,0,0,0,+0.00,0000.00,0.0,NULL,0,
|
|
874 |
00000,0,0,0,NULL,19980728154205,NULL,NULL,NULL,
|
|
875 |
NULL,NULL,'','',NULL,NULL)
|
|
876 |
EOF
|
|
877 |
chop($query[0][8]); |
|
878 |
$query[0][9] = <<EOF; |
|
879 |
INSERT INTO my_t VALUES (9,'hello','',0,1,0,0,0,+0.90,0000.00,0.0,NULL,0,
|
|
880 |
00000,0,0,0,NULL,19980728154205,NULL,NULL,NULL,
|
|
881 |
NULL,NULL,'','',NULL,NULL)
|
|
882 |
EOF
|
|
883 |
chop($query[0][9]); |
|
884 |
$query[0][10] = <<EOF; |
|
885 |
INSERT INTO my_t VALUES (10,'hello','',0,1,0,0,0,-999.99,0000.00,0.0,NULL,0,
|
|
886 |
00000,0,0,0,NULL,19980728154206,NULL,NULL,NULL,NULL,
|
|
887 |
NULL,'','',NULL,NULL)
|
|
888 |
EOF
|
|
889 |
chop($query[0][10]); |
|
890 |
$query[0][11] = <<EOF; |
|
891 |
INSERT INTO my_t VALUES (11,'hello','',127,32767,8388607,2147483647,
|
|
892 |
9223372036854775807,9999.99,9999.99,
|
|
893 |
329999996548271212625250308919809540096.0,9.0,255,
|
|
894 |
65535,16777215,4294967295,18446744073709551615,
|
|
895 |
4294967295,00000000000000,'9999-12-31','23:59:59',
|
|
896 |
'9999-12-31 23:59:59',NULL,NULL,' ',' ','',
|
|
897 |
'one,two,three')
|
|
898 |
EOF
|
|
899 |
chop($query[0][11]); |
|
900 |
$query[0][12] = <<EOF; |
|
901 |
INSERT INTO my_t VALUES (12,'hello','',-128,-32768,-8388608,-2147483648,
|
|
902 |
-9223372036854775808,-999.99,0000.00,
|
|
903 |
-329999996548271212625250308919809540096.0,10.0,0,
|
|
904 |
00000,0,0,0,00000,00000000000000,
|
|
905 |
'9999-12-31','23:59:59','9999-12-31 23:59:59',NULL,
|
|
906 |
NULL,' ,-',' ,-','','one,two,three')
|
|
907 |
EOF
|
|
908 |
chop($query[0][12]); |
|
909 |
$query[0][13] = <<EOF; |
|
910 |
INSERT INTO my_t VALUES (13,'hello','',0,1,0,0,0,0.09,0000.00,0.0,NULL,0,
|
|
911 |
00000,0,0,0,NULL,19980728154223,NULL,NULL,NULL,
|
|
912 |
NULL,NULL,'','',NULL,NULL)
|
|
913 |
EOF
|
|
914 |
chop($query[0][13]); |
|
915 |
$query[0][14] = <<EOF; |
|
916 |
INSERT INTO my_t VALUES (14,'hello','',0,1,0,0,0,0.00,0000.00,0.0,NULL,0,
|
|
917 |
00000,0,0,0,NULL,19980728154223,NULL,NULL,NULL,
|
|
918 |
NULL,NULL,'','',NULL,NULL)
|
|
919 |
EOF
|
|
920 |
chop($query[0][14]); |
|
921 |
$query[0][15] = <<EOF; |
|
922 |
INSERT INTO my_t VALUES (15,'hello','',0,1,0,0,0,0.00,0044.00,0.0,NULL,0,
|
|
923 |
00000,0,0,0,NULL,19980728154223,NULL,NULL,NULL,
|
|
924 |
NULL,NULL,'','',NULL,NULL)
|
|
925 |
EOF
|
|
926 |
chop($query[0][15]); |
|
927 |
$query[0][16] = <<EOF; |
|
928 |
INSERT INTO my_t VALUES (16,'hello','',0,1,0,0,0,0.00,9999.99,0.0,NULL,0,
|
|
929 |
00000,0,0,0,NULL,19980728154223,NULL,NULL,NULL,
|
|
930 |
NULL,NULL,'','',NULL,NULL)
|
|
931 |
EOF
|
|
932 |
chop($query[0][16]); |
|
933 |
$query[0][17] = <<EOF; |
|
934 |
INSERT INTO my_t VALUES (17,'hello','',127,32767,8388607,2147483647,
|
|
935 |
9223372036854775807,9999.99,9999.99,
|
|
936 |
329999996548271212625250308919809540096.0,9.0,255,
|
|
937 |
65535,16777215,4294967295,18446744073709551615,
|
|
938 |
4294967295,00000000000000,'9999-12-31','23:59:59',
|
|
939 |
'9999-12-31 23:59:59',NULL,NULL,' ',' ','',
|
|
940 |
'one,two,three')
|
|
941 |
EOF
|
|
942 |
chop($query[0][17]); |
|
943 |
$query[0][18] = <<EOF; |
|
944 |
INSERT INTO my_t VALUES (18,'hello','',127,32767,8388607,2147483647,
|
|
945 |
9223372036854775807,9999.99,9999.99,0.0,NULL,255,
|
|
946 |
65535,16777215,4294967295,18446744073709551615,
|
|
947 |
4294967295,19980728154224,NULL,NULL,NULL,NULL,
|
|
948 |
NULL,'','',NULL,NULL)
|
|
949 |
EOF
|
|
950 |
chop($query[0][18]); |
|
951 |
$query[0][19] = <<EOF; |
|
952 |
INSERT INTO my_t VALUES (19,'hello','',127,32767,8388607,2147483647,
|
|
953 |
9223372036854775807,9999.99,9999.99,0.0,NULL,255,
|
|
954 |
65535,16777215,4294967295,0,4294967295,
|
|
955 |
19980728154224,NULL,NULL,NULL,NULL,NULL,'','',
|
|
956 |
NULL,NULL)
|
|
957 |
EOF
|
|
958 |
chop($query[0][19]); |
|
959 |
$query[0][20] = <<EOF; |
|
960 |
INSERT INTO my_t VALUES (20,'hello','',-128,-32768,-8388608,-2147483648,
|
|
961 |
-9223372036854775808,-999.99,0000.00,0.0,NULL,0,
|
|
962 |
00000,0,0,18446744073709551615,00000,19980728154224,
|
|
963 |
NULL,NULL,NULL,NULL,NULL,'','',NULL,NULL)
|
|
964 |
EOF
|
|
965 |
chop($query[0][20]); |
|
966 |
$query[0][21] = <<EOF; |
|
967 |
INSERT INTO my_t VALUES (21,'hello','',-128,-32768,-8388608,-2147483648,
|
|
968 |
-9223372036854775808,-999.99,0000.00,0.0,NULL,0,
|
|
969 |
00000,0,0,0,00000,19980728154225,NULL,NULL,NULL,
|
|
970 |
NULL,NULL,'','',NULL,NULL)
|
|
971 |
EOF
|
|
972 |
chop($query[0][21]); |
|
973 |
$query[0][22] = <<EOF; |
|
974 |
INSERT INTO my_t VALUES (22,NULL,'1',1,1,1,1,1,1.00,0001.00,1.0,NULL,1,00001,
|
|
975 |
1,1,1,00001,19980728154244,NULL,NULL,NULL,NULL,NULL,
|
|
976 |
'1','1',NULL,NULL)
|
|
977 |
EOF
|
|
978 |
chop($query[0][22]); |
|
979 |
$query[0][23] = <<EOF; |
|
980 |
INSERT INTO my_t VALUES (23,'2','2',2,2,2,2,2,2.00,0002.00,2.0,2.0,2,00002,
|
|
981 |
2,2,2,00002,00000000000000,'0000-00-00','02:00:00',
|
|
982 |
'0000-00-00 00:00:00','2','2','2','2','','')
|
|
983 |
EOF
|
|
984 |
chop($query[0][23]); |
|
985 |
$query[0][24] = <<EOF; |
|
986 |
INSERT INTO my_t VALUES (24,'3','3',3,3,3,3,3,3.00,0003.00,3.0,3.0,3,00003,
|
|
987 |
3,3,3,00003,00000000000000,'2000-00-03','00:00:03',
|
|
988 |
'0000-00-00 00:00:03','3.00','3.00','3.00','3.00',
|
|
989 |
'three','one,two')
|
|
990 |
EOF
|
|
991 |
chop($query[0][24]); |
|
992 |
$query[0][25] = <<EOF; |
|
993 |
INSERT INTO my_t VALUES (25,'-4.7','-4.7',-5,-5,-5,-5,-5,-4.70,0000.00,-4.7,
|
|
994 |
-4.7,0,00000,0,0,0,00000,00000000000000,'0000-00-00',
|
|
995 |
'00:00:00','0000-00-00 00:00:00','-4.70','-4.70',
|
|
996 |
'-4.70','-4.70','','three')
|
|
997 |
EOF
|
|
998 |
chop($query[0][25]); |
|
999 |
$query[0][26] = <<EOF; |
|
1000 |
INSERT INTO my_t VALUES (26,'+0.09','+0.09',0,0,0,0,0,+0.09,0000.00,0.1,0.1,
|
|
1001 |
0,00000,0,0,0,00000,00000000000000,'0000-00-00',
|
|
1002 |
'00:09:00','0000-00-00 00:00:00','+0.09','+0.09',
|
|
1003 |
'+0.09','+0.09','','')
|
|
1004 |
EOF
|
|
1005 |
chop($query[0][26]); |
|
1006 |
$query[0][27] = <<EOF; |
|
1007 |
INSERT INTO my_t VALUES (27,'1','1',1,1,1,1,1,1.00,0001.00,1.0,1.0,1,00001,
|
|
1008 |
1,1,1,00001,00000000000000,'2000-00-01','00:00:01',
|
|
1009 |
'0000-00-00 00:00:01','1','1','1','1','one','one')
|
|
1010 |
EOF
|
|
1011 |
chop($query[0][27]); |
|
1012 |
$query[0][28] = <<EOF; |
|
1013 |
INSERT INTO my_t VALUES (28,'-1','-1',-1,-1,-1,-1,-1,-1.00,0000.00,-1.0,-1.0,
|
|
1014 |
0,00000,0,0,18446744073709551615,00000,
|
|
1015 |
00000000000000,'0000-00-00','00:00:00',
|
|
1016 |
'0000-00-00 00:00:00','-1','-1','-1','-1','',
|
|
1017 |
'one,two,three')
|
|
1018 |
EOF
|
|
1019 |
chop($query[0][28]); |
|
1020 |
$query[0][29] = <<EOF; |
|
1021 |
INSERT INTO my_t VALUES (29,'','',0,0,0,0,0,0.00,0000.00,0.0,0.0,0,00000,0,0,
|
|
1022 |
0,00000,00000000000000,'0000-00-00','00:00:00',
|
|
1023 |
'0000-00-00 00:00:00','','','','','','')
|
|
1024 |
EOF
|
|
1025 |
chop($query[0][29]); |
|
1026 |
$query[1][0] = "CREATE TABLE my_t (str char(64))"; |
|
1027 |
$query[1][1] = "INSERT INTO my_t VALUES ('5.5')"; |
|
1028 |
$query[1][2] = "INSERT INTO my_t VALUES ('6.8')"; |
|
1029 |
$query[2][0] = "CREATE TABLE my_t (str char(64))"; |
|
1030 |
$query[2][1] = <<EOF; |
|
1031 |
INSERT INTO my_t VALUES
|
|
1032 |
('9999999999993242342442323423443534529999.02235000054213')
|
|
1033 |
EOF
|
|
1034 |
chop($query[2][1]); |
|
1035 |
$query[3][0] = "CREATE TABLE my_t (str char(64))"; |
|
1036 |
$query[3][1] = <<EOF; |
|
1037 |
INSERT INTO my_t VALUES
|
|
1038 |
('8494357934579347593475349579347593845948793454350349543348736453')
|
|
1039 |
EOF
|
|
1040 |
chop($query[3][1]); |
|
1041 |
$query[4][0] = "CREATE TABLE my_t (d double(20,10))"; |
|
1042 |
$query[4][1] = "INSERT INTO my_t VALUES (10.0000000000)"; |
|
1043 |
$query[4][2] = "INSERT INTO my_t VALUES (-10.0000000000)"; |
|
1044 |
$query[5][0] = "CREATE TABLE my_t (d double(20,10))"; |
|
1045 |
$query[5][1] = "INSERT INTO my_t VALUES (50000.0000000000)"; |
|
1046 |
$query[6][0] = "CREATE TABLE my_t (d double(20,10))"; |
|
1047 |
$query[6][1] = "INSERT INTO my_t VALUES (5000000.0000000000)"; |
|
1048 |
$query[7][0] = "CREATE TABLE my_t (d double(20,10))"; |
|
1049 |
$query[7][1] = "INSERT INTO my_t VALUES (500000000.0000000000)"; |
|
1050 |
$query[8][0] = "CREATE TABLE my_t (d double(20,10))"; |
|
1051 |
$query[8][1] = "INSERT INTO my_t VALUES (50000000000.0000000000)"; |
|
1052 |
$query[8][2] = "INSERT INTO my_t VALUES (NULL)"; |
|
1053 |
$query[9][0] = "CREATE TABLE my_t (d double(60,10))"; |
|
1054 |
$query[9][1] = "INSERT INTO my_t VALUES (93850983054983462912.0000000000)"; |
|
1055 |
$query[9][2] = "INSERT INTO my_t VALUES (93850983.3495762944)"; |
|
1056 |
$query[9][3] = <<EOF; |
|
1057 |
INSERT INTO my_t VALUES (938509832438723448371221493568778534912.0000000000)
|
|
1058 |
EOF
|
|
1059 |
chop($query[9][3]); |
|
1060 |
$query[10][0] = "CREATE TABLE my_t (i int(11))"; |
|
1061 |
$query[10][1] = "INSERT INTO my_t VALUES (-100)"; |
|
1062 |
$query[10][2] = "INSERT INTO my_t VALUES (-200)"; |
|
1063 |
$query[11][0] = "CREATE TABLE my_t (s char(64))"; |
|
1064 |
$query[11][1] = "INSERT INTO my_t VALUES ('100.')"; |
|
1065 |
$query[12][0] = "CREATE TABLE my_t (s char(64))"; |
|
1066 |
$query[12][1] = "INSERT INTO my_t VALUES ('1e+50')"; |
|
1067 |
$query[13][0] = "CREATE TABLE my_t (s char(64))"; |
|
1068 |
$query[13][1] = "INSERT INTO my_t VALUES ('1E+50u')"; |
|
1069 |
$query[14][0] = "CREATE TABLE my_t (s char(64))"; |
|
1070 |
$query[14][1] = "INSERT INTO my_t VALUES ('1EU50')"; |
|
1071 |
$query[15][0] = "CREATE TABLE my_t (s char(64))"; |
|
1072 |
$query[15][1] = "INSERT INTO my_t VALUES ('123.000')"; |
|
1073 |
$query[15][2] = "INSERT INTO my_t VALUES ('123.000abc')"; |
|
1074 |
$query[16][0] = "CREATE TABLE my_t (s char(128))"; |
|
1075 |
$query[16][1] = <<EOF; |
|
1076 |
INSERT INTO my_t VALUES
|
|
1077 |
('-999999999999999999999999999999999999999999999999999999999999999999999999')
|
|
1078 |
EOF
|
|
1079 |
chop($query[16][1]); |
|
1080 |
$query[17][0] = "CREATE TABLE my_t (s char(128))"; |
|
1081 |
$query[17][1] = "INSERT INTO my_t VALUES ('-9999999999999999')"; |
|
1082 |
$query[18][0] = "CREATE TABLE my_t (s char(128))"; |
|
1083 |
$query[18][1] = "INSERT INTO my_t VALUES ('28446744073709551615001')"; |
|
1084 |
$query[18][2] = "INSERT INTO my_t VALUES ('184467440737095516150000000')"; |
|
1085 |
$query[19][0] = "CREATE TABLE my_t (s char(128))"; |
|
1086 |
$query[19][1] = "INSERT INTO my_t VALUES ('18446744073709551615')"; |
|
1087 |
$query[20][0] = "CREATE TABLE my_t (s char(128))"; |
|
1088 |
$query[20][1] = "INSERT INTO my_t VALUES ('18446744073709551616')"; |
|
1089 |
$query[21][0] = "CREATE TABLE my_t (s char(64))"; |
|
1090 |
$query[21][1] = "INSERT INTO my_t VALUES ('00740')"; |
|
1091 |
$query[21][2] = "INSERT INTO my_t VALUES ('00740.')"; |
|
1092 |
$query[22][0] = "CREATE TABLE my_t (s char(128))"; |
|
1093 |
$query[22][1] = "INSERT INTO my_t VALUES ('-18446744073709551615')"; |
|
1094 |
$query[23][0] = "CREATE TABLE my_t (s char(32))"; |
|
1095 |
$query[23][1] = "INSERT INTO my_t VALUES ('740')"; |
|
1096 |
$query[23][2] = "INSERT INTO my_t VALUES ('12345')"; |
|
1097 |
$query[23][3] = "INSERT INTO my_t VALUES ('12345')"; |
|
1098 |
$query[24][0] = "CREATE TABLE my_t (s char(32))"; |
|
1099 |
$query[24][1] = "INSERT INTO my_t VALUES ('00740')"; |
|
1100 |
$query[24][2] = "INSERT INTO my_t VALUES ('00730')"; |
|
1101 |
$query[24][3] = "INSERT INTO my_t VALUES ('00720')"; |
|
1102 |
$query[24][4] = "INSERT INTO my_t VALUES ('12345.02')"; |
|
1103 |
$query[25][0] = "CREATE TABLE my_t (i bigint(20) unsigned)"; |
|
1104 |
$query[25][1] = "INSERT INTO my_t VALUES (3000)"; |
|
1105 |
$query[25][2] = "INSERT INTO my_t VALUES (NULL)"; |
|
1106 |
$query[25][3] = "INSERT INTO my_t VALUES (900000000003)"; |
|
1107 |
$query[25][4] = "INSERT INTO my_t VALUES (90)"; |
|
1108 |
$query[26][0] = "CREATE TABLE my_t (i int(11))"; |
|
1109 |
$query[26][1] = "INSERT INTO my_t VALUES (NULL)"; |
|
1110 |
$query[27][0] = "CREATE TABLE my_t (d date)"; |
|
1111 |
$query[27][1] = "INSERT INTO my_t VALUES ('1999-05-01')"; |
|
1112 |
$query[28][0] = "CREATE TABLE my_t (y year(4))"; |
|
1113 |
$query[28][1] = "INSERT INTO my_t VALUES (1999)"; |
|
1114 |
$query[29][0] = "CREATE TABLE my_t (s char(128))"; |
|
1115 |
$query[29][1] = "INSERT INTO my_t VALUES ('453453444451.7976')"; |
|
1116 |
$query[30][0] = "CREATE TABLE my_t (s char(128))"; |
|
1117 |
$query[30][1] = "INSERT INTO my_t VALUES('')"; |
|
1118 |
$query[31][0] = "CREATE TABLE my_t (s char(128))"; |
|
1119 |
$query[31][1] = "INSERT INTO my_t VALUES(' ')"; |
|
1120 |
return $query; |
|
1121 |
}
|