big_record.pl
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!/usr/bin/perl
  2. # This is a test with stores big records in a blob.
  3. # Note that for the default test the mysql server should have been
  4. # started with at least 'mysqld -O max_allowed_packet=30M' and you should have
  5. # at least 256M memory in your computer.
  6. use DBI;
  7. use Getopt::Long;
  8. $opt_host="";
  9. $opt_user=$opt_password="";
  10. $opt_db="test";
  11. $opt_rows=20; # Test of blobs up to ($rows-1)*100000+1 bytes
  12. $opt_compress=0;
  13. $opt_table="test_big_record";
  14. $opt_loop_count=100000; # Change this to make test harder/easier
  15. GetOptions("host=s","db=s","user=s", "password=s", "table=s", "rows=i",
  16.    "compress", "loop-count=i") || die "Aborted";
  17. print "Connection to database $test_dbn";
  18. $extra_options="";
  19. $extra_options.=":mysql_compression=1" if ($opt_compress);
  20. $dbh = DBI->connect("DBI:mysql:$opt_db:$host$extra_options",$opt_user,$opt_password) || die "Can't connect: $DBI::errstrn";
  21. $dbh->do("drop table if exists $opt_table");
  22. print "Creating table $opt_tablen";
  23. ($dbh->do("
  24. CREATE TABLE $opt_table (
  25.   auto int(5) unsigned NOT NULL DEFAULT '0' auto_increment,
  26.   test longblob,
  27.   PRIMARY KEY (auto))"))  or die $DBI::errstr;
  28. print "Inserting $opt_rows recordsn";
  29. $|=1; # Flush output to stdout to be able to monitor process
  30. for ($i=0 ; $i < $opt_rows ; $i++)
  31. {
  32.   $tmp= chr(65+($i % 16)) x ($i*100000+1);
  33.   $tmp= $dbh->quote($tmp);
  34.   $dbh->do("insert into $opt_table (test) values ($tmp)") or die $DBI::errstr;
  35.   print ".";
  36. }
  37. print "nReading recordsn";
  38. $sth=$dbh->prepare("select * from $opt_table", { "mysql_use_result" => 1}) or die $dbh->errstr;
  39. $sth->execute() or die $sth->errstr;
  40. $i=0;
  41. while (($row = $sth->fetchrow_arrayref))
  42. {
  43.   die "Record $i had wrong data in blob" if ($row->[1] ne (chr(65+($i % 16)) x ($i*100000+1)));
  44.   $i++;
  45. }
  46. die "Didn't get all rows from server" if ($i != $opt_rows);
  47. #
  48. # Test by insert/updating/deleting random rows for a while
  49. #
  50. print "Testing insert/update/deleten";
  51. $max_row_id= $rows;
  52. for ($i= 0 ; $i < $opt_loop_count ; $i++)
  53. {
  54.   $length= int(rand 65535);
  55.   $tmp= chr(65+($i % 16)) x $length;
  56.   $tmp= $dbh->quote($tmp);
  57.   $dbh->do("insert into $opt_table (test) values ($tmp)") or die $DBI::errstr;
  58.   $max_row_id++;
  59.   $length=int(rand 65535);
  60.   $tmp= chr(65+($i % 16)) x $length;
  61.   $tmp= $dbh->quote($tmp);
  62.   $id= int(rand $max_row_id);
  63.   $dbh->do("update $opt_table set test= $tmp where auto= $id") or die $DBI::errstr;
  64.   if (($i % 2) == 1)
  65.   {
  66.     $id= int(rand $max_row_id);
  67.     $dbh->do("delete from $opt_table where auto= $id") or die $DBI::errstr;
  68.   }
  69.   print "." if ($i % ($opt_loop_count/100) == 1);
  70. }
  71. # $dbh->do("drop table $opt_table") or die $DBI::errstr;
  72. print "nTest okn";
  73. exit 0;