We don't want to recreate a new connection to the DB every time we want
a new schema.
This patch creates a $database package level variable on the same way
it's done in C4::Context for $dbh.
Signed-off-by: Jacek Ablewicz <abl@biblos.pk.edu.pl>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
use C4::Context;
use base qw(Class::Accessor);
use C4::Context;
use base qw(Class::Accessor);
+use vars qw($database);
+
__PACKAGE__->mk_accessors(qw( ));
# _new_schema
__PACKAGE__->mk_accessors(qw( ));
# _new_schema
sub schema {
my $self = shift;
my $sth;
sub schema {
my $self = shift;
my $sth;
- if ( defined( $self->{"schema"} ) && $self->{"schema"}->storage->connected() ) {
- return $self->{"schema"};
+
+ if ( defined( $database->{schema} ) and $database->{schema}->storage->connected() ) {
+ return $database->{schema};
}
# No database handle or it died . Create one.
}
# No database handle or it died . Create one.
- $self->{"schema"} = &_new_schema();
-
- return $self->{"schema"};
+ $database->{schema} = &_new_schema();
+ return $database->{schema};
# We assume that $new_schema is all good: if the caller wants to
# screw himself by passing an invalid handle, that's fine by
# us.
# We assume that $new_schema is all good: if the caller wants to
# screw himself by passing an invalid handle, that's fine by
# us.
- push @{ $self->{"schema_stack"} }, $self->{"schema"};
- $self->{"schema"} = $new_schema;
+ push @{ $database->{schema_stack} }, $database->{schema};
+ $database->{schema} = $new_schema;
sub restore_schema {
my $self = shift;
sub restore_schema {
my $self = shift;
- if ( $#{ $self->{"schema_stack"} } < 0 ) {
+ if ( $#{ $database->{schema_stack} } < 0 ) {
# Stack underflow
die "SCHEMA stack underflow";
}
# Pop the old database handle and set it.
# Stack underflow
die "SCHEMA stack underflow";
}
# Pop the old database handle and set it.
- $self->{"schema"} = pop @{ $self->{"schema_stack"} };
+ $database->{schema} = pop @{ $database->{schema_stack} };
# FIXME - If it is determined that restore_context should
# return something, then this function should, too.
# FIXME - If it is determined that restore_context should
# return something, then this function should, too.
use Modern::Perl;
use utf8;
use Modern::Perl;
use utf8;
-use Test::More tests => 10;
+use Test::More tests => 12;
BEGIN {
use_ok('Koha::Database');
BEGIN {
use_ok('Koha::Database');
my $dbh;
ok( $dbh = $schema->storage->dbh(), 'Get an old fashioned DBI dbh handle' );
ok( $schema->storage->connected(), 'Check our db connection is active' );
my $dbh;
ok( $dbh = $schema->storage->dbh(), 'Get an old fashioned DBI dbh handle' );
ok( $schema->storage->connected(), 'Check our db connection is active' );
-ok( $schema = $database->schema(), 'Try and get the same schema' );
+is( ref($schema), 'Koha::Schema', 'Koha::Database->new->schema should return a Koha::Schema' );
+my $another_schema = $database->schema();
+is( $another_schema->storage->_conn_pid, $schema->storage->_conn_pid, 'Getting another schema should return the same one, it has correctly been cached' );
+$another_schema = Koha::Database->new->schema();
+is( $another_schema->storage->_conn_pid, $schema->storage->_conn_pid, 'Getting another schema should return the same one, it has correctly been cached' );
my $new_schema;
ok( $new_schema = $database->new_schema(), 'Try to get a new schema' );
my $new_schema;
ok( $new_schema = $database->new_schema(), 'Try to get a new schema' );