Advertisement
tukusejssirs

dbh_passing_to_function

Aug 8th, 2019
390
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.34 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. use DBI;
  4. use warnings;
  5. use strict;
  6. use autodie;
  7. use Term::ANSIColor qw(:constants);
  8.  
  9. # User-changable variables
  10. my $database = "db_name";
  11. my $table = "schema.table";
  12. my $db_driver  = "Pg";
  13. my $username = "postgres";
  14. my $password = "password";
  15.  
  16. my $dbh = open_db($database, $table, $username, $password, $db_driver);
  17.  
  18. # close_db($dbh, $table);  # Case #1
  19. close_db($dbh);          # Case #2
  20.  
  21. ##############################################################
  22.  
  23. sub close_db {  # Disconnect the database
  24.     # my $dbh = $_[0];  # Case #1
  25.     my $dbh = @_;   # Case #2
  26.  
  27.     $dbh->disconnect() or die RED, "ERROR: The database could not be disconnected.\n       $DBI::errstr\n       Stopped$!";
  28.     print "INFO: The database has been closed successfully.\n";
  29.     return;
  30. }
  31.  
  32. sub open_db {
  33.     # Variables
  34.     my $database; my $table; my $host = ""; my $user; my $port = ""; my $password; my $db_driver;
  35.     my $dsn; my $dbh; my $sth;
  36.  
  37.     if (scalar(@_) == 5) {
  38.         # Database name
  39.         $database = "$_[0]";
  40.  
  41.         # Table name and optionally schema name
  42.         $table = "$_[1]";
  43.  
  44.         # User, host and port
  45.         if ("$_[2]" =~ /.*@.*/) {
  46.             if ("$_[2]" =~ /.*:.*/) {
  47.                 # User name
  48.                 $user = "$_[2]";
  49.                 $user =~ s/^([^@]*).*$/$1/;
  50.  
  51.                 # Host name
  52.                 $host = "$_[2]";
  53.                 $host =~ s/^[^@]*@([^:]*).*$/$1/;
  54.  
  55.                 # Port
  56.                 $port = "$_[2]";
  57.                 $port =~ s/^[^:]*:(.*)$/$1/;
  58.             } else {
  59.                 # User name
  60.                 $user = "$_[2]";
  61.                 $user =~ s/^([^@]*).*$/$1/;
  62.  
  63.                 # Host name
  64.                 $host = "$_[2]";
  65.                 $host =~ s/^[^@]*@([^:]*).*$/$1/;
  66.             }
  67.         } else {
  68.             # User name
  69.             $user = "$_[2]";
  70.             $user =~ s/^([^@]*).*$/$1/;
  71.         }
  72.  
  73.         # Password
  74.         $password = "$_[3]";
  75.  
  76.         # DB db_driver
  77.         $db_driver = "$_[4]";
  78.     } else {
  79.         die RED, "ERROR: You have to supply database name, table name, user\@host:port, password and the database db_driver.\n       Stopped$!";
  80.     }
  81.  
  82.     if ("$port" eq ""){
  83.         if ("$host" eq ""){
  84.             $dsn = "DBI:$db_driver:dbname = $database";
  85.         } else {
  86.             $dsn = "DBI:$db_driver:dbname = $database; host = $host";
  87.         }
  88.     } else {
  89.         $dsn = "DBI:$db_driver:dbname = $database; host = $host; port = $port";
  90.     }
  91.  
  92.     $dbh = DBI->connect($dsn, $user, $password, { RaiseError => 1 }) or die RED, "ERROR: The database could not be opened.\n       $DBI::errstr\n       Stopped$!";
  93.     print "INFO: The database has been opened successfully.\n";
  94.     return $dbh;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement