src/hg/utils/automation/HgDb.pm 1.8

1.8 2010/02/02 20:18:47 larrym
support PROFILE option
Index: src/hg/utils/automation/HgDb.pm
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/utils/automation/HgDb.pm,v
retrieving revision 1.7
retrieving revision 1.8
diff -b -B -U 1000000 -r1.7 -r1.8
--- src/hg/utils/automation/HgDb.pm	12 Oct 2009 06:50:48 -0000	1.7
+++ src/hg/utils/automation/HgDb.pm	2 Feb 2010 20:18:47 -0000	1.8
@@ -1,150 +1,152 @@
 #
 # HgDb: Class interface to the mysql databases
 # Get's relevant mysql connect data from the .hg.conf file
 #
 # DO NOT EDIT the /cluster/bin/scripts copy of this file --
 # edit ~/kent/src/hg/utils/automation/HgDb.pm instead.
 
 # $Id$
 
 package HgDb;
 
 use warnings;
 use strict;
 
 use Carp;
 use DBI;
 
 use vars qw(@ISA @EXPORT_OK);
 use Exporter;
 
 @ISA = qw(Exporter);
 
 sub new
 {
 # $args{DB} is required
-# $args{USER}, $args{PASSWORD} and $args{HOST} are optional (and override .hg.conf values)
+# $args{PROFILE}: let's you select db profile (optional: defaults to "db").
+# $args{USER}, $args{PASSWORD} and $args{HOST} are optional (and override .hg.conf values).
     my ($class, %args) = (@_);
     my $ref = {};
     if(!defined($args{DB})) {
         die "Missing \$args{DB}";
     }
     my $dsn = "DBI:mysql:$args{DB}";
     my $confFile = "$ENV{HOME}/.hg.conf";
     if(! -e $confFile) {
         die "Cannot locate conf file: '$confFile'";
     }
+    my $profile = $args{PROFILE} || "db";
     open(CONF, $confFile);
     for (<CONF>) {
         next if /^#/;
         if(/^include/) {
             # XXXX TODO: support "include ../cgi-bin/hg.conf"
             die "include ... syntax not currently supported";
         }
         for my $name (qw(host user password)) {
-            if(/^db\.$name\s*=\s*(.+)/) {
+            if(/^$profile\.$name\s*=\s*(.+)/) {
                 $ref->{uc($name)} = $1;
             }
         }
     }
     close(CONF);
     for (keys %args) {
         # %args override values in conf file.
         $ref->{$_} = $args{$_};
     }
     if($ref->{HOST}) {
         $dsn .= ";host=$ref->{HOST}";
     }
     $ref->{DBH} = DBI->connect($dsn, $ref->{USER}, $ref->{PASSWORD}) or die "Couldn't connect to db: $ref->{DB}";
     bless $ref, 'HgDb';
     return $ref;
 }
 
 sub disconnect
 {
     my ($db) = (@_);
     $db->{DBH}->disconnect();
     $db->{DBH} = undef;
 }
 
 sub DESTROY
 {
     my ($db) = (@_);
     if($db->{DBH}) {
         $db->disconnect();
     }
 }
 
 sub execute
 {
 # Execute given query with @params substituted for placeholders in the query
 # Returns $sth
     my ($db, $query, @params) = (@_);
     my $sth = $db->{DBH}->prepare($query) or die "prepare for query '$query' failed; error: " . $db->{DBH}->errstr;
     if(!$sth->execute(@params)) {
         die "execute for query '$query' failed; error: " . $db->{DBH}->errstr;
     }
     return $sth;
 }
 
 sub quickQuery
 {
 # Execute given query with @params substituted for placeholders in the query.
 # Returns first field in first row.
 # Return undef if query comes up empty.
     my ($db, $query, @params) = (@_);
     my $sth = $db->{DBH}->prepare($query) or die "prepare for query '$query' failed; error: " . $db->{DBH}->errstr;
     if(!$sth->execute(@params)) {
         die "execute for query '$query' failed; error: " . $db->{DBH}->errstr;
     }
     my @row = $sth->fetchrow_array();
     return @row ? $row[0] : undef;
 }
 
 sub tableExist
 {
     my ($db, $tableName) = @_;
     my $retval = 0;
     my $sth = $db->execute("show tables like ?", $tableName);
     my @row = $sth->fetchrow_array();
     if(@row && $row[0]) {
         $retval = 1 ;
     }
     return $retval;
 }
 
 sub dropTable
 {
     my ($db, $tableName) = @_;
     $db->execute("drop table $tableName") || die "Couldn't drop table '$tableName'";
 }
 
 sub dropTableIfExist
 {
     my ($db, $tableName) = @_;
     if(tableExist($db, $tableName)) {
         dropTable($db, $tableName);
     }
 }
 
 sub getChromInfo
 {
 # populate a chromInfo hash reference
     my ($db, $chromInfo) = @_;
     my $sth = $db->execute("select chrom from chromInfo");
     while(my @row = $sth->fetchrow_array()) {
         $chromInfo->{$row[0]}++;
     }
 }
 
 sub getChromSizes
 {
 # populate a chromInfo hash reference ({chr1 => 666, etc.}).
     my ($db, $chromInfo) = @_;
     my $sth = $db->execute("select chrom, size from chromInfo");
     while(my @row = $sth->fetchrow_array()) {
         $chromInfo->{$row[0]} = $row[1];
     }
 }
 
 1;