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_find_rows < prev    next >
Text File  |  2008-04-17  |  3KB  |  160 lines

  1. #!@PERL@
  2. # Copyright (C) 2000, 2004 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. $version="1.02";
  15.  
  16. use Getopt::Long;
  17.  
  18. $opt_help=$opt_Information=$opt_skip_use_db=0;
  19. $opt_regexp=$opt_dbregexp=".*";
  20. $opt_start_row=1; $opt_rows=9999999999;
  21.  
  22. GetOptions("Information","help","regexp=s","start_row=i","rows=i",
  23.        "dbregexp=s", "skip-use-db")
  24.   || usage();
  25. usage() if ($opt_help || $opt_Information);
  26.  
  27. $query=$search=$database=$set=""; $eoq=0;
  28. while (<>)
  29. {
  30.   next if (length($query) == 0 && /^\#/); # Skip comments
  31.   $query.=search($_);
  32.   if ($eoq)
  33.   {
  34.     if ($query =~ /^use /i || $query =~ /^SET / ||
  35.     ($query =~ /$opt_regexp/o && $database =~ /$opt_dbregexp/o))
  36.     {
  37.       if ($opt_skip_use_db && $query =~ /^use /i)
  38.       {
  39.     $query="";
  40.     next;
  41.       }
  42.       if ($opt_start_row <= 1)
  43.       {
  44.     if ($database)
  45.     {
  46.       print $database, $set;
  47.       $database=$set="";
  48.     }
  49.     print $query;
  50.     last if (--$opt_rows == 0);
  51.       }
  52.       else
  53.       {
  54.     $opt_start_row--;
  55.     if ($query =~ /^use /)
  56.     {
  57.       $database=$query;
  58.       $set="";
  59.     }
  60.     elsif ($query =~ /^SET/)
  61.     {
  62.       $set=$query;
  63.     }
  64.     else
  65.     {
  66.       $set="";
  67.     }
  68.       }
  69.     }
  70.     $query=""; $search=""; $eoq=0;
  71.   }
  72. }
  73.  
  74. exit 0;
  75.  
  76. sub search
  77. {
  78.   my($row)=shift;
  79.   my($i);
  80.  
  81.   for ($i=0 ; $i < length($row) ; $i++)
  82.   {
  83.     if (length($search))
  84.     {
  85.       if (length($search) > 1)
  86.       {                # Comment
  87.     next if (substr($row,$i,length($search)) ne $search);
  88.     $i+=length($search)-1;
  89.     $search="";
  90.       }
  91.       elsif (substr($row,$i,1) eq '\\') # Escaped char in string
  92.       {
  93.     $i++;
  94.       }
  95.       elsif (substr($row,$i,1) eq $search)
  96.       {
  97.     if (substr($row,$i+1,1) eq $search)    # Double " or '
  98.     {
  99.       $i++;
  100.     }
  101.     else
  102.     {
  103.       $search="";
  104.     }
  105.       }
  106.       next;    
  107.     }
  108.     if (substr($row,$i,2) eq '/*')    # Comment
  109.     {
  110.       $search="*/";
  111.       $i++;
  112.     }
  113.     elsif (substr($row,$i,1) eq "'" || substr($row,$i,1) eq '"')
  114.     {
  115.       $search=substr($row,$i,1);
  116.      }
  117.   }
  118.   $eoq=1 if (!length($search) && $row =~ /;\s*$/);
  119.   return $row;
  120. }
  121.  
  122.  
  123. sub usage
  124. {
  125.     print <<EOF;
  126. $0  Ver $version
  127.  
  128. Prints all SQL queries that matches a regexp or contains a 'use
  129. database' or 'set ..' command to stdout.  A SQL query may contain
  130. newlines.  This is useful to find things in a MySQL update log.
  131.  
  132. $0 takes the following options:
  133.  
  134. --help or --Information
  135.   Shows this help
  136.  
  137. --regexp=#
  138.   Print queries that matches this.
  139.  
  140. --start_row=#
  141.   Start output from this row (first row = 1)
  142.  
  143. --skip-use-db
  144.   Don\'t include \'use database\' commands in the output.
  145.  
  146. --rows=#
  147.   Quit after this many rows.
  148.  
  149. Example:
  150.  
  151. $0 --regexp "problem_table" < update.log
  152.  
  153. $0 --regexp "problem_table" update-log.1 update-log.2
  154. EOF
  155.   exit(0);
  156. }
  157.