Advertisement
Guest User

Untitled

a guest
Jan 29th, 2015
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. #!/usr/bin/perl
  2. #
  3. # mysqldump -routines --no-create-info --no-data --no-create-db --compact | perl $0
  4.  
  5. use strict;
  6. use warnings;
  7. use utf8;
  8.  
  9. my $output_dir = "out";
  10.  
  11. sub getProcName() {
  12. (my $name = $_) =~ s/^CREATE\s+([^\s]+)\s+`([^\s`(]+)`\s*\(?.*/$2/eg;
  13. return $name;
  14. }
  15.  
  16. ## main
  17. my %procs = ();
  18.  
  19. my $proc_name = "";
  20. my $delimiter = ';';
  21.  
  22. while (<>) {
  23. if (/^DELIMITER\s+/) {
  24. $delimiter = $_;
  25. $delimiter =~ s/^DELIMITER\s+(.+)$/$1/eg;
  26. }
  27.  
  28. if (/^CREATE\s+/) {
  29. if (/DEFINER=/) {
  30. # remove DEFINER
  31. s/^(.+\s+)DEFINER=`[^\s]+`\s+(.+)$/$1$2/;
  32. }
  33. if (/^CREATE\s+(FUNCTION|PROCEDURE)/) {
  34. $proc_name = "$1." . &getProcName($_);
  35. # append DELIMITER to first line
  36. $procs{$proc_name} .= "DELIMITER $delimiter\n";
  37. }
  38. }
  39.  
  40. if ($proc_name) {
  41. $procs{$proc_name} .= $_;
  42. }
  43.  
  44. if (/END\s+$delimiter/) {
  45. $proc_name = "";
  46. }
  47. }
  48.  
  49. # store files
  50. mkdir($output_dir);
  51. for (keys %procs) {
  52. my $key = $_;
  53. chomp;
  54. my $filename = "$output_dir/$_.sql";
  55. print "Dump $_ -> $filename\n";
  56. open(my $fh, '>', $filename) or die "Could not open file '$filename' $!";
  57. print $fh $procs{$key};
  58. close $fh;
  59. }
  60.  
  61. print "done\n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement