|
Lines 170-180
environment variable to the pathname of a configuration file to use.
Link Here
|
| 170 |
# A reference-to-hash whose keys and values are the |
170 |
# A reference-to-hash whose keys and values are the |
| 171 |
# configuration variables and values specified in the config |
171 |
# configuration variables and values specified in the config |
| 172 |
# file (/etc/koha/koha-conf.xml). |
172 |
# file (/etc/koha/koha-conf.xml). |
| 173 |
# dbh |
173 |
# DBconn |
| 174 |
# A handle to the appropriate database for this context. |
174 |
# A connection to the appropriate database for this context. |
| 175 |
# dbh_stack |
|
|
| 176 |
# Used by &set_dbh and &restore_dbh to hold other database |
| 177 |
# handles for this context. |
| 178 |
# Zconn |
175 |
# Zconn |
| 179 |
# A connection object for the Zebra server |
176 |
# A connection object for the Zebra server |
| 180 |
|
177 |
|
|
Lines 365-371
sub new {
Link Here
|
| 365 |
warn "read_config_file($conf_fname) returned undef" if !defined($self->{"config"}); |
362 |
warn "read_config_file($conf_fname) returned undef" if !defined($self->{"config"}); |
| 366 |
return if !defined($self->{"config"}); |
363 |
return if !defined($self->{"config"}); |
| 367 |
|
364 |
|
| 368 |
$self->{"dbh"} = undef; # Database handle |
365 |
$self->{"DBconn"} = undef; # Database connexion |
| 369 |
$self->{"Zconn"} = undef; # Zebra Connections |
366 |
$self->{"Zconn"} = undef; # Zebra Connections |
| 370 |
$self->{"stopwords"} = undef; # stopwords list |
367 |
$self->{"stopwords"} = undef; # stopwords list |
| 371 |
$self->{"marcfromkohafield"} = undef; # the hash with relations between koha table fields and MARC field/subfield |
368 |
$self->{"marcfromkohafield"} = undef; # the hash with relations between koha table fields and MARC field/subfield |
|
Lines 719-729
sub _new_Zconn {
Link Here
|
| 719 |
return $Zconn; |
716 |
return $Zconn; |
| 720 |
} |
717 |
} |
| 721 |
|
718 |
|
| 722 |
# _new_dbh |
719 |
# _new_DBconn |
| 723 |
# Internal helper function (not a method!). This creates a new |
720 |
# Internal helper function (not a method!). This creates a new |
| 724 |
# database connection from the data given in the current context, and |
721 |
# database connection from the data given in the current context, and |
| 725 |
# returns it. |
722 |
# returns it. |
| 726 |
sub _new_dbh |
723 |
sub _new_DBconn |
| 727 |
{ |
724 |
{ |
| 728 |
|
725 |
|
| 729 |
## $context |
726 |
## $context |
|
Lines 735-748
sub _new_dbh
Link Here
|
| 735 |
my $db_port = $context->config("port") || ''; |
732 |
my $db_port = $context->config("port") || ''; |
| 736 |
my $db_user = $context->config("user"); |
733 |
my $db_user = $context->config("user"); |
| 737 |
my $db_passwd = $context->config("pass"); |
734 |
my $db_passwd = $context->config("pass"); |
| 738 |
# MJR added or die here, as we can't work without dbh |
735 |
# MJR added or die here, as we can't work without database connection |
| 739 |
my $dbh = DBIx::Connector->connect( |
736 |
my $DBconn = DBIx::Connector->new( |
| 740 |
"dbi:$db_driver:dbname=$db_name;host=$db_host;port=$db_port", |
737 |
"dbi:$db_driver:dbname=$db_name;host=$db_host;port=$db_port", |
| 741 |
$db_user, $db_passwd, |
738 |
$db_user, $db_passwd, |
| 742 |
{ |
739 |
{ |
| 743 |
'RaiseError' => $ENV{DEBUG} ? 1 : 0 |
740 |
'RaiseError' => $ENV{DEBUG} ? 1 : 0, |
|
|
741 |
'mysql_enable_utf8' => 1, |
| 744 |
} |
742 |
} |
| 745 |
); |
743 |
); |
|
|
744 |
# Get handler from connector |
| 745 |
my $dbh = $DBconn->dbh; |
| 746 |
|
746 |
|
| 747 |
# Check for the existence of a systempreference table; if we don't have this, we don't |
747 |
# Check for the existence of a systempreference table; if we don't have this, we don't |
| 748 |
# have a valid database and should not set RaiseError in order to allow the installer |
748 |
# have a valid database and should not set RaiseError in order to allow the installer |
|
Lines 760-768
sub _new_dbh
Link Here
|
| 760 |
|
760 |
|
| 761 |
my $tz = $ENV{TZ}; |
761 |
my $tz = $ENV{TZ}; |
| 762 |
if ( $db_driver eq 'mysql' ) { |
762 |
if ( $db_driver eq 'mysql' ) { |
| 763 |
# Koha 3.0 is utf-8, so force utf8 communication between mySQL and koha, whatever the mysql default config. |
763 |
# Koha 3.0 is utf-8, so force utf8 communication between MySQL and koha, whatever the MySQL default config. |
| 764 |
# this is better than modifying my.cnf (and forcing all communications to be in utf8) |
764 |
# this is better than modifying my.cnf (and forcing all communications to be in utf8) |
| 765 |
$dbh->{'mysql_enable_utf8'}=1; #enable |
|
|
| 766 |
$dbh->do("set NAMES 'utf8'"); |
765 |
$dbh->do("set NAMES 'utf8'"); |
| 767 |
($tz) and $dbh->do(qq(SET time_zone = "$tz")); |
766 |
($tz) and $dbh->do(qq(SET time_zone = "$tz")); |
| 768 |
} |
767 |
} |
|
Lines 770-776
sub _new_dbh
Link Here
|
| 770 |
$dbh->do( "set client_encoding = 'UTF8';" ); |
769 |
$dbh->do( "set client_encoding = 'UTF8';" ); |
| 771 |
($tz) and $dbh->do(qq(SET TIME ZONE = "$tz")); |
770 |
($tz) and $dbh->do(qq(SET TIME ZONE = "$tz")); |
| 772 |
} |
771 |
} |
| 773 |
return $dbh; |
772 |
return $DBconn; |
| 774 |
} |
773 |
} |
| 775 |
|
774 |
|
| 776 |
=head2 dbh |
775 |
=head2 dbh |
|
Lines 793-812
sub dbh
Link Here
|
| 793 |
{ |
792 |
{ |
| 794 |
my $self = shift; |
793 |
my $self = shift; |
| 795 |
my $params = shift; |
794 |
my $params = shift; |
| 796 |
my $sth; |
|
|
| 797 |
|
795 |
|
| 798 |
unless ( $params->{new} ) { |
796 |
if ( $context->{'DBconn'} && !$params->{'new'} ) { |
| 799 |
if ( defined($context->{db_driver}) && $context->{db_driver} eq 'mysql' && $context->{"dbh"} ) { |
797 |
# DBIx::Connector will manage database handler cache and reconnection |
| 800 |
return $context->{"dbh"}; |
798 |
# See http://search.cpan.org/perldoc?DBIx%3A%3AConnector#dbh |
| 801 |
} elsif ( defined($context->{"dbh"}) && $context->{"dbh"}->ping() ) { |
799 |
return $context->{'DBconn'}->dbh; |
| 802 |
return $context->{"dbh"}; |
|
|
| 803 |
} |
| 804 |
} |
800 |
} |
| 805 |
|
801 |
|
| 806 |
# No database handle or it died . Create one. |
802 |
# No database connection, create one. |
| 807 |
$context->{"dbh"} = &_new_dbh(); |
803 |
$context->{'DBconn'} = &_new_DBconn; |
| 808 |
|
804 |
|
| 809 |
return $context->{"dbh"}; |
805 |
return $context->{'DBconn'}->dbh; |
| 810 |
} |
806 |
} |
| 811 |
|
807 |
|
| 812 |
=head2 new_dbh |
808 |
=head2 new_dbh |
|
Lines 816-822
sub dbh
Link Here
|
| 816 |
Creates a new connection to the Koha database for the current context, |
812 |
Creates a new connection to the Koha database for the current context, |
| 817 |
and returns the database handle (a C<DBI::db> object). |
813 |
and returns the database handle (a C<DBI::db> object). |
| 818 |
|
814 |
|
| 819 |
The handle is not saved anywhere: this method is strictly a |
815 |
The connection is not saved anywhere: this method is strictly a |
| 820 |
convenience function; the point is that it knows which database to |
816 |
convenience function; the point is that it knows which database to |
| 821 |
connect to so that the caller doesn't have to know. |
817 |
connect to so that the caller doesn't have to know. |
| 822 |
|
818 |
|
|
Lines 826-891
connect to so that the caller doesn't have to know.
Link Here
|
| 826 |
sub new_dbh |
822 |
sub new_dbh |
| 827 |
{ |
823 |
{ |
| 828 |
my $self = shift; |
824 |
my $self = shift; |
| 829 |
|
825 |
return &_new_DBconn->dbh; |
| 830 |
return &_new_dbh(); |
|
|
| 831 |
} |
| 832 |
|
| 833 |
=head2 set_dbh |
| 834 |
|
| 835 |
$my_dbh = C4::Connect->new_dbh; |
| 836 |
C4::Connect->set_dbh($my_dbh); |
| 837 |
... |
| 838 |
C4::Connect->restore_dbh; |
| 839 |
|
| 840 |
C<&set_dbh> and C<&restore_dbh> work in a manner analogous to |
| 841 |
C<&set_context> and C<&restore_context>. |
| 842 |
|
| 843 |
C<&set_dbh> saves the current database handle on a stack, then sets |
| 844 |
the current database handle to C<$my_dbh>. |
| 845 |
|
| 846 |
C<$my_dbh> is assumed to be a good database handle. |
| 847 |
|
| 848 |
=cut |
| 849 |
|
| 850 |
#' |
| 851 |
sub set_dbh |
| 852 |
{ |
| 853 |
my $self = shift; |
| 854 |
my $new_dbh = shift; |
| 855 |
|
| 856 |
# Save the current database handle on the handle stack. |
| 857 |
# We assume that $new_dbh is all good: if the caller wants to |
| 858 |
# screw himself by passing an invalid handle, that's fine by |
| 859 |
# us. |
| 860 |
push @{$context->{"dbh_stack"}}, $context->{"dbh"}; |
| 861 |
$context->{"dbh"} = $new_dbh; |
| 862 |
} |
| 863 |
|
| 864 |
=head2 restore_dbh |
| 865 |
|
| 866 |
C4::Context->restore_dbh; |
| 867 |
|
| 868 |
Restores the database handle saved by an earlier call to |
| 869 |
C<C4::Context-E<gt>set_dbh>. |
| 870 |
|
| 871 |
=cut |
| 872 |
|
| 873 |
#' |
| 874 |
sub restore_dbh |
| 875 |
{ |
| 876 |
my $self = shift; |
| 877 |
|
| 878 |
if ($#{$context->{"dbh_stack"}} < 0) |
| 879 |
{ |
| 880 |
# Stack underflow |
| 881 |
die "DBH stack underflow"; |
| 882 |
} |
| 883 |
|
| 884 |
# Pop the old database handle and set it. |
| 885 |
$context->{"dbh"} = pop @{$context->{"dbh_stack"}}; |
| 886 |
|
| 887 |
# FIXME - If it is determined that restore_context should |
| 888 |
# return something, then this function should, too. |
| 889 |
} |
826 |
} |
| 890 |
|
827 |
|
| 891 |
=head2 queryparser |
828 |
=head2 queryparser |
| 892 |
- |
|
|