export.pl
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:6k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #!/my/gnu/bin/perl
  2. # This is a test with uses two processes to a database.
  3. # The other inserts records in two tables, the other does a lot of joins
  4. # on these.
  5. #
  6. # Warning, the output from this test will differ in 'found' from time to time,
  7. # but there should never be any errors
  8. #
  9. $host= shift || "";
  10. $test_db="test";
  11. use Mysql;
  12. $|= 1; # Autoflush
  13. $org_file="/tmp/export-org.$$";
  14. $tmp_file="/tmp/export-old.$$";
  15. $tmp_file2="/tmp/export-new.$$";
  16. print "Connection to database $test_dbn";
  17. $dbh = Mysql->Connect($host) || die "Can't connect: $Mysql::db_errstrn";
  18. $dbh->SelectDB($test_db) || die "Can't use database $test_db: $Mysql::db_errstrn";
  19. $dbh->Query("drop table export"); # Ignore this error
  20. print "Creating tablen";
  21. ($dbh->Query("
  22. CREATE TABLE export (
  23.   auto int(5) unsigned NOT NULL DEFAULT '0' auto_increment,
  24.   string char(11) NOT NULL,
  25.   tiny tinyint(4) NOT NULL DEFAULT '0',
  26.   short smallint(6) NOT NULL DEFAULT '0',
  27.   medium mediumint(8) NOT NULL DEFAULT '0',
  28.   longint int(11) NOT NULL DEFAULT '0',
  29.   longlong bigint(20) NOT NULL DEFAULT '0',
  30.   real_float float(13,1) NOT NULL DEFAULT '0.0',
  31.   real_double double(13,1) NOT NULL,
  32.   utiny tinyint(3) unsigned NOT NULL DEFAULT '0',
  33.   ushort smallint(5) unsigned zerofill NOT NULL DEFAULT '00000',
  34.   umedium mediumint(8) unsigned NOT NULL DEFAULT '0',
  35.   ulong int(11) unsigned NOT NULL DEFAULT '0',
  36.   ulonglong bigint(20) unsigned NOT NULL DEFAULT '0',
  37.   time_stamp timestamp,
  38.   blob_col blob,
  39.   tinyblob_col tinyblob,
  40.   mediumblob_col tinyblob not null,
  41.   longblob_col longblob not null,
  42.   PRIMARY KEY (auto),
  43.   KEY (string(5)),
  44.   KEY unsigned_tinykey (utiny),
  45.   KEY (tiny),
  46.   KEY (short),
  47.   FOREIGN KEY (medium) references export,
  48.   KEY (longlong),
  49.   KEY (real_float),
  50.   KEY (real_double),
  51.   KEY (ushort),
  52.   KEY (umedium),
  53.   KEY (ulong),
  54.   KEY (ulonglong),
  55.   KEY (ulonglong,ulong))"))  or die $Mysql::db_errstr;
  56. print "Inserting datan";
  57. @A=("insert into export values (10, 1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1)",
  58.     "insert into export values (NULL,2,2,2,2,2,2,2,2,2,2,2,2,2,NULL,NULL,NULL,2,2)",
  59.     "insert into export values (0,1/3,3,3,3,3,3,3,3,3,3,3,3,3,3,'','','','3')",
  60.     "insert into export values (0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,'-1')",
  61.     "insert into export values (0,-4294967295,-4294967295,-4294967295,-4294967295,-4294967295,-4294967295,-4294967295,-4294967295,-4294967295,-4294967295,-4294967295,-4294967295,-4294967295,-4294967295,-4294967295,-4294967295,-4294967295,'-4294967295')",
  62.     "insert into export values (0,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,4294967295,'4294967295')",
  63.     "insert into export (string,tinyblob_col) values ('special','''\0\ttn''')",
  64.     "insert into export (string) values (',,!!\\##')",
  65.     "insert into export (tinyblob_col) values (',,!!!\\\##')"
  66.     );
  67. foreach $A (@A)
  68. {
  69.   $dbh->Query($A) or die "query: $A returned: " . $Mysql::db_errstr;
  70. }
  71. print "Doing dump, load, check on different formatsn";
  72. @A=(# Ordinary format
  73.     "",
  74.     # Field terminated by something
  75.     "fields optionally enclosed by '+' escaped by '' terminated by ',,,' lines terminated by ',,,,'",
  76.     "fields enclosed by '' terminated by ',' lines terminated by ''",
  77.     "fields enclosed by '' terminated by ',' lines terminated by '!!'",
  78.     #Fields enclosed by
  79.     #"fields enclosed by '+' terminated by ''",
  80.     #"fields enclosed by '+' terminated by '' lines terminated by ''",
  81.     "fields enclosed by '+' terminated by ',,' lines terminated by '!!!'",
  82.     "fields enclosed by '+' terminated by ',,' lines terminated by '##'",
  83.     "fields enclosed by '+' escaped by '' terminated by ',,' lines terminated by '###'",
  84.     "fields enclosed by '+' escaped by '' terminated by '!' lines terminated by ''",
  85.     "fields enclosed by '+' terminated by ',' lines terminated by ''",
  86.     #Fields optionally enclosed by
  87.     "fields optionally enclosed by '+' terminated by ','",
  88.     "fields optionally enclosed by '+' terminated by ',' lines terminated by ''",
  89.     "fields optionally enclosed by '''' terminated by ',' lines starting by 'INSERT INTO a VALUES(' terminated by ');n'",
  90.     );
  91. $dbh->Query("select * into outfile '$org_file' from export") or die $Mysql::db_errstr;
  92. foreach $A (@A)
  93. {
  94.   unlink($tmp_file);
  95.   unlink($tmp_file2);
  96.   $dbh->Query("select * into outfile '$tmp_file' $A from export") or die $Mysql::db_errstr;
  97.   $dbh->Query("delete from export") or die $Mysql::db_errstr;
  98.   $dbh->Query("load data infile '$tmp_file' into table export $A") or die $Mysql::db_errstr . " with format: $An";
  99.   $dbh->Query("select *  into outfile '$tmp_file2' from export") or die $Mysql::db_errstr;
  100.   if (`cmp $tmp_file2 $org_file`)
  101.   {
  102.     print "Using format $An";
  103.     print "$tmp_file2 and $org_file differ. Plese check filesn";
  104.     exit 1;
  105.   }
  106. }
  107. @A=(#Fixed size fields
  108.     "fields enclosed by '' escaped by '' terminated by ''",
  109.     "fields enclosed by '' escaped by '' terminated by '' lines terminated by '\r\n'",
  110.     "fields enclosed by '' terminated by '' lines terminated by ''"
  111.     );
  112. unlink($org_file);
  113. $field_list="auto,ifnull(string,''),tiny,short,medium,longint,longlong,real_float,ifnull(real_double,''),utiny,ushort,umedium,ulong,ulonglong,time_stamp";
  114. $dbh->Query("select $field_list into outfile '$org_file' from export") or die $Mysql::db_errstr;
  115. $field_list="auto,string,tiny,short,medium,longint,longlong,real_float,real_double,utiny,ushort,umedium,ulong,ulonglong,time_stamp";
  116. foreach $A (@A)
  117. {
  118.   unlink($tmp_file);
  119.   unlink($tmp_file2);
  120.   $dbh->Query("select $field_list into outfile '$tmp_file' $A from export") or die $Mysql::db_errstr;
  121.   $dbh->Query("delete from export") or die $Mysql::db_errstr;
  122.   $dbh->Query("load data infile '$tmp_file' into table export $A ($field_list)") or die $Mysql::db_errstr;
  123.   $dbh->Query("select $field_list into outfile '$tmp_file2' from export") or die $Mysql::db_errstr;
  124.   if (`cmp $tmp_file2 $org_file`)
  125.   {
  126.     print "Using format $An";
  127.     print "$tmp_file2 and $org_file differ. Plese check filesn";
  128.     exit 1;
  129.   }
  130. }
  131. unlink($tmp_file);
  132. unlink($tmp_file2);
  133. unlink($org_file);
  134. $dbh->Query("drop table export") or die $Mysql::db_errstr;
  135. print "Test okn";
  136. exit 0;