home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / mysql / scripts / mysql_convert_table_format < prev    next >
Text File  |  2008-04-17  |  4KB  |  147 lines

  1. #!@PERL@
  2. # Copyright (C) 2000-2002 MySQL AB
  3. # This program is free software; you can redistribute it and/or modify
  4. # it under the terms of the GNU General Public License as published by
  5. # the Free Software Foundation; version 2 of the License.
  6. # This program is distributed in the hope that it will be useful,
  7. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9. # GNU General Public License for more details.
  10. # You should have received a copy of the GNU General Public License
  11. # along with this program; if not, write to the Free Software
  12. # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  13.  
  14. # Convert given tables in a database to MYISAM
  15.  
  16. use DBI;
  17. use Getopt::Long;
  18.  
  19. $opt_help=$opt_version=$opt_verbose=$opt_force=0;
  20. $opt_user=$opt_database=$opt_password=undef;
  21. $opt_host="localhost";
  22. $opt_socket="";
  23. $opt_type="MYISAM";
  24. $opt_port=0;
  25. $exit_status=0;
  26.  
  27. GetOptions("force","help","host=s","password=s","user=s","type=s","verbose","version","socket=s", "port=i") || 
  28.   usage(0);
  29. usage($opt_version) if ($#ARGV < 0 || $opt_help || $opt_version);
  30. $opt_database=shift(@ARGV);
  31.  
  32. if (uc($opt_type) eq "HEAP")
  33. {
  34.   print "Converting to type HEAP would delete your tables; aborting\n";
  35.   exit(1);
  36. }
  37.  
  38. $connect_opt="";
  39. if ($opt_port)
  40. {
  41.   $connect_opt.= ";port=$opt_port";
  42. }
  43. if (length($opt_socket))
  44. {
  45.   $connect_opt.=";mysql_socket=$opt_socket";
  46. }
  47.  
  48. $dbh = DBI->connect("DBI:mysql:$opt_database:${opt_host}$connect_opt",
  49.             $opt_user,
  50.             $opt_password,
  51.             { PrintError => 0})
  52.   || die "Can't connect to database $opt_database: $DBI::errstr\n";
  53.  
  54. if ($#ARGV < 0)
  55. {
  56.   # Fetch all table names from the database
  57.   my ($sth,$row);
  58.   $sth=$dbh->prepare("show tables");
  59.   $sth->execute || die "Can't get tables from $opt_database; $DBI::errstr\n";
  60.   while (($row = $sth->fetchrow_arrayref))
  61.   {
  62.     push(@ARGV,$row->[0]);
  63.   }
  64.   $sth->finish;
  65. }
  66.  
  67. print "Converting tables:\n" if ($opt_verbose);
  68. foreach $table (@ARGV)
  69. {
  70.   my ($sth,$row);
  71.  
  72.   # Check if table is already converted
  73.   $sth=$dbh->prepare("show table status like '$table'");  
  74.   if ($sth->execute && ($row = $sth->fetchrow_arrayref))
  75.   {
  76.     if (uc($row->[1]) eq uc($opt_type))
  77.     {
  78.       print "$table is already of type $opt_type;  Ignored\n";
  79.       next;
  80.     }
  81.   }
  82.   print "converting $table\n" if ($opt_verbose);
  83.   if (!$dbh->do("ALTER TABLE $table type=$opt_type"))
  84.   {
  85.     print STDERR "Can't convert $table: Error $DBI::errstr\n";
  86.     exit(1) if (!$opt_force);
  87.     $exit_status=1;
  88.   }
  89. }
  90.  
  91. $dbh->disconnect;
  92. exit($exit_status);
  93.  
  94.  
  95. sub usage
  96. {
  97.   my($version)=shift;
  98.   print "$0  version 1.1\n";
  99.   exit(0) if ($version);
  100.  
  101.   print <<EOF;
  102.  
  103. Conversion of a MySQL tables to other table types.
  104.  
  105.  Usage: $0 database [tables]
  106.  If no tables has been specifed, all tables in the database will be converted.
  107.  
  108.  The following options are available:
  109.  
  110. --force
  111.   Continue even if there is some error.
  112.  
  113. --help or --Information
  114.   Shows this help
  115.  
  116. --host='host name' (Default $opt_host)
  117.   Host name where the database server is located.
  118.  
  119. --password='password'
  120.   Password for the current user.
  121.  
  122. --port=port
  123.   TCP/IP port to connect to if host is not "localhost".
  124.  
  125. --socket='/path/to/socket'
  126.   Socket to connect with.
  127.  
  128. --type='table-type'
  129.   Converts tables to the given table type (Default: $opt_type)
  130.   MySQL 3.23 supports at least the BDB, ISAM and MYISAM types.
  131.  
  132. --user='user_name'
  133.   User name to log into the SQL server.
  134.  
  135. --verbose
  136.   This is a test specific option that is only used when debugging a test.
  137.   Print more information about what is going on.
  138.  
  139. --version
  140.   Shows the version of this program.
  141. EOF
  142.   exit(1);
  143. }
  144.