create_dbs.pl
上传用户:xiao730204
上传日期:2007-01-04
资源大小:141k
文件大小:7k
源码类别:

WEB邮件程序

开发平台:

PHP

  1. #!/usr/bin/perl
  2. use Getopt::Long;
  3. use strict;
  4. my $database_user             = '';
  5. my $database_user_password    = '';
  6. my $mysql_flag                = 0;
  7. my $mysql_command             = '';
  8. my $mysqlshow_command         = '';
  9. my $ptodo_flag                = 0;
  10. my $SQL_BASE = './';
  11. my $foo;
  12. if ( $ARGV[ 0 ] eq '' ) {
  13.    die <<"USAGE";
  14. create_dbs.pl [options]
  15.    --user=username            - username to be used
  16.    --password=password        - password to be used
  17.    --mysql                    - mysql database
  18.    --mysql_command=path       - path to mysql command
  19.    --mysqlshow_command=path   - path to mysqlshow command
  20.    --ptodo_db                 - create a prometheus todo database
  21.    --sql_base=path            - base directory for the sql
  22. USAGE
  23. }
  24. my $result = GetOptions(
  25.    'user=s',                     $database_user,
  26.    'password=s',                 $database_user_password,
  27.    'mysql',                      $mysql_flag,
  28.    'mysql_command=s',            $mysql_command,
  29.    'mysqlshow_command=s',        $mysql_command,
  30.    'ptodo_db',                   $ptodo_flag,
  31.    'sql_base=s',                 $SQL_BASE,
  32.    'session_db',                 $foo,
  33.    'user_db',                    $foo,
  34.    'domain_db',                  $foo,
  35. );
  36. if ( $mysql_command eq '' ) {
  37.    $mysql_command       = find_command('mysql');
  38. }
  39. if ( $mysqlshow_command eq '' ) {
  40.    $mysqlshow_command   = find_command('mysqlshow');
  41. }
  42. print "Option confirmation : n";
  43. display_option( 'Database Username    ',     $database_user );
  44. display_option( 'Database Password    ',     $database_user_password );
  45. if ( $mysql_flag ) {
  46. display_option( 'Mysql                ',     $mysql_flag );
  47. display_option( 'Mysql     Command    ',     $mysql_command );
  48. display_option( 'Mysqlshow Command    ',     $mysqlshow_command );
  49. }
  50. display_option( 'Prometheus Database  ',     $ptodo_flag );
  51. if ( $mysql_flag ) {
  52.    if ( $mysql_command eq '' ) {
  53.       die "The mysql command is required : n" .
  54.           "--mysql-command=path_to_mysql is a overriden";
  55.    }
  56.    if ( $mysqlshow_command eq '' ) {
  57.       die "The mysqlshow command is required :n" .
  58.           "--mysqlshow-command=path_to_mysqlshow is a overriden";
  59.    }
  60.    if ( $ptodo_flag ) {
  61.       create_mysql_ptodo_dbs();
  62.    }
  63. }
  64. exit();
  65. sub display_option {
  66.    my $option_name      = shift;
  67.    my $option_value     = shift;
  68.    print $option_name . ' - ' . $option_value . "n";
  69. }
  70. sub find_command {
  71.    my $target_command = shift;
  72.    my @path_elems = ();
  73.    my $path_elem  = '';
  74.    @path_elems = split( /:/, $ENV{ "PATH" } );
  75.    foreach $path_elem ( @path_elems ) {
  76.       my $test_item = '';
  77.       $test_item = $path_elem . '/' . $target_command;
  78.       if ( -x $test_item ) {
  79.          return $test_item;
  80.       }
  81.    }
  82. }
  83. sub get_mysql_dbs {
  84.    my @mysql_dbs = ();
  85.    open( MYSQL_SHOW, 
  86.       $mysqlshow_command . ' ' . 
  87.          '--user=' . $database_user . ' ' .
  88.          '--password=' . $database_user_password .
  89.          ' |'
  90.    ) or die "$!n";
  91.    while( <MYSQL_SHOW> ) {
  92.       my $input_line = $_;
  93.       if ( $input_line =~ /+/ ) { next; }
  94.       if ( $input_line =~ /Databases/ ) { next; }
  95.       if ( $input_line =~ /|s*(.*)s*|/ ) {
  96.          my $target = $1;
  97.          while( $target =~ / $/ ) {
  98.             $target =~ s/ $//g;
  99.          }
  100.          push( @mysql_dbs, $target );
  101.       }
  102.    }
  103.    close( MYSQL_SHOW );
  104.    return @mysql_dbs;
  105. }
  106. sub get_mysql_dbs_tables {
  107.    my $dbs = shift;
  108.    my @mysql_tables = ();
  109.    my $command = $mysqlshow_command . ' ' . 
  110.          '--user=' . $database_user . ' ' .
  111.          '--password=' . $database_user_password . ' ' .
  112.          $dbs . ' % ';
  113.    open( MYSQL_SHOW, $command . ' |') or die "$!n";
  114.    while( <MYSQL_SHOW> ) {
  115.       my $input_line = $_;
  116.       if ( $input_line =~ /+/ ) { next; }
  117.       if ( $input_line =~ /Tables/ ) { next; }
  118.       if ( $input_line =~ /|s*(.*)s*|/ ) {
  119.          my $target = $1;
  120.          while( $target =~ / $/ ) {
  121.             $target =~ s/ $//g;
  122.          }
  123.          push( @mysql_tables, $target );
  124.       }
  125.    }
  126.    close( MYSQL_SHOW );
  127.    return @mysql_tables;
  128. }
  129. sub get_mysql_database_existence {
  130.    my $target_dbs = shift;
  131.    my @mysql_dbs = get_mysql_dbs();
  132.    my $item = '';
  133.    foreach $item ( @mysql_dbs ) {
  134.       #print $item . "***n";
  135.       if ( $item eq $target_dbs ) {
  136.          # dbs is already there...
  137.          return 1;
  138.       }
  139.    }
  140.    return 0;
  141. }
  142. sub get_mysql_table_existence {
  143.    my $target_dbs       = shift;
  144.    my $target_table     = shift;
  145.    my @mysql_tables = get_mysql_dbs_tables( $target_dbs );
  146.    my $item = '';
  147.    foreach $item ( @mysql_tables ) {
  148.       #print $item . "***n";
  149.       if ( $item eq $target_table ) {
  150.          # dbs is already there...
  151.          return 1;
  152.       }
  153.    }
  154.    return 0;
  155. }
  156. sub run_mysql_script {
  157.    my $script = shift;
  158.    my $target_dbs = shift;
  159.    my @command = ();
  160.    @command = (
  161.       $mysql_command,
  162.       '--user=' . $database_user,
  163.       '--password=' . $database_user_password
  164.    );
  165.    if ( $target_dbs ne "" ) { push( @command, $target_dbs ); }
  166.    push( @command, ">> create_log.log 2>> create_log.stderr" );
  167.    push( @command, "< $script" );
  168.    system( join( ' ', @command ) );
  169. }
  170. sub create_mysql_ptodo_dbs {
  171.    my $target_dbs          = 'prometheus_todo';
  172.    my $target_dbs_create   = 
  173.       $SQL_BASE . '/database/mysql/Todo/create_prometheus_todo.sql';
  174.    my $db_there = 0;
  175.    $db_there = get_mysql_database_existence( $target_dbs );
  176.    if ( $db_there == 1 ) {
  177.       die
  178.          "There seems to be a issue : $target_dbs is already theren" .
  179.          "and since i don't know how to handle this i'm exitingn";
  180.    }
  181.    run_mysql_script( $target_dbs_create );
  182.    $db_there = get_mysql_database_existence( $target_dbs );
  183.    if ( $db_there == 1 ) {
  184.       print "$target_dbs - Database was created!n";
  185.    } else {
  186.       die 
  187.          "Hmm the database is still not there after i tried ton" .
  188.          "create it, i'm guessing that there is something afoot!n";
  189.    }
  190.    my @dbs_tables = ( 
  191.       $SQL_BASE . '/table/mysql/Todo/todo_items_table.sql',
  192.       $SQL_BASE . '/table/mysql/Todo/user_todo_items_table.sql',
  193.       $SQL_BASE . '/table/mysql/Todo/todo_sections_table.sql',
  194.       $SQL_BASE . '/table/mysql/Todo/user_todo_sections_table.sql',
  195.       $SQL_BASE . '/table/mysql/Todo/todo_status_table.sql',
  196.       $SQL_BASE . '/table/mysql/Todo/user_todo_status_table.sql',
  197.    );
  198.    my $table = '';
  199.    foreach $table ( @dbs_tables ) {
  200.       run_mysql_script( $table, $target_dbs );
  201.    }
  202.    my @table_cheks = (
  203.       'todo_items_table',
  204.       'user_todo_items_table',
  205.       'todo_sections_table',
  206.       'user_todo_sections_table',
  207.       'todo_status_table',
  208.       'user_todo_status_table',
  209.    );
  210.    foreach $table ( @table_cheks ) {
  211.       if (
  212.          get_mysql_table_existence( $target_dbs, $table ) 
  213.       ) {
  214.          # Table is there
  215.          print "Table : $table checked out good - we are gon";
  216.       } else {
  217.          die "Table : $table checked DID NOT out good - we are NO gon";
  218.       }
  219.    }
  220.    print "Okay looks like we have a $target_dbs - database to use now, have fun!n";
  221. }