~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to mysql-test/misc/mysql-test_V1.9.pl

  • Committer: brian
  • Date: 2008-06-25 05:29:13 UTC
  • Revision ID: brian@localhost.localdomain-20080625052913-6upwo0jsrl4lnapl
clean slate

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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";
 
16
$opt_port =          "3306";
 
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
}